ajax更新到数据库

时间:2012-07-15 16:38:51

标签: php jquery ajax

我正在尝试将数据添加到数据库中,并且由于某种原因它并不总是有效。我会说有80%的时间它会工作,我会在数据库中看到结果,但有时它会像脚本一样不会运行。

这里是ajax:

 <script type="text/javascript">
    $(document).ready(function () {
      $(function () {
        $('.error').hide();
        $("#success").hide();
        $(".button").click(function () {
          $('.error').hide();
          var name = $("input#name").val();
          if (name == "") {
            $("label#name_error").show();
            $("input#name").focus();
            return false;
          }
          $.ajax({
            type: 'POST',
            url: "class/proccess.php",
            data: $("input#name"),
            cache: false,
            success: function () {
              $("#success").fadeIn(200).show();
            }
          });
        });
      });
    });
    </script>

这是html:

<div id = "contact_form">
  <form name ="contact" action="">
    <fieldset>
      <label for="name" id="name_label">Name</label>
      <input type="text" name="name" id="name" size="30" value="" class="text-input" />
      <label class="error" for="name" id="name_error">This field is required.</label> 
      <br />
      <input type="submit" name="submit" class="button" id="submit_btn" value="send" />
    </fieldset>
    <span id="success"> the name has been updated successfully!</span>  
  </form>
</div>
<div id ="upd"></div>

这是proccess.php文件:

<?php
$va = $_POST["name"];
$dbconnection =  mysql_connect('adatabase','someuser','somepw');
  if(!mysql_select_db('some_database', $dbconnection)) {
      echo mysql_error();
  }
    else
    {
        echo 'connection success';
    }
$sql = "INSERT INTO some_db(text) VALUES ('$va')";
$result = mysql_query($sql) or die('erreur sql!'.mysql_error());
if(!$result) {
    echo "not working";
}
else {
    echo "working";
}
?>

那么为什么它并不总是插入数据库?

有没有办法从php获取结果if(!$ result)显示在ajax的成功部分?

4 个答案:

答案 0 :(得分:1)

如果有时不工作,则需要检查返回的字符串是否有错误。使用AJAX执行此操作的正确方法如下。

您可以在成功回调中包含一个参数,该参数将从PHP获取页面结果。

而不是

 success: function () {
     ...
   }

使用

success: function (data) {
       alert(data);
   }

答案 1 :(得分:1)

您实际上是将jQuery-Object传递给PHP文件。

$.post("class/proccess.php", { 
name: $("input#name").val() //Pass val() not the whole jQuery-Object!
}, function() { 
/* success */ 
});

答案 2 :(得分:1)

在您进行调试时,请确保已启用MySQL错误。

在用于Ajax成功处理程序的Javascript中,显示包含调用返回的文本的警报。这样,如果MySQL出现错误,您就会看到它。

另一件事是,&#34;文本&#34;字段在数据库中设置为UNIQUE?在这种情况下,尝试插入带有重复字符串的新记录将失败。

并且......该字段的名称并非真正的&#39;文本&#39;是吗?我建议避免使用与MySQL基本数据类型相同的字段名称。只是为了避免混淆,如果没有其他原因。

答案 3 :(得分:0)

将您的ajax调用更改为:

      $.ajax({
        type: 'POST',
        url: "class/proccess.php",
        data: {name : $("input#name").val()},
        cache: false,
        success: function () {
          $("#success").fadeIn(200).show();

        }

这样$ _POST ['name']设置为输入框的值。

另外,正如建议的那样,您应该将mysql函数更改为mysqli函数以帮助防止sql注入。