所以我有这个表单,提交一个名称和一个用户创建的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,但没有任何结果。
答案 0 :(得分:0)
由于您的userName是字符串,因此您必须在引号中添加值。启用错误日志并检查查询是否正确执行。将您的插入查询更改为:
$query = "INSERT INTO datatable (userName, ID) VALUES ('".$name."',".$ID.")";
此外,您的代码对SQL注入是开放的。使用准备好的陈述来阻止它。
答案 1 :(得分:0)
代码中的if
块看起来就像在帖子中一样吗?或者您是否删除了重定向代码,以便缩短帖子中的代码段?如果您的if
块看起来与您的帖子相同,请在其中添加一些echo
语句,以确保该块未运行。现在,看起来如果该块运行,将不会输出任何内容,脚本将结束,并且您将看到一个空白屏幕。
其他一些想法:
mysqli_connect_errno()
并输出
在mysqli_connect_error()
之后mysqli_connect()
确认
你有一个有效的连接。希望这有帮助!
答案 2 :(得分:-1)
你的if条件无法正常工作或者count等于零或大于零0。
请从if(mysqli_num_rows($validationresult)>=0){
更改为if(mysqli_num_rows($validationresult)>0){
也按照B.Desai的答案进行查询中的更正。
答案 3 :(得分:-2)
您的代码中似乎没有错误;
空白页面背后的原因可能是错误,但您无法查看日志,因为错误报告在您的服务器中设置为关闭,因此请尝试将error_reporting(E_ALL);
放在页面的开头,这样您可以看到代码的所有错误或警告。
另外,您在行尾;
错过了echo "added new record"
。
在这里,我对您的代码进行了一些更改:
<?php
$name = $_POST["Username"];
$ID = $_POST["ID"];
$conn = mysqli_connect("localhost","<DB_USER>","<DB_PASSWORD>","<DB_NAME>");
$validateQuery = "SELECT id FROM <TABLE_NAME> WHERE ID = ".$ID;
$validationResult = mysqli_query($conn, $validateQuery);
if (mysqli_num_rows($validationResult) > 0){
//redirect to form with collected information
} else {
$query = "INSERT INTO <TABLE_NAME> (userName, ID) VALUES (". $name .",".$ID.")";
$results = mysqli_query($conn, $query);
if ($results) {
echo "added new record";
}
}
?>
希望这会有所帮助! :)