这个问题在这里已经有答案了:
引用-这个错误在php中是什么意思(36个答案)
如何显示mysqli查询的错误[重复](2个答案)
如何检查mysql中是否存在行(i、 e.检查mysql中是否有邮件(4个答案)
两年前关门了。
所以我有一个表单,它提交了一个名字和一个用户创建的id
-html
<form action=Validate.php method="POST">
<input type=text name="Username">
<input type=text name="ID">
</form>
我要做的是获取关于id的信息,对照数据库进行检查,如果返回false,则将其添加到数据库中。
-php
require 'connection.php';
$conn = mysqli_connect($servername,$username,$password);
mysqli_select_db($conn,$database);
$name = $_POST["Username"];
$ID = $_POST["ID"];
$validatestatement = mysqli_prepare("SELECT id FROM datatable WHERE id = ?);
mysqli_stmt_bind_param($validatestatement,'s',$ID);
$validateresult = mysqli_stmt_execute($validatestatement);
if(mysqli_num_rows($validationresult)>0){
//redirect to form with collected information, this is to shorten the post
}
else{
$stmt = "INSERT INTO datatable (userName, ID) VALUES (?,?)";
mysqli_stmt_bind_param($stmt, 'ss', $Username, $ID)
$results = mysqli_query($conn,$query);
if($results){
echo "added new record";
}
}
现在,在点击提交按钮之后,我看到了一个空白页面。页面收集输入的数据,但似乎两个查询都没有通过。
是我遗漏了什么,还是我的语法和逻辑都错了?
编辑:添加了连接语句和数据库选择语句。我还按照建议把它改成了一份事先准备好的声明。但是文件没有输入if语句。我试图附和$validatestatement,但什么也没说出来。
4条答案
按热度按时间yyhrrdl81#
你的代码似乎很少出错;
可能是空白页背后的原因是有错误,但是您不能看到日志,因为错误报告在服务器中设置为OFF,所以尝试放置
error_reporting(E_ALL);
从页面开始,这样您就可以看到代码中的所有错误或警告。另外,你错过了
;
在行尾:echo "added new record"
.在这里,我对您的代码做了一些更改:
希望这能有所帮助!:)
mfpqipee2#
是吗
if
代码中的块看起来和帖子中的一样?或者删除重定向代码是为了缩短文章中的代码片段?如果你的if
在你的岗位上看起来像块,放一些echo
语句以确保块没有运行。现在看起来,如果该块运行,将不会输出任何内容,脚本将结束,并且您将看到一个空白屏幕。其他一些想法:
你确定你已经成功连接到你的数据库了吗?检查
mysqli_connect_errno()
和输出mysqli_connect_error()
在你的mysqli_connect()
以确保您有一个有效的连接。使用准备好的语句,而不是将变量连接到sql字符串中。您现在所拥有的为sql注入提供了机会,而准备好的语句可以帮助抑制这种情况。
希望这有帮助!
pdkcd3nj3#
如果条件不能正常工作,则计数等于零或大于零。请从
if(mysqli_num_rows($validationresult)>=0){
至if(mysqli_num_rows($validationresult)>0){
同样,请按照b.desai的答案进行查询中的更正。xt0899hw4#
因为用户名是字符串,所以必须在引号中添加值。启用错误日志并检查查询是否正确执行。将插入查询更改为:
此外,您的代码还可以进行sql注入。用事先准备好的陈述来阻止它。