PHP寄存器表单不插入

时间:2016-01-02 14:52:07

标签: php mysql

我正在一个可以注册的网站上工作。现在我知道在处理用户输入时你必须使用预准备语句。

现在我的问题。在我尝试注册查询时,在此注册表单上没有执行,但我也没有收到任何错误。我在查询中尝试了回滴答,没有后退滴答。但无济于事(否则我不会问这个问题:P)。

有人可以说我是否使用正确的方法来检查查询是否成功?

以下是HTML表单:

<form id="register" action="Register.php" name="register" method="post">

     <table>
            <tr>
                <td>
                    <label id="lblUsername">Username</label>
                </td>
                <td>
                    <input type="text" id="txtUsername" name="username" required>
                </td>
            </tr>
            <tr>
                <td>
                    <label id="lblEmail">Email</label>
                </td>
                <td>
                    <input type="text" id="txtEmail" name="email" required>
                </td>
            </tr>
            <tr>
                <td>
                    <label ID="lblPass">Password</label>
                </td>
                <td>
                    <input type="password" name="password" ID="txtPassword" required>
                </td>
            </tr>
            <tr>
                <td>
                    <label ID="lblConfPass">Herhaal password</label>
                </td>
                <td>
                    <input type="password" name="confpass" ID="txtconfpass" required>
                </td>
            </tr>

            <tr>
                <td><label id="lblVnaam">Voornaam:</label></td>
                <td><input name="vnaam" type="text" required></td>
            </tr>
            <tr>
                <td><label id="lblAnaam">Achternaam:</label></td>
                <td><input name="anaam" type="text" required></td>
            </tr>    
        </table>
        <input type="submit" name="submit" value="Registreren" required>
        <br />
</form>

以下是PHP部分:

error_reporting(E_ALL);
ini_set('display_errors', -1);

if(isset($_POST['submit']))
{

$host = "localhost";
$username = "root";
$password = "password";
$dbname = "mijnwebsite";

$conn = new mysqli($host,$username,$password,$dbname);


if($conn->connect_errno)
{
    die('Unable to connect to the database. [' . $conn->connect_error . ']');
}



$errors = array();
$data = array();
$fname = $_POST['vnaam'];
$lname = $_POST['anaam'];
$username = $_POST['username'];
$email = $_POST['email'];
$password = $_POST['password'];
$confpass = $_POST['confpass'];
$password_hash = crypt($password);

$stmt = $conn->prepare("INSERT INTO `User`(`Fname`, `Lname`, `Email`, `Username`, `Password`) VALUES(?,?,?,?,?)");

$stmt->bind_param("sssss", $fname, $lname, $email, $username, $password_hash);

if(!$stmt->execute())
{
    die("Kon query niet uitvoeren. " . $stmt->error);
}
else
{
    echo '<script type="text/javascript">alert ("Registratie gelukt! klik op oke om door te gaan.");</script>'; 
}

}

?>

注意:我要验证输入,但现在我只想插入。

提前谢谢你们。如果有需要添加的内容请发表评论。

编辑:我更改了错误报告。这就是我没有得到任何错误的原因。我得到的错误是:

  

致命错误:调用未定义的函数password_hash()   第140行/var/www/Register.php

编辑2 :根据Fred -ii-在这里回答我将发布我的数据库结构dbstructure

编辑3:现在我在准备查询时将后面的勾号添加到用户名的末尾,我添加了if(!$stmt->execute()){trigger_error("There was an error....".$conn->error, E_USER_WARNING);}我收到了不同的错误。

  

致命错误:在第146行的/var/www/Register.php中调用非对象的成员函数bind_param()

注4:我已更新代码以匹配@ Fred-ii-的答案以及现在正在运行的内容。我要感谢那些抽出时间帮助我的人。

1 个答案:

答案 0 :(得分:7)

根据编辑中的错误。

  

致命错误:在第140行的/var/www/Register.php中调用未定义的函数password_hash()

你去吧。您的PHP版本不支持该功能。您需要使用密码兼容包。

https://github.com/ircmaxell/password_compat

您还可以查看使用crypt() http://php.net/manual/en/function.crypt.php

  • 确保密码列足够长以容纳哈希值。最安全的是VARCHAR(255)

您在[{1}}中也有(有)拼写错误,并且需要{&#34;&#34;} display_error。 (您现在在问题中编辑过)https://stackoverflow.com/posts/34567204/revisions

根据手册http://php.net/manual/en/function.error-reporting.php

编辑:

根据Chris G的评论,

中的display_errors列缺少标记。
Username

感谢Chris

(`Fname`, `Lname`, `Email`, `Username, `Password`)
                                     ^ right there.

一旦您的代码使用了您可以使用的密码散列函数,错误检查查询http://php.net/manual/en/mysqli.error.php就会发出错误信号。

但是,我会替换

(`Fname`, `Lname`, `Email`, `Username`, `Password`)

if(!$stmt->execute())

这可能对你有用。

编辑#2:

我刚才注意到的另一件事;查询中的列名称和屏幕截图的列名称似乎与名称不匹配。

  • if(!$stmt->execute()){trigger_error("There was an error....".$conn->error, E_USER_WARNING);}voornaam以及我们的查询中是否与achternaamFname相对应。

错误检查会抛出关于列不匹配/不存在的错误,和/或绑定数量不匹配。

编辑#3,取自聊天:

您的表名为“用户”,但您的查询表是“&#34; s&#34;”的用户。

屏幕截图:http://i.stack.imgur.com/YfNJY.jpg

因此错误:

  

致命错误:在第146行的/var/www/Register.php中调用非对象的成员函数bind_param()

  • 你选错了桌子。