当前位置:  开发笔记 > 编程语言 > 正文

PHP寄存器表单不插入

如何解决《PHP寄存器表单不插入》经验,为你挑选了1个好方法。

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

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

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

这是HTML表单:


这是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 ''; 
}

}

?>

注意:我将验证输入,但现在我只想插入.

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

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

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

编辑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> Funk Forty N..:

根据编辑中的错误.

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

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

https://github.com/ircmaxell/password_compat

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

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

你也有(有)一个拼写错误display_error,需要display_errors与"s".(您现在在问题中编辑过)/sf/ask/17360801/.

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

编辑:

根据Chris G的评论,你的Username列中缺少一个标记

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

荣誉给克里斯

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

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

但是,我会替换

if(!$stmt->execute())

if(!$stmt->execute()){trigger_error("There was an error....".$conn->error, E_USER_WARNING);}

这对你来说可能更好.

编辑#2:

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

voornaam以及achternaam它们是否FnameLname我们的查询相对应.

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

编辑#3,取自聊天:

您的表名为User,但您的查询表是具有"s"的用户.

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

因此错误:

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

你选错了桌子.

推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有