1

送信をクリックすると、フィールドが自動的にデータベースに保存され、ajax を使用してフェッチされるという単純なコメント システムを作成しようとしています。しかし、データベースに最近追加されたデータを取得する代わりに、すべてのデータを繰り返し取得するコードは次のとおりです。

 <div id="wrap-body">    
  <form action="" method="post">
  <input type="text" name="username" id="username">
  <input type="text" name="msg" id="msg">
  <input type="button" id="submit" value="Send">
 </form>
 <div id="info">
 </div>
 </div> 
<script>
 $(document).ready(function (){
$('#submit').click(function (){
 var username = $('#username').val();
  var msg = $('#msg').val();
  if(username != "" && msg != ""){
       $.ajax({
                  type: 'POST',
                  url: 'get.php',
                  dataType: 'json',
                  data:{ 'username' : username , 'msg' : msg},
                  success: function (data){
                    var ilan=data[0].counter;
                    var i = 0;
                      for(i=0;i<=ilan;i++){
                       $('#info').append("<p> you are:"+data[i].username+"</p> <p> your message  is:"+data[i].mesg);
                     }
                  }
              });
     }
     else{
      alert("some fields are required");
     }
 });
});
</script>

PHP:

   <?php
   $host='localhost';
   $username='root';
   $password='12345';
   $db = 'feeds';

    $connect = mysql_connect($host,$username,$password) or die("cant connect");
    mysql_select_db($db) or die("cant select the".$db);

    $username = $_POST['username'];
    $msg = $_POST['msg'];

    $insert = "INSERT INTO info(user_name,message) VALUES('$username','$msg')";
    if(@!mysql_query($insert)){
      die('error insertion'.mysql_error());
  }
    $get = "SELECT * FROM info ";
    $result=mysql_query($get)or die(mysql_error()); 
    $inside_counter =   mysql_num_rows($result);
    $data=array();
    while ($row = mysql_fetch_array($result))
   {
  $data[] = array(
    'username'=>$row['user_name'],
    'mesg'=>$row['message'],
    'counter'=>$inside_counter
   );
   }
    echo json_encode($data);
    ?>
4

2 に答える 2

2
SELECT * 
FROM "table_name" 
ORDER BY "id" desc 
LIMIT 1

これは、テーブルから最後のレコードを取得するための SQL クエリです。に従って最後に挿入されたものを返しidます。id自動インクリメント フィールドである必要があります。これはあなたにとって役立つと思います。

于 2012-09-25T06:55:50.533 に答える
0

これは、テーブル内のすべての行を再び ajax 呼び出しに返すためです。

$get = "SELECT * FROM info ";

それらをすべて再度返す場合は、それらを jQuery で追加する前に、まだそこにないかどうかをテストする必要があります。おそらく、新しく挿入された行のみを返します。

また

jQuery は、サーバーに送信したデータを既に認識しており、成功した場合は true または false を返し、true の場合はそれを jQuery に追加します。クライアント側にデータを再度返す必要はありません。

編集

私はあなたのためにコードを書くつもりはありませんが、おそらくこれらの提案が役立つかもしれません

mysql_query($insert)

参照用のリンクはこちら - http://php.net/manual/en/function.mysql-query.php

挿入ステートメントが成功したかどうかに応じて、true または false を返します

を呼び出して、実際に行が挿入されたことを確認することもできます

mysql_affected_rows()

参照用のリンクはこちら - http://php.net/manual/en/function.mysql-affected-rows.php

次に、挿入が成功した (つまり、mysql_query($insert) または mysql_affected_rows() > 0 から true) と仮定すると、単純に成功を返します (つまり、次のようなもの)。

 echo json_encode(true);

次に、クライアント側で次のようなことができます。

(jQuery Ajax 成功関数のみ:)

  success: function (data){
        if (data) {
            $('#info').append("<p> you are:"+username +"</p> <p> your message  is:"+msg);
        }
        else
        {
             alert('There has been an error saving your message');
        }
    }

リクエストを送信するために使用した変数を使用して

(ここで提供されているコード サンプルは単なる例であり、そのまま使用することを意図したものではないことに注意してください)

ただし、いくつかのポイントがあります。ajax経由でのみデータを投稿するつもりですか? (つまり、ページの更新はありません) その場合は、フォーム送信イベント ハンドラーから false を返して、ページ全体の投稿を停止する必要があります。また、ロジックがないように見えるか、完全に重複して入力されることを心配していないようです (つまり、同じユーザー名、同じメッセージ) - これについて心配する必要があるかどうかはわかりません.

また、ID を介してすべてのメッセージを追跡する可能性もあります (ただし、DB 構造はわかりません)。

mysql_insert_id()

リンクはこちら 参考までに - http://php.net/manual/en/function.mysql-insert-id.php

そうすれば、各メッセージは一意の ID を持つことができ、ユーザー名とメッセージが同一であっても、重複を作成しやすくなります。

これに対処する方法はたくさんあります。

とにかくそれが役立つことを願っています

PS - mysql_ の使用 - コマンドのグループは、最近では一般的に推奨されていません。代わりに mysqli_ 範囲の関数を使用してください。

于 2012-09-25T04:13:25.880 に答える