2017-08-29 13 views
0

私のデータベースへの情報掲載に問題があります。私はjavascriptでajax呼び出しを介してデータベースに投稿する他の情報を持っていますが、問題はありませんが、私のコードのこの部分で何が問題なのか分かりません。それはデータベースへの投稿を拒否します。私はそれを掲示し、誰かが私がデータベースにそれを作ることを禁止するであろう何かを見つけたかどうかを見たいと思っていました。面白いのは、ajaxコールが私のAjaxコールのために私の.done function(data)の中に入っていますが、私のデータベースには何も入っていません。Ajaxフォームデータが.done(function(data))に到達しましたが、dbにデータが投稿されていません

I以下

は私が

$('#form-reg').on('submit', function(){ 
 
     // serialize the form 
 
     var formData = $(this).serialize(); 
 
     $.ajax({ 
 
      type  : 'POST', 
 
      url   : 'register.php', 
 
      data  : formData, 
 
      success: function(data){ 
 
      console.log(data), 
 
     }, 
 
     error: function(err){ console.log(err) 
 
     }; 
 
     }) 
 
     .done(function (data) { 
 
      console.log("lo"); 
 
      document.getElementById('form-reg').reset(function(){ 
 
       alert("signed up completed"); 
 
      }); 
 
     }) 
 
     .fail(function (error) { 
 
      alert("POST failed"); 
 
     }); 
 
     return false; 
 
    });
/*mysqli_connect.php -- note this is just an old file name. not important*/ 
 
<?php 
 
$dsn = 'mysql:dbname=test;host=127.0.0.1'; 
 
$user = ''; 
 
$password = ''; 
 

 
try { 
 
    $dbh = new PDO($dsn, $user, $password); 
 
} catch (PDOException $e) { 
 
    echo 'Connection failed: ' . $e->getMessage(); 
 
} 
 
?> 
 

 
/*register.php*/ 
 
<?php 
 
require 'mysqli_connect.php'; 
 
if((isset($_POST['name']) && !empty($_POST['name']))|| 
 
    (isset($_POST['email']) && !empty($_POST['email']))){ 
 

 
    $sth = $dbh->prepare('INSERT INTO test_table (comment) VALUES(?,?);'); 
 
    $name = $_POST['name']; 
 
    $email = $_POST['email']; 
 

 
    $sth->execute(Array($name, $email)); 
 

 
} 
 
else{ 
 
    echo 'error no comment entered'; 
 
} 
 
?>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js" type="text/javascript"> 
 

 
<div id = "register-container"> 
 
    <form id = "form-reg"> 
 
     <label id ="x" for="name">Name</label> 
 
     <input id="name-reg" name="name"></br> 
 
     <label id = "y" for="email">Email</label> 
 
     <input id="email-reg" name="email"></br> 
 
     <input type="submit" value="submit" id = "submit-reg"> 
 
    </form> 
 
    </div>

関連性があると考えているすべてのコードを掲載しています。もし私が何かを忘れてしまったら、そのコードを自由に要求してください。

+0

成功とエラーのコールバックをajaxオプションオブジェクトに追加する。このようにして、何が起こっているのか知ることができます。 –

+0

あなたが見てみると、私の '.done'関数の中にコールバックがあり、コールバックはまだ動作していません。別のものを追加すればうまくいくかどうかは分かりません。それは別の問題です。私は自分の '.done'の中でそのコールバックを起動することは決してできませんでした。 – Jengo

+0

$アヤックス({ タイプ: 'POST' URL: 'register.php' データ:FORMDATA、 成功:関数(データ){ にconsole.log(データ)、 }、 エラー:関数(err){ console.log(err)、 } } –

答えて

0

問題がであるようだ。

INSERT INTO test_table (comment) VALUES(?,?); 

なぜ1がありますcol "(コメント)"、VALUESには2つ(?、?)のプレースホルダがありますか?どの列が "test_table"テーブルにありますか?私はクエリが次のようなものだと思う:

INSERT INTO test_table (name, email) VALUES(?,?); 
0

あなたの問題はあなたのPHPにあると思います。

$sth = $dbh->prepare('INSERT INTO test_table (comment) VALUES(?,?);'); 
$name = $_POST['name']; 
$email = $_POST['email']; 

あなたが値を与えない限り、疑問符(?)はSQLには分かりません。 PHPのドキュメントを見てみましょうbind_paramの詳細については

$name = $_POST['name']; 
$email = $_POST['email']; 

$sth = $dbh->prepare('INSERT INTO test_table VALUES(?,?);'); 
$sth->bind_param('ss', $name, $email); // you must bind the values you wish to insert 
$sth->execute(); 

:以下の例を見てください http://php.net/manual/en/mysqli-stmt.bind-param.php

+0

速い応答をありがとう、私はそれに渦を掛けましたが、運はありません。私はどちらの方法でもドキュメントを読んでいます! – Jengo

関連する問題