【问题标题】:Impossible to run sql Query with Ajax无法使用 Ajax 运行 sql 查询
【发布时间】:2019-11-16 10:13:16
【问题描述】:

我正在创建一个管理面板,用户可以在其中创建修改和删除事件。我可能对 Ajax 有疑问。数据库未更新,即使 ajax 响应看起来不错(模式已隐藏)

使用 7.2 Php 版本(如果重要的话)

<div class="modal">
            <div class="modal_content">
                <label for="event_name">Nom de l'évènement</label>
                <input type="text" id="event_name">
                <label for="event_date">Date</label>
                <input type="text" id="event_date">
                <label for="event_desc">Description</label>
                <input type="text" id="event_desc">
                <label for="event_thumb">Affiche</label>
                <input type="text" id="event_thumb">
                <input type="hidden" id="event_id">
                <a class="save">Sauvegarder</a>
              </div>
          </div>




<script>
  $(document).ready(function(){

      $('.modal').hide();

    //  append values in input fields
      $(document).on('click','a[data-role=update]',function(){
            var event_id  = $(this).attr('id');
            var event_name  = $('#'+event_id).children('td[data-target=event_name]').text();
            var event_date  = $('#'+event_id).children('td[data-target=event_date]').text();
            var event_desc  = $('#'+event_id).children('td[data-target=event_desc]').text();

            $('#event_name').val(event_name);
            $('#event_date').val(event_date);
            $('#event_desc').val(event_desc);
            $('#event_id').val(event_id);
            $('.modal').show();
      });

      // now create event to get data from fields and update in database 

       $('.save').click(function(){
          var event_id  = $('#event_id').val(); 
         var event_name =  $('#event_name').val();
          var event_date =  $('#event_date').val();
          var event_desc =   $('#event_desc').val();

          $.ajax({
              url      : 'modifyEvent.php',
              method   : 'post', 
              data     : {event_name :event_name , event_date:event_date , event_desc:event_desc , event_id:event_id},
              success  : function(response){
                            // now update user record in table 
                             $('#'+event_id).children('td[data-target=event_name]').text(event_name);
                             $('#'+event_id).children('td[data-target=event_date]').text(event_date);
                             $('#'+event_id).children('td[data-target=event_desc]').text(event_desc);
                             $('.modal').hide(); 

                         }
          });
       });
  });
</script>

还有我的 PHP 脚本:

if(isset($_POST['event_id'])){

    $event_name = $_POST['event_name'];
    $event_date = $_POST['event_date'];
    $event_desc = $_POST['event_desc'];
    $event_id = $_POST['event_id'];

    //  query to update data 

    $result  = mysqli_query($connection , "UPDATE lepressclub_events SET event_name='$event_name' , event_date='$event_date' , event_desc = '$event_desc' WHERE event_id='$event_id'");
    if($result){
        echo 'data updated';
    }

}
?>

数据库连接好,查询也好。但是数据库没有更新..

感谢您的帮助:)

【问题讨论】:

  • success()里面,console.log(response)是什么?那么你在控制台中得到data updated 吗?
  • 实际上,您的 ajax 甚至不会触发。您的锚点缺少 data 属性,应该类似于 &lt;a class="save" data-role=update&gt;Sauvegarder&lt;/a&gt;
  • 我相信还有另一个我们在这里看不到的 html 部分包含用于设置模式中所有值的元素。所以有几个地方可能会出错。这些值实际上无法在模态中设置。或者查询中设置和使用的值与数据库中的记录不对应。无论哪种方式,您都会得到一个成功的响应表单 ajax 调用,这将关闭模式。您需要按照@qirel 所说的方式控制台记录您的回复并回显您的查询以确保它是您认为的那样
  • 您的脚本已为 SQL 注入打开!请务必使用准备好的语句来prevent SQL Injection
  • 感谢大家的cmets。正如我之前所说,查询很好,对不起,如果我没有给出整个代码,我认为它不会有用。我将在最终版本上使用准备好的语句,只是在那里进行测试。无论如何,谢谢,我想下面的答案就是解决方案。明天继续努力

标签: php jquery ajax dom


【解决方案1】:

method: "post" 不是有效的 $.ajax 参数属性。你应该使用type: "post"

默认类型是“get”,所以$_POST应该是空的。

文档可以在here找到。

$.ajax({
    url      : 'modifyEvent.php',
    type     : 'post',  // <- Here is the change
    data     : {event_name :event_name , event_date:event_date , event_desc:event_desc , event_id:event_id},
    success  : function(response){
        // now update user record in table 
        $('#'+event_id).children('td[data-target=event_name]').text(event_name);
        $('#'+event_id).children('td[data-target=event_date]').text(event_date);
        $('#'+event_id).children('td[data-target=event_desc]').text(event_desc);
        $('.modal').hide(); 
    }
});

即使与您的问题没有直接关系,您的 PHP 脚本也允许 SQL 注入。使用prepared statements to prevent this。这是一个巨大的安全风险。

【讨论】:

  • 嗯,我认为这是解决方案,明天进行测试。非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-18
  • 2020-02-11
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多