0

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

这是阿贾克斯:

 <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

4 回答 4

1

如果有时它不起作用,您需要检查返回的字符串是否有错误。使用 AJAX 的正确方法如下。

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

代替

 success: function () {
     ...
   }

利用

success: function (data) {
       alert(data);
   }
于 2012-07-15T16:43:25.457 回答
1

在调试时,请确保启用了 MySQL 错误。

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

另一件事是,可以将数据库中的“文本”字段设置为唯一吗?在这种情况下,尝试插入带有重复字符串的新记录会失败。

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

于 2012-07-15T16:48:17.793 回答
1

您实际上是在将一个 jQuery-Object 传递给您的 PHP-File。

$.post("class/proccess.php", { 
name: $("input#name").val() //Pass val() not the whole jQuery-Object!
}, function() { 
/* success */ 
});
于 2012-07-15T16:44:11.153 回答
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 注入。

于 2012-07-15T16:47:36.130 回答