Php - 检查是否存在具有ID的记录,如果为false则插入此记录

时间:2018-05-04 04:23:48

标签: php mysql mysqli

所以我有这个表单,提交一个名称和一个用户创建的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 个答案:

答案 0 :(得分:0)

由于您的userName是字符串,因此您必须在引号中添加值。启用错误日志并检查查询是否正确执行。将您的插入查询更改为:

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

此外,您的代码对SQL注入是开放的。使用准备好的陈述来阻止它。

答案 1 :(得分:0)

代码中的if块看起来就像在帖子中一样吗?或者您是否删除了重定向代码,以便缩短帖子中的代码段?如果您的if块看起来与您的帖子相同,请在其中添加一些echo语句,以确保该块未运行。现在,看起来如果该块运行,将不会输出任何内容,脚本将结束,并且您将看到一个空白屏幕。

其他一些想法:

  1. 您确定已成功连接到您的 数据库?检查mysqli_connect_errno()并输出 在mysqli_connect_error()之后mysqli_connect()确认 你有一个有效的连接。
  2. 使用预准备语句而不是将变量合并到一个 SQL字符串。您现在拥有的SQL提供了机会 注入和准备好的陈述可以帮助制止这一点。
  3. 希望这有帮助!

答案 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";
    }
}
?>
希望这会有所帮助! :)