您好,有这样的代码
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 ;;但是如果你删除它,脚本就不起作用了。
答案 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)创建复合主键,而不是仅将名称字段设置为主要关键