我正在一个可以注册的网站上工作。现在我知道在处理用户输入时你必须使用预准备语句。
现在我的问题。在我尝试注册查询时,在此注册表单上没有执行,但我也没有收到任何错误。我在查询中尝试了回滴答,没有后退滴答。但无济于事(否则我不会问这个问题: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-在这里回答我将发布我的数据库结构
编辑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-的答案以及现在正在运行的内容。我要感谢那些抽出时间帮助我的人。
答案 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
以及我们的查询中是否与achternaam
和Fname
相对应。错误检查会抛出关于列不匹配/不存在的错误,和/或绑定数量不匹配。
编辑#3,取自聊天:
您的表名为“用户”,但您的查询表是“&#34; s&#34;”的用户。
屏幕截图:http://i.stack.imgur.com/YfNJY.jpg
因此错误:
致命错误:在第146行的/var/www/Register.php中调用非对象的成员函数bind_param()