gpt4 book ai didi

php - 无法让查询在 php CRUD 系统中工作以检查重复项

转载 作者:行者123 更新时间:2023-11-29 06:00:55 25 4
gpt4 key购买 nike

我有一个 CRUD 系统,并为其中三个字段创建了验证以确保它们不为空,这非常有效。我想通过确保 ID 不存在来添加进一步的验证。

这是代码..

$required = array('id', 'name', 'family');

$noDouble = true;

$mysqli = new mysqli("localhost", "username", "password", "database");

/* check connection */
if ($mysqli->connect_errno) {
printf("Connect failed: %s\n", $mysqli->connect_error);
exit();
}else{echo "connected";}

$query1 = mysqli_query($mysqli, "SELECT * FROM products WHERE id=='" . $product->id ."'");




if (!$query1){
$noDouble = false;

}

$error = false;
foreach($required as $field) {
if (empty($_POST[$field])){
$error = true;
}
}




if($_POST && $error) {

echo "<div class='alert alert-danger'>All fields required</div>";

}elseif($_POST && $noDouble) {

echo "<div class='alert alert-danger'>That part number already exists</div>";

}

// if the form was submitted
elseif ($_POST){

// set product property values
$product->id = $_POST['id'];
$product->name = $_POST['name'];
$product->family = $_POST['family'];
//$product->number = $_POST['number'];
$product->description = $_POST['description'];
$product->ext_description = $_POST['ext_description'];
$product->PRF = $_POST['PRF'];

if(isset($_POST['publish'])){
//$stok is checked and value = 1
$published = $_POST['publish'];
$product->publish = $_POST['publish'];
}
else{
//$publish is not checked and value=0
$published = 0;
$product->publish = 0;
}
//$product->publish = $_POST['publish'];
/* $product->category_id = $_POST['category_id']; */

// create the product
if($product->create()){
echo "<div class='alert alert-success'>Product was created.</div>";
}


}

但是,查询的 if 语句似乎并没有起作用,因为它继续告诉我部件号存在。我的查询有问题吗?我也尝试用 $_POST['id'] 替换 $product->id 但这会导致更多错误。任何帮助将不胜感激。

最佳答案

好吧,查询本身没有任何问题。但是,您的逻辑在两个方面存在问题。

$query1 = "SELECT * FROM products WHERE id=='" . $product->id ."'";
  1. 这很容易受到 SQL Injection 的攻击.这很糟糕,您需要解决这个问题。这样的漏洞不仅会危及您应用程序的安全,而且可能危及您的整个系统。使用 PDOmysqli 绑定(bind)您的参数。

  2. 您实际上并没有对您编写的查询做任何事情。要实际查询它,您需要执行它。

  3. id后面只能有一个等号。

在这一点上,我建议你看一下 PDO tutorial .完全修复您的代码有点超出 SO 答案的范围。

关于php - 无法让查询在 php CRUD 系统中工作以检查重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45017871/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com