0

私はユーザーに名前を尋ねるコメントフォームを作成しています。データベースに接続するためにphpとmysqliを使用してコメントを投稿し、更新しないためにjqueryを使用しますが、問題は次のとおりです。データベースにデータを挿入できません。しかし、ユーザーから入力されたデータを保持する変数を「エコー」すると、データベースに入力しなくても正常に機能し、エラーが何であるかわかりません。

誰か助けてもらえますか?

ps: 私は私のためにコードを書くことを求めていませんが、それを解決する方法を知る必要があります。

submit_to_db.php

<?php
  $conn = new mysqli('localhost', 'root', 'root', 'my_db');
  if(isset($_POST['submit'])){
  $name =isset ($_POST['name']);
  $email = $_POST['email'];
  $comments = $_POST['comments'];

  echo"<pre>";
  print_r($_POST);
  echo"</pre>";

  $query = "INSERT into comments('email', 'comments') VALUES(?, ?)";
  echo $query;
  $stmt = $conn->stmt_init();
  if($stmt->prepare($query)){

     $stmt->bind_param('ss', $email, $comments);
     $stmt->execute();
     //var_dump($stmt);

  }

  if($stmt){

  echo "thank you .we will be in touch soon <br />";
 // echo $_POST['name'];
  //echo $_POST['email'];
  //echo $_POST['comments'];
  var_dump($stmt);
  }
  else{
   echo "there was an error. try again later.";
   }  

}
else
   echo"it is a big error";
?>

index.php

<!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>




</body>
</html>
4

2 に答える 2

1

バグアラート!

これを行う場合:

$query = "INSERT into comments(email, comments) VALUES($email, $comments)";

そしてこれを行います:

 $stmt->bind_param('sss', $email, $comments);

おそらくエラーメッセージが表示されます。クエリ文字列にバインドプレースホルダーを含める必要があります。これは次のようになります。

$query = "INSERT into comments(email, comments) VALUES(?,?)";

また、使用しているフィールドは2つだけなので、bindステートメントは次のようになります。

 $stmt->bind_param('ss', $email, $comments);

デバッグ戦略

 // Print out your post variable and look at it carefully...
 echo "<pre>";
 print_r($_POST);
 echo "</pre>";

 if(isset($_POST['submit'])){
     //$name =isset ($_POST['name']);
     $email = $_POST['email'];
     $comments = $_POST['comments'];

名前フィールドをよく見てください。昨日、問題の原因となっている余分な/見えない文字を見つけました。

また、インサートが機能することを確認するためのテストとして:

 if(isset($_POST['submit'])){
     $name = "Stack Overflow";
     $email = "stack@overflow.com";
     $comments = "Lorem ipsum and so on...";

問題がクライアント側(フォーム変数とPOST変数)にあるのか、サーバー側(MySQLのもの)にあるのかを調べる必要があります。

私のバージョンのコード
これが私のサーバーで作業しているものです。コメントを確認してください。 切り取って貼り付ける場合は、無関係な文字が入らないように注意してください。

<?php 
    // Echo your POST variable so you can see what the
    // data looks like from your submission form
    echo "<pre>";
    print_r($_POST);
    echo "</pre>";

  $conn = new mysqli('localhost', 'username', 'password', 'database');
  $query = "INSERT into comments(name, email, comments) VALUES(?, ?, ?)";

  // Initially, do a simple insert using static values to make sure 
  // the MySQL statements are working
  // When this works, you can comment these out and uncomment 
  // the statements using the POST array
  $name = "Some Name";
  $email = "some@name.com";
  $comments = "some commentary text...";

  // At this point, you will validate your input, but do this later...
  // After you tested the MySQL, try the form data
  //$name = $_POST['name'];
  //$email = $_POST['email'];
  //$comments = $_POST['comments'];

  $stmt = $conn->stmt_init();
  if($stmt->prepare($query)){
     $stmt->bind_param('sss',$name, $email, $comments);
     $stmt->execute();
  }

  // This tells you if the insert worked...
  printf("%d Row inserted.<br>", $stmt->affected_rows);

  if($stmt->affected_rows){
  echo "thank you .we will be in touch soon";
  }
  else {
   echo "there was an error. try again later.";
  }  
?>
于 2013-03-14T14:28:48.137 に答える
-2

クエリを次のように変更してください:

$query = "INSERT into comments(`email`, `comments`) VALUES('$email', '$comments')";

これがあなたのお役に立てば幸いです

于 2013-03-14T14:03:06.980 に答える