php表不会用ajax更新mysql

ecr0jaav  于 2021-06-20  发布在  Mysql
关注(0)|答案(4)|浏览(334)

我在使用php和ajax更新mysql表时遇到了问题。
问题是,当我按下delete按钮时,它只会重定向到主页,而不会对mysql数据做任何操作。
html格式

<tbody>
   <?php 
     if($qry->prepare("SELECT * FROM `menus` WHERE `is_deleted` = 0")){
     $qry->execute();
     $result = $qry->get_result();
     if($result->num_rows > 0){
      while($row = $result->fetch_array()){ 
   ?>
        <tr>
        <td><?=  $row['menu_code'] ?></td>
        <td><?=  $row['menu_name'] ?></td>
        <td><?=  $row['menu_desc'] ?></td>
        <td><?=  $row['menu_type'] ?></td>
        <!--<td><?=  $row['menu_code'] ?></td>-->
        <td><?=  $row['menu_price'] ?></td>
        <!--<td><?=  $row['sizes'] ?></td>-->
        <td>
          <input type="submit" class="btn btn-sm btn-info" value="View" >                   
          <form method="POST">                              
          <input type="submit" id="delMenu" class="btn btn-sm btn-danger" value="Delete" >  
          <input type='hidden' id="delID" value=" <?php echo $row['menu_id'];?>" name="iduse">
          </form>
        </td>
        </tr>                                   
   <?php
    }
    }
    }
    ?>
 </tbody>

删除菜单.php

<?php
  include '../../configurations/config.php';

  $qry = $con->stmt_init();

  $iduse=$_POST['iduse'];

  $sqlCode="UPDATE menus SET is_deleted = 1 WHERE menu_id = $iduse";

   if($qry->prepare($sqlCode)){

    $qry->execute();

    echo json_encode(array(
    "status" => 200,
    ));

} else {
    echo json_encode(array(
    "status" => 400
    ));
}

ajax

$(document).on('click', '#delMenu', function(){
   var id = $('#delID').value();
   var ask = confirm('Are you sure you want to delete this item?');
$.ajax({
 url: base_url() + "../functions/DeleteMenu.php",
       method:"POST",
       data: {'menu_id' : id,
              'is_deleted' : '1'},
        dataType: 'json',
        cache: false,
        success:function(result){
                if(result.status == 200){
                    alert('Successfully removed!');
                    $('#content_load').load('views/menus');
                } else {
                    alert('Has not removed!');
                }   
            },
            error:function(result){
                //alert('Fail');
                console.log(result);
            }
        }); 
});

每次按下“删除”按钮时,我需要将“菜单”表中的“是否已删除”列更改为1,以便隐藏它。我认为我的php操作或ajax代码有问题,但我很难指出这一点。任何解释或帮助都将不胜感激。

fykwrbwg

fykwrbwg1#

您同时使用表单和ajax来更新值。删除表单标签,只需使用ajax。尝试删除表单标签,如下所示

<tbody>
   <?php 
     if($qry->prepare("SELECT * FROM `menus` WHERE `is_deleted` = 0")){
     $qry->execute();
     $result = $qry->get_result();
     if($result->num_rows > 0){
      while($row = $result->fetch_array()){ 
   ?>
        <tr>
        <td><?=  $row['menu_code'] ?></td>
        <td><?=  $row['menu_name'] ?></td>
        <td><?=  $row['menu_desc'] ?></td>
        <td><?=  $row['menu_type'] ?></td>
        <!--<td><?=  $row['menu_code'] ?></td>-->
        <td><?=  $row['menu_price'] ?></td>
        <!--<td><?=  $row['sizes'] ?></td>-->
        <td>
          <input type="submit" class="btn btn-sm btn-info" value="View" >                                                 
          <input type="submit" id="delMenu" class="btn btn-sm btn-danger" value="Delete" >  
          <input type='hidden' id="delID" value="<?php echo $row['menu_id'];?>" name="iduse">
        </td>
        </tr>                                   
   <?php
    }
    }
    }
    ?>
 </tbody>

在delmenu.php中,使用ajax传递的属性。

$iduse=$_POST['menu_id'];
hjqgdpho

hjqgdpho2#

首先,您需要通过添加以下内容来防止表单提交:

$(document).on('click', '#delMenu', function(e) {
    e.preventDefault();
    // ... 
}

下一个。。您的ajax请求结构是:

{
    'menu_id' : id,
    'is_deleted' : '1'
}

所以在php中 menu_id 而不是 iduse :

$iduse = $_POST['menu_id'];

您必须对其余的代码逻辑进行故障排除,因为似乎存在多个错误,您可能会发现更多错误。。
希望有帮助

8gsdolmq

8gsdolmq3#

首先,总是分配一个 id 根据你的状态。
2ajax表单:

$(document).on('click', '#delMenu', function(){
   var id = $('#delID').value();
   var ask = confirm('Are you sure you want to delete this item?');
$.ajax({
 url: base_url() + "../functions/DeleteMenu.php",
       method:"POST",
       data: "menu_id="+id + "&is_deleted="+"1",
        //dataType: 'json', /* NO NEED FOR THIS */
        //cache: false,      /* NO NEED FOR THIS */
        success:function(result){
           console.log(result);  /* check console and see whats the error*/
                if(result.status == 200){
                    alert('Successfully removed!');
                    $('#content_load').load('views/menus');
                } else {
                    alert('Has not removed!');
                }   
            },
            error:function(result){
                //alert('Fail');
                console.log(result);
            }
        });
        return false; /* added so that your form submits with ajax*/
});
j7dteeu8

j7dteeu84#

用以下代码更新文件deletemenu.php

<?php
  include '../../configurations/config.php';

  $qry = $con->stmt_init();

  $iduse=$_POST['menu_id'];

  $sqlCode="UPDATE menus SET is_deleted = 1 WHERE menu_id = $iduse";

   if($qry->prepare($sqlCode)){

    $qry->execute();

    echo json_encode(array(
    "status" => 200,
    ));

} else {
    echo json_encode(array(
    "status" => 400
    ));
}

因为您正在post type变量中发送“menu\ id”,并且没有名为“iduse”的post
下面是使用post方法进行ajax调用的代码

method:"POST",
data: {'menu_id' : id,
        is_deleted' : '1'},

因此,您可以在deletemenu.php中将此数据用作$\u post['menu'id']和$\u post['is'deleted']。
并使用preventdefault删除表单提交后的重定向

event.preventDefault();

相关问题