PHP变量在第二页上保持显示空白

时间:2017-08-25 20:38:35

标签: php redirect http-post html-form

我有一个PHP页面,它呈现一个HTML表单,通过POST将数据发送到PHP Page2,执行一些MySQL命令,根据结果,它会将$status设置为某些文本,以便我可以在初始提交页面。无论我做什么,都什么都不显示。如果我在顶部删除$status='';,它会提供未定义的变量,因此它似乎再次看不到$status,而不是在开头时显示空白值。

Index.php(提交页面)

<form method="post" name="sn_upload" id="sn_upload" action="upload.php">
<?php include 'upload.php'; ?>
<div>
   <label for="model">Model: </label><select id="model" name="model" title="Model">
        <option value="Model A">Model A</option>
    </select><br><br>
    <label for="sn">Serial Number: </label><input type="text" id="sn" name="sn" placeholder="Serial Number" pattern="[a-zA-Z0-9]{11,13}"/><br><span class="error"><p id="sn_error" style="color:red;"></p></span><br>
    <?php echo $status; ?> //this shows nothing at all
    <input name="submit" type="submit" value="Submit" />


</div>
</form>

upload.php(MySQL页面)

<?php
error_reporting(E_ALL);ini_set('display_errors',1);
$servername = "localhost";
$username = "user";
$password = "pass";
$dbname = "database";
$status = "";
if (isset($_POST['submit'])) {
    // Create connection
    $con = new mysqli($servername, $username, $password, $dbname);
    // Check connection
    if ($con->connect_error) {
        die("Connection failed: " . $con->connect_error);
    } 

    $mod = mysqli_real_escape_string($con,$_POST['model']);
    $sn_num = mysqli_real_escape_string($con,$_POST['sn']);
    $check = $con->query("SELECT * FROM rma_product WHERE pro_sn = ('$sn_num') ");

    if ($check->num_rows == 0)
    {
        $sql = "INSERT INTO rma_product (m_type,pro_sn) VALUES ('$mod','$sn_num')";
    if ($con->query($sql) === TRUE) {
        $status = "Success";
        header('Location: index.php');
    } else {
        $status = "Failed";
        header('Location: index.php');
    }
}
else if ($check->num_rows >= 1)
    {
        $status = "Exists";

        header('Location: index.php');
    }

$con->close();
}
return $status;
?>

2 个答案:

答案 0 :(得分:1)

在每种情况下,只要将非空字符串文字分配给$status(即,当尝试插入记录或报告相关记录已存在时),就会调用header() 。这将告诉浏览器导航到另一页,基本上结束当前页面执行。因此,存储在$status中的值不会持续存在。

        $status = "Success";
        header('Location: index.php');
    } else {
        $status = "Failed";
        header('Location: index.php');
    }
}
else if ($check->num_rows >= 1)
{
    $status = "Exists";
    header('Location: index.php');

因此,您需要弄清楚如何设置该值而不重定向或将值发送到重定向到的页面。其中的选项包括将值附加到查询字符串(例如header('Location: index.php?status='.$status);并使用会话检查$_GET['status']中的值以分配给index.php中的$status)(如Nosajimiki所述) )等等。

答案 1 :(得分:1)

看起来您正在尝试将$ status用作会话变量。如果要在页面之间保留PHP变量,请创建会话并将其另存为会话变量

<?php
// Start the session
session_start();
...
$_SESSION["status"] = $status;
header('Location: index.php');
?>

然后您可以使用$ _SESSION [&#34; status&#34;]

在其他后续页面上调用它