不要添加具有重复名称的条目

时间:2018-02-11 15:42:33

标签: php mysql

您好,有这样的代码

if(isset($_POST['add_product'])){
$req_fields = array('product-title','product-categorie','product-
quantity','buying-price', 'saleing-price' );
validate_fields($req_fields);
if(empty($errors)){
 $p_name  = remove_junk($db->escape($_POST['product-title']));
 $p_cat   = remove_junk($db->escape($_POST['product-categorie']));
 $p_qty   = remove_junk($db->escape($_POST['product-quantity']));    
 $p_buy   = remove_junk($db->escape($_POST['buying-price']));
 $total   = $p_qty*$p_buy ;
 $p_sale  = remove_junk($db->escape($_POST['saleing-price']));
 if (is_null($_POST['product-photo']) || $_POST['product-photo'] === "") {
   $media_id = '0';
 } else {
   $media_id = remove_junk($db->escape($_POST['product-photo']));
 }
 $date    = make_date();
 $query  = "INSERT INTO products (";
 $query .=" name,quantity,buy_price,total,sale_price,categorie_id,media_id,date";
 $query .=") VALUES (";
 $query .=" '{$p_name}', '{$p_qty}', '{$p_buy}', '{$total}', '{$p_sale}', '{$p_cat}', '{$media_id}', '{$date}'";
 $query .=")";
 $query .=" ON DUPLICATE KEY UPDATE name='{$p_name}'";
 if($db->query($query)){
   $session->msg('s',"Готовый продукт добавлен в базу ");
   redirect('add_product.php', false);
 } else {
   $session->msg('d',' Ошибка  что то пошло не так!');
   redirect('product.php', false);
 }

} else{
 $session->msg("d", $errors);
 redirect('add_product.php',false);
}

 }

您可以看到代码获取表单数据并将其插入到products表中。所有的东西,但是当产品名称从p_name字段复制时,它不会向表中添加数据,而是写出"成品被添加到数据库"。例如,在数据库中有一个产品"面包"昨天补充道。如果今天我们添加名为" Bread"再次,它说"成品被添加到数据库",但它没有添加任何东西。我觉得这条线是罪魁祸首。 =" ON DUPLICATE KEY UPDATE name =' {$ p_name}'&#34 ;;但是如果你删除它,脚本就不起作用了。

1 个答案:

答案 0 :(得分:1)

如果你想删除ON DUPLICATE KEY UPDATE name = '{$ p_name},只需删除代码的这一行:

 $query .=" ON DUPLICATE KEY UPDATE name='{$p_name}'";

注意:你是对的,问题正在发生,因为你有DUPLICATE KEY UPDATE name = '{$ p_name}。如果你有"面包"已经在上并尝试插入另一个"面包"你将永远不会有2个产品被称为"面包"因为你正在强制更新现有的(旧)"面包"产品与" new"提供的信息; "面包"产品

  

我觉得这条线是罪魁祸首。 =" ON DUPLICATE KEY UPDATE名称   =' {$ p_name}'&#34 ;;但是如果删除它,脚本就不起作用了。

如果在删除" ON DUPLICATE" 代码行后脚本不起作用,则因为您可能有名称字段作为主键在您的产品上。如果是这样,您必须使用名称字段+另一个字段(可以是Id)创建复合主键,而不是仅将名称字段设置为主要关键