PHP重定向导致包括失败

时间:2015-01-27 09:35:59

标签: php html redirect mysqli include

我有4个php文件,其中2个是表单。在第一个表单上,用户输入一个数字,然后在提交第二个php文件(表单操作)时检查该数字是否存在于sql数据库中。如果是这样,它会将用户重定向到第三个php文件,该文件是其余细节的表单。现在在最终的php文件中,它将所有用户输入添加到数据库中,我有一个include secondfile.php来调用用户输入的数字,这样就可以将数据添加到与检查对象不同的表中的数据库中。它基本上是一种将两个表链接在一起的方法。我已经尝试了几种除了这种情况之外的测试,我唯一的理论是因为重定向头(/var/etc/whatever/thirdfile.php)而失败。任何人都可以告诉我一种绕过它的方法或另一种方法吗?

文件1:

<html>
<body>
<p>Enter the reference number of you request<i>(this should have been sent to you by the sponsor)</i>:</p>

 <form action="2.php" method="POST">
  <fieldset align="left">

  <table>
  <tr>
   <td>Reference Number:</td><td><input type="text" name="REFERENCE_NO" size="10" /></td>
  </tr>

 <input type="submit" value="Submit">


</table>
</body>
</html>

文件2:

<html>
<?php


$check = $_POST["REFERENCE_NO"];
$servername = "x.x.x.x";
$username = "SarahSmith";
$password = "something123";
$dbname = "DB"; 

#connect to MySQL server
    $conn = new mysqli($servername, $username, $password, $dbname);
  if ($conn->connect_error){
      die ("Connection failed: " . $conn->connect_error);
  }

#check reference number exists
$sql ="SELECT REF FROM TEST WHERE REF='$check';";

#check if query returned a row
$result = $conn->query($sql);
if ($result->num_rows == 1){
header ("Location: http://www.example.com/3.php");
}
else {echo "ERROR";}


$conn->close();

?>
</html>

文件3:

<html>
  <form action="4.php" method="POST">
  <fieldset align="left">
  <legend>Requestor Form</legend>
  <p><i>To be completed by the requestor</i></p>
  <table>      

  <tr>
   <td>Name:</td><td><input type="text" name="REQUESTOR_NAME" size="40" />        </td>
  </tr>

  <tr>
   <td>Department/Position:</td><td><input type="text" name="DEPARTMENT_POSITION" size="40" /></td>
  </tr>

  <tr>
   <td>Telephone Number:</td><td><input type="text" name="REQUESTOR_TELEPHONE_NUMBER" size="40" maxlength="11" /></td>
  </tr>

  <tr>
   <td>Email Address:</td><td><input type="email" name="REQUESTOR_EMAIL" size="40" /></td>
  </tr>

  <tr>
   <td>Project Manager Name:</td><td><input type="text" name="PROJECT_MANAGER_NAME" size="40" /></td>
  </tr>

  <tr>
   <td>Project Mandate Number:</td><td><input type="text" name="PROJECT_MANDATE_NUMBER" size="40" /></td>
  </tr>

  <tr>
   <td>Project Title:</td><td><input type="text" name="PROJECT_TITLE" size="40" /></td>
  </tr>

  <tr>
   <td>What are the Project requirements:</td><td><textarea placeholder="Please detail exact requirements or contact us on the above e-mail address in order to discuss your requirements prior to submitting your request" cols="42" rows="10" name="REQUIREMENTS" id="REQUIREMENTS" ></textarea></td>
  </tr>

  <tr>
   <td>What are the Project timescales:</td><td><input type="date" name="TIMESCALE" size="40" /></td>
  </tr>
 <input type="submit" value="Sumbit">
 </form>

文件4:

<?php
$servername = "x.x.x.x";
$username = "SarahSmith";
$password = "something123";
$dbname = "DB";

include_once '2.php';

#connect to MySQL server
    $conn = new mysqli($servername, $username, $password, $dbname);
  if ($conn->connect_error){
      die ("Connection failed: " . $conn->connect_error);
  }


#create MySQL query to add new record to TEST table
$sql = "INSERT INTO REQ (REFERENCE_NO, REQUESTOR_NAME, DEPARTMENT_POSITION, REQUESTOR_TELEPHONE_NUMBER, REQUESTOR_EMAIL, PROJECT_MANAGER_NAME, PROJECT_MANDATE_NUMBER, PROJECT_TITLE, REQUIREMENTS, TIMESCALE)
VALUES ('$check', '$_POST[REQUESTOR_NAME]', '$_POST[DEPARTMENT_POSITION]', '$_POST[REQUESTOR_TELEPHONE_NUMBER]', '$_POST[REQUESTOR_EMAIL]', '$_POST[PROJECT_MANAGER_NAME]', '$_POST[PROJECT_MANDATE_NUMBER]', '$_POST[PROJECT_TITLE]', '$_POST[REQUIREMENTS]', '$_POST[TIMESCALE]')";


#if the data is added to the database echo ref and message otherwise show error.
if ($conn->query($sql) === TRUE) {
    echo "Your Request :"$check" has been submitted and you should receive a confirmation email shortly.";
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}

$conn->close();
?>

谢谢你们。

3 个答案:

答案 0 :(得分:0)

  

现在在最终的php文件中,它将所有用户输入添加到数据库中,我有一个include secondfile.php来调用用户输入的数字,这样就可以将数据添加到与检查的表不同的表中的数据库中反对。

这不是这些东西的运作方式。用户在表单中输入的数据需要从一个请求传输到URL中编码的另一个请求。您不能只包含一个源文件(自上次用户访问以来可以调用数百次)并读取用户提交给它的值。用户输入的所有内容都需要在某处保留。您可以将其保存在用户的会话中,将其写入数据库或通过URL(以及下一个和下一个,以及......)将其传输到下一页。

只有通过包含它才能检索提交给文件2的数据。

您应该阅读一些关于http和PHP的初学者教程,以了解请求的生命周期。

答案 1 :(得分:0)

PHP的生命周期正在使你所需要的东西变得不可能。 当您请求表单时,服务器会活动,为您提供表单,然后&#34; die&#34;。 当您第一次将数据发送回2.php时,一旦脚本完成,php就会将重定向发送到浏览器并关闭。 当浏览器获得重定向时,它会调用文件3,这是另一个变为活动周期的文件,当你发布该表单时,它就是一个新的循环。

关键是,这些文件之间没有存储状态,当你在文件4中包含文件2时,你唯一要做的就是获取文件2中的程序,而不是之前任何处理过的数据。运行。

您需要在某种持久层中处理该数据。例如:当您的数据到达2.php时,您将该数字存储在数据库的临时表中或缓存中。这样,当你到达文件4时,你就可以从那里读取数据。

请注意,您根本不需要在2.php中加入4.php,这是没有意义的。

答案 2 :(得分:0)

您无法使用包含旧版POST var的值。 Juste将您的价值放在用户SESSION

在你的第二个档案中:

$result = $conn->query($sql);
if ($result->num_rows == 1){
header ("Location: http://www.example.com/3.php");
$_SESSION['REFERENCE_NO']=$check
}
else {echo "ERROR";}

在第4个文件中更改所有&#34; $ check&#34; by&#34; $ _ SESSION [&#39; REFERENCE_NO&#39;]&#34;

希望它会帮助你