1

私はユーザーがコメントを送信し、php mysql jqueryを使用してデータベースに挿入できる単純なフォームコメントを作成していますが、ページを更新しなくてもすべて正常に機能しますが、問題は、コメントを書き込むときにmysqlデータベースに4行かかることです。それに同じデータを入力してください誰かがエラーで私を助けることができますか?

my_db.sql

--
-- Database: `my_db`
--

-- --------------------------------------------------------

--
-- Table structure for table `comments`
--

CREATE TABLE IF NOT EXISTS `comments` (
  `id` tinyint(4) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  `email` varchar(70) NOT NULL,
  `comments` text NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

--
-- Dumping data for table `comments`
--

INSERT INTO `comments` (`id`, `name`, `email`, `comments`) VALUES
(1, 'test', 'test@test.com', 'testcomments'),
(2, 'test', 'test@test.com', 'testcomments'),
(3, 'test', 'test@test.com', 'testcomments'),
(4, 'test', 'test@test.com', 'testcomments');

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

index.php //ここで、jqueryの形式と機能

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>feedback page</title>
<script type = "text/javascript" src = "http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<link rel ="stylesheet" href = "css/default.css" />

<script type = "text/javascript">

$(function(){

   $('#submit').click(function(){
     $('#container').append('<img src = "img/loading.gif" alt="Currently loading" id = "loading" />');

         var name = $('#name').val();
         var email = $('#email').val();
         var comments = $('#comments').val();


         $.ajax({

            url: 'submit_to_db.php',
            type: 'POST',
            data: 'name =' + name + '&email=' + email + '&comments=' + comments,

            success: function(result){
                 $('#response').remove();
                 $('#container').append('<p id = "response">' + result + '</p>');
                 $('#loading').fadeOut(500, function(){
                     $(this).remove();
                 });

            }

         });         

        return false;

   });


});

</script>




</head>

<body>
   <form action = "submit_to_db.php" method = "post">
   <div id = "container">
      <label for = "name">Name</label>
      <input type = "text" name = "name" id = "name" />

      <label for = "email">Email address</label>
      <input type = "text" name = "email" id = "email" />

      <label for = "comments">Comments</label>
      <textarea rows = "5"cols = "35" name = "comments" id = "comments"></textarea>
      <br />

      <input type = "submit" name = "submit" id = "submit" value = "send feedBack" />
    </div>
   </form>



   </div>
</body>
</html>

submit_to_db.php

<?php
  $conn = new mysqli('localhost', 'root', 'root', 'my_db');
  $query = "INSERT into comments(name, email, comments) VALUES(?, ?, ?)";

  $stmt = $conn->stmt_init();
  if($stmt->prepare($query)){

     $stmt->bind_param('sss', $_POST['name'], $_POST['email'], $_POST['comments']);
     $stmt->execute();

  }

  if($stmt){

  echo "thank you .we will be in touch soon";
  }
  else{
   echo "there was an error. try again later.";
   }  


?>
4

1 に答える 1

1

私は実際にスクリプトを取得し、サーバーにロードし、データベース テーブルを作成し、スクリプトをテストしました。

送信ごとに 1 行のみが挿入されます。

スクリプトは正しく機能しています。

ただし、テスト手順には欠陥があります。

Firebug コンソールも確認しましたが、AJAX 呼び出しは期待どおりに機能しています。

他の診断がない限り、これ以上お手伝いできることはないと思います。

バグアラート
あなたのコードにバグがあり、今後何年もあなたの人生に大きな悲しみをもたらすでしょう...

if($stmt){
   echo "thank you .we will be in touch soon";
}
else{
    echo "there was an error. try again later.";
}

クエリが実行されるため、このifステートメントは常に true と評価されます (もちろん、MySQL が実行されていない場合を除きます)。

あなたが意図したのは、挿入が成功したかどうかを確認することです。そのためには、次を確認する必要があります。

if($stmt->affected_rows){...}

$stmt->affected_rows失敗すると -1 を返し、成功すると +1 を返します。

デバッグ戦略
(1) レコードがいつ挿入されたかを確認できるように、タイムスタンプ付きのフィールドを追加します。これにより、何が起こっているのかについてより多くの洞察が得られます。

(2) テーブルを空にして、コードを再試行してください。複数の挿入を取得していると思うかもしれませんが、送信ボタンを 4 回押した可能性もあります。

于 2013-03-14T01:57:43.323 に答える