php-检查是否存在id为的记录,如果为false,则插入此记录

guykilcj  于 2021-06-21  发布在  Mysql
关注(0)|答案(4)|浏览(325)

这个问题在这里已经有答案了

引用-这个错误在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,但什么也没说出来。

yyhrrdl8

yyhrrdl81#

你的代码似乎很少出错;
可能是空白页背后的原因是有错误,但是您不能看到日志,因为错误报告在服务器中设置为OFF,所以尝试放置 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";
    }
}
?>

希望这能有所帮助!:)

mfpqipee

mfpqipee2#

是吗 if 代码中的块看起来和帖子中的一样?或者删除重定向代码是为了缩短文章中的代码片段?如果你的 if 在你的岗位上看起来像块,放一些 echo 语句以确保块没有运行。现在看起来,如果该块运行,将不会输出任何内容,脚本将结束,并且您将看到一个空白屏幕。
其他一些想法:
你确定你已经成功连接到你的数据库了吗?检查 mysqli_connect_errno() 和输出 mysqli_connect_error() 在你的 mysqli_connect() 以确保您有一个有效的连接。
使用准备好的语句,而不是将变量连接到sql字符串中。您现在所拥有的为sql注入提供了机会,而准备好的语句可以帮助抑制这种情况。
希望这有帮助!

pdkcd3nj

pdkcd3nj3#

如果条件不能正常工作,则计数等于零或大于零。请从 if(mysqli_num_rows($validationresult)>=0){if(mysqli_num_rows($validationresult)>0){ 同样,请按照b.desai的答案进行查询中的更正。

xt0899hw

xt0899hw4#

因为用户名是字符串,所以必须在引号中添加值。启用错误日志并检查查询是否正确执行。将插入查询更改为:

$query = "INSERT INTO datatable (userName, ID) VALUES ('".$name."',".$ID.")";

此外,您的代码还可以进行sql注入。用事先准备好的陈述来阻止它。

相关问题