0

データベースにデータを追加しようとしていますが、何らかの理由で常に機能するとは限りません。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>

これが process.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

デバッグ中は、MySQLエラーが有効になっていることを確認してください。

AjaxサクセスハンドラーのJavascriptで、呼び出しから返されたテキストを含むアラートを表示します。そうすれば、MySQLでエラーが発生した場合に、それが表示されます。

もう1つは、データベースで「テキスト」フィールドをUNIQUEとして設定できるかどうかです。その場合、重複する文字列を含む新しいレコードを挿入しようとすると失敗します。

そして...フィールドの名前は実際には「テキスト」ではありませんか?MySQLの基本的なデータ型と同じフィールド名は避けることをお勧めします。他に理由がない場合は、混乱を避けるためです。

于 2012-07-15T16:48:17.793 に答える
1

時々動作しない場合は、返された文字列にエラーがないかチェックする必要があります。AJAX を使用してこれを行う正しい方法は次のとおりです。

PHP からページ結果を取得する成功コールバックにパラメーターを含めることができます。

それ以外の

 success: function () {
     ...
   }

使用する

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

実際には、jQuery-Object を PHP ファイルに渡しています。

$.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 に答える