通过jQuery更新MySQL语句Ajax无法正常工作

时间:2018-03-18 06:43:46

标签: php mysql ajax

我有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)

循环遍历数组只接受最后一个元素。请帮我修改代码!

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;
    }

    ?>