php验证后将不会显示HTML?

时间:2019-01-27 17:59:27

标签: php html mysql mysqli

在输入表单上运行PHP验证后,页面上的HTML消失了。

HTML:InsertUser.php

<?php
session_start();
require_once('File Below'); 
echo $errors; //Errors is local variable within insertBackend.php i know. i just wanted this example to be exact compared next to my code.
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/css/bootstrap.min.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/js/bootstrap.min.js"></script       
</head>
<body>
    <div class="container">
        <form class="form-horizontal" role="form" method="post" action="InsertUser.php">
            <div class="form-group">
                <label for="txtName" class="col-sm-2 control-label">Name:</label>
                <div class="col-sm-10">
                    <input type="text" class="form-control" id="inputName" name="txtName" placeholder="Name" value="">
                </div>
            </div>
            <div class="form-group">
                <label for="txtPassword" class="col-sm-2 control-label">Password:</label>
                <div class="col-sm-10">
                    <input type="password" class="form-control" id="inputPassword" name="txtPassword" placeholder="Password" value="">
                </div>
            </div>
            <div class="form-group">
                <div class="col-sm-10 col-sm-offset-2">
                    <input id="btnSubmit" name="insert_form" type="submit" value="Submit" class="btn btn-primary">
                </div>
            </div>
            <div class="form-group">
                <div class="col-sm-10 col-sm-offset-2">
                    <input id="btnCreate" onclick="location.href = 'createUser.php';" name="createUser" type="button" value="Create User" class="btn btn-primary">
                </div>
            </div>
            <div class="form-group">
                <div class="col-sm-10 col-sm-offset-2">
                    <input id="btnsame" onclick="location.href = 'InsertUser.php';" name="InsertUser" type="button" value="Insert User" class="btn btn-primary">
                </div>
            </div>
        </form>
    </div>

</body>
</html>

PHP页面:InsertBackend.php

<?php
session_start();
require_once('*DIRECTORY CONTAINING SQL CONNECTION*'); //works fine
if ($con->connect_error) {
die("Connection failed: " . $con->connect_error);
}

if(isset($_POST['insert_form']))
{
$_SESSION['InsertUser'] = "Insert User Pass"; //This ensures i make it INTO the method
$name= "";
$password = "";
$nameInsert = mysqil_real_escape_string($_POST['txtName']);
//^This right here. mysqli_real_escape_string();
$passInsert = mysqil_real_escape_string($_POST['txtPassword']);
//^This right here. mysqli_real_escape_string();
$errors = array();
if(empty($nameInsert))
{
    array_push($errors, "Please enter your Name");
}
if(empty($passInsert))
{
    array_push($errors, "Please enter your password");
}
if(count($errors = 0))
{
    $name = mysqil_real_escape_string($con, $_POST['txtName']);
    $password = mysqil_real_escape_string($con, $_POST['txtPassword']);
    $hashPass = password_hash($password, PASSWORD_DEFAULT);

    $sqlInsert = "INSERT INTO Table (Name, Phash)
    VALUES ('$name', '$hashPass')";
    $_SESSION['VerifyHash'] = $hashPass; // Super security issue using a hashed password as a flag? I know. Just wanted visual representation of pass to compare next to my database

    if ($con->query($sqlInsert) === TRUE) 
    {
        header('location: InsertUser.php');
        echo "New record created successfully <br>";
    } 
    else 
    {
        header('location: InsertUser.php');
        echo "Error: " . $sql . "<br>" . $con->error;
    }

}
}
echo "Connected"; //Flag to verify Database connection throughout usage. If it makes it here then its connected. End flag.

//CLOSE DATABASE CONNECTION
mysqli_close($con);

?> 

当我同时运行所有这些并输入测试数据时。它到达:InsertUser.php。并正确定向。但是,它什么也不显示。没有代码,没有会话,没有HTML。没有?但是,当我只刷新页面而不导航到任何地方时,它会很好地显示整个插入表单。我的2个标志显示:

ConnectedInsert User Pass

然后我继续消除会话数据。然后我只看到

Connected 

登录表单上方。这一切发生之后,我的数据库中没有任何更改吗?并没有实际添加用户。

使用此信息,我可以得出以下结论:

  • 我的表单从表单调用时会提交到我的InsertBackend.php文件。

  • 已正确连接到我的数据库。

我的后端脚本是:

  • 未正确插入数据库。

  • 不正确地散列我的密码输入。

  • 在调用插入表单时未呈现HTML。

我非常努力地弄清楚了在这一系列事件中到底哪里出了问题。但是,我一直无法弄清为什么调用不正确以及为什么我的插入内容根本无法正常工作。

我真的试图在这里找到可以帮助我弄清楚的东西。不幸的是,我找不到任何让我清晰的东西。在过去的几个小时后,我决定看看这里是否有人对我的问题有帮助。只是为了再看一眼。

1 个答案:

答案 0 :(得分:0)

这是糟糕的构建,没有会话检查。我想如果该会话已经存在,则无法创建该会话。

使用

print_r(error_get_last());

为我提供

Array ( [type] => 8 [message] => session_start(): A session had already been started - ignoring [file] => *InsertBackend.php* [line] => 2 )

也许?我想我必须检验这个理论。我将在进程进行时更新代码,直到页面全部显示并插入数据库为止,以防其他人遇到类似问题。