我有3张桌子:
类别(id,name)
categoryattributes(ID,attr_key,attr_display)
categoryhasattributes(CATEGORY_ID,attribute_id)
我想使用Ajax更新给定类别的所有属性。
这是Ajax代码:
function editCategory() {
var form = document.editForm;
var dataString = $(form).serialize();
$.ajax({
type:'POST',
url:'editCategory.php',
data: dataString,
success: function(data){
alert(data);
}
});
return false;
}
这是PHP代码:
<?php
require 'connection.php';
$attrs = $_POST['attrs'];
$catid = $_POST['catid'];
for ($i=0;$i<count($attrs);$i++){
if(mysqli_query($con, "
update categoryhasattributes set attribute_id='$attrs[$i]'
where category_id='$catid';
")){
echo "success";
}
}
?>
因此update语句正在运行,但只设置了数组$attrs
中的最后一个元素。
例如,如果categoryid=10
和$attrs = [1,2]
更新表时,结果只有:
categoryhasattributes(10,2)//这里的第一个属性必须是1
categoryhasattributes(10,2)
循环遍历数组只接受最后一个元素。请帮我修改代码!
答案 0 :(得分:0)
所以我运行了你的代码,这是我查询字符串的结果:
update categoryhasattributes set attribute_id=1 where category_id=10
第一次查询后:
categoryhasattributes(10,1)
categoryhasattributes(10,1)
update categoryhasattributes set attribute_id=2 where category_id=10
第二次查询后:
categoryhasattributes(10,2)
categoryhasattributes(10,2)
查询正在完成它想要做的事情。首先,它更新category_id 10并将attribute_id设置为1.然后它再次更新category_id 10并将attribute_id设置为2.
查看您的表格,看看您是否可以更好地规划查询。您可能需要在categoryhashattributes表中添加第三列,以使每一行都是唯一的或特定的id或其他内容。
<强> 更新 强>
在您的
中添加id列categoryhasattributes(id,category_id,attribute_id)
将id传递给您的查询,如下所示:
update categoryhasattributes set attribute_id='$attrs[$i]'
where category_id='$catid' && id='$id';
答案 1 :(得分:0)
您正在覆盖循环中的相同记录,因为查询中的$ catid始终是相同的。看起来循环只处理最后的$ attr []值,因为它只会覆盖先前的更新。
"where category_id='$catid';" - problem
而不是UPDATE查询,我认为你需要INSERT一个。这是我制作的更新代码。 Haven尚未对其进行测试。但我希望它已经运作良好。
<?php
require 'connection.php';
$attrs = $_POST['attrs'];
$catid = $_POST['catid'];
for ($i=0;$i<count($attrs);$i++){
if( cha_exists( $catid, $attrs[$i] ) == FALSE ) {
$res = mysqli_query($con, "
INSERT INTO categoryhasattributes (category_id, attribute_id ) VALUES('$catid', '$attrs[$i]');");
if( $res ) {
echo "success";
}
}
}
function cha_exists( $cat_id, $attr_id ) {
$res = mysqli_query($con, "
SELECT * FROM categoryhasattributes WHERE attribute_id='$attr_id'
AND category_id='$cat_id';
");
return mysqli_num_rows($res) > 0;
}
?>