【问题标题】:No feedback if sql insert succeededsql插入成功无反馈
【发布时间】:2016-08-03 04:52:02
【问题描述】:

我正在执行以下场景:
当我按下一个按钮时,我将它插入到数据库中并且它正在工作。但如果它成功与否,我没有得到反馈(警报不会弹出)。但是如果我查看我的数据库,它就会被插入

if(isset($_POST['action']) && $_POST['action'] > 3) 
    {
    $message = 'success';
    $message1 = 'failed';
        $conn = new mysqli($servername, $username, $password, $dbname);
        $values = $_POST['action'];
        $status = 'pending';
        $sql = "INSERT INTO queue (value, status) VALUES ('".$values."', '".$status."')";
        if ($conn->query($sql) === TRUE) {
?>
<script type='text/javascript'>alert("<?php echo $message; ?>");</script>
<?php } else { ?>
<script type='text/javascript'>alert("<?php echo $message1; ?>");</script>
<?php }                                    
    }       
    }
?>

这是我用来在数据库中插入值的按钮和输入框:

<input type="text" id="number"><br>
    <button type="button" class="btn btn-success" id="test" onclick="myAjax(number.value);">test</button>

这是 ajax 调用:

function myAjax(value) {


  $.ajax({
       type: "POST",
       url: 'test.php',
       data:{action:value},
       dataType: 'text',
       success: function(data) {

       }

  });
}

【问题讨论】:

  • 您标记了AJAX 您使用的是ajax 还是表单? (您也可以通过此方式进行 SQL 注入。)
  • @chris85 我已经编辑了我的问题,现在包含了 AJAX,是的,谢谢,我想看看准备好的语句:)
  • 在您的代码上方写下文件名,以便我们了解发生了什么

标签: javascript php ajax mysqli


【解决方案1】:

将状态返回给 AJAX 调用,然后在那里处理响应。

if(isset($_POST['action']) && $_POST['action'] > 3) 
    {
    $message = 'success';
    $message1 = 'failed';
        $conn = new mysqli($servername, $username, $password, $dbname);
        $values = $_POST['action'];
        $status = 'pending';
        $sql = "INSERT INTO queue (value, status) VALUES ('".$values."', '".$status."')";
        if ($conn->query($sql) === TRUE) {
echo $message; 
} else { 
echo $message1;
}                                    
    }       
    }
?>

然后在 JS 中:

function myAjax(value) {


  $.ajax({
       type: "POST",
       url: 'test.php',
       data:{action:value},
       dataType: 'text',
       success: function(data) {
            alert(data);
       }

  });
}

还要考虑使用准备好的语句 http://php.net/manual/en/pdo.prepared-statements.php,以避免 SQL 注入。

【讨论】:

  • 我不会发布我自己的答案,而是跟进这个问题。这实际上是正确的答案,它不起作用的原因是因为 jQuery 不运行在 AJAX 方法的 HTML 中返回的脚本。
  • @chris85 谢谢你的工作:) 我如何提醒消息或消息1?因为现在它会提醒整个页面或其他什么?
  • 我没有看到回声
  • @Nick 对 AJAX 调用的响应是什么,而不仅仅是 success?使用开发者控制台查看返回的响应。
  • @chris85 我没有看到控制台中弹出任何内容,所以我想没有响应?
【解决方案2】:

这是因为您的 ajax 成功无济于事。

在 PHP 中:

if ($conn->query($sql) === true) {
    echo "Success";
} else {
    echo "Failure";
}

在 JS 中:

 $.ajax({
   type: "POST",
   url: 'test.php',
   data: {action:value},
   dataType: 'text',
   success: function(data) {
       alert(data);
   }
}); 

【讨论】:

    【解决方案3】:

    最后一个 } 不会关闭您示例中的任何代码块。 if 不需要 === TRUE,只要 if ($conn->query($sql)),如果查询反馈为真则 if 为真。

    类似这样的:

        <?
        if(isset($_POST['action']) && $_POST['action'] > 3) {
    
            $conn = new mysqli($servername, $username, $password, $dbname);
            $values = $_POST['action'];
            $status = 'pending';
            $sql = "INSERT INTO queue (value, status) VALUES ('".$values."', '".$status."')";
    
            if ($conn->query($sql)) {
                echo 'succes';
            } else { 
                echo 'fail';        
            }                                    
        }       
    
        ?>
    

    你的 js 喜欢:

        function myAjax(value) {
    
    
          $.ajax({
               type: "POST",
               url: 'test.php',
               data:{action:value},
               dataType: 'text',
               success: function(data) {
                    alert(data);
               }
    
          });
        }
    

    【讨论】:

      【解决方案4】:

      好的,所以我使用了一种解决方法,虽然不是我想要的那样,但它现在可以正常工作。基本上我是在 Ajax 成功函数中而不是在 php 文件中处理的。

      而不是这个

      if(isset($_POST['action']) && $_POST['action'] > 3) 
          {
          $message = 'success';
          $message1 = 'failed';
              $conn = new mysqli($servername, $username, $password, $dbname);
              $values = $_POST['action'];
              $status = 'pending';
              $sql = "INSERT INTO queue (value, status) VALUES ('".$values."', '".$status."')";
              if ($conn->query($sql) === TRUE) {
      echo $message; 
      } else { 
      echo $message1;
      }                                    
          }       
          }
      ?>
      

      还有这个

      function myAjax(value) {
      
      
        $.ajax({
             type: "POST",
             url: 'test.php',
             data:{action:value},
             dataType: 'text',
             success: function(data) {
      
             }
      
        });
      }
      

      我现在有这个:

      if(isset($_POST['action']) && $_POST['action'] > 3) 
          {
          $message = 'success';
          $message1 = 'failed';
              $conn = new mysqli($servername, $username, $password, $dbname);
              $values = $_POST['action'];
              $status = 'pending';
              $sql = "INSERT INTO queue (value, status) VALUES ('".$values."', '".$status."')";
              if ($conn->query($sql) === TRUE) {}                                    
      
          }
      ?>
      

      还有这个:

      function myAjax(value) {
      
      
      
      
          $.ajax({
                 type: "POST",
                 url: 'test.php',
                 data:{action:value},
                 dataType: 'text',
                 success: function(data) {
                 if(value > 3 && value != undefined && value != "")
                 {
                  alert("working");
                 }
                  else
                 {
                  alert("not working");
                 }
                     }
      
            });
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-02-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多