2017-11-16 4 views
0

私はAJAX経由でフォームデータを投稿しようとしています。AJAXのシリアル化されたデータが空です

AJAX関数を削除し、標準形式のPOSTメソッドを実行すると、データはDBに正常に挿入されます。私はconsole.log提出時にフォームのシリアル化されたデータが正常に表示されます。

データが一見消えてしまうAJAX機能が起動したときです。関数は成功として起動しますが、データは挿入されず、formdata変数は一見空です。誰でもこの光を照らすことができますか?ここで

は、これまでのコードだ -

jQueryの/ AJAX -

$('#calendar-form').submit(function() { 
    var formdata = $(this).serialize(); 
    console.log(formdata); 
    $.ajax({ 
    url: "insert.php", 
    type: "POST", 
    data: formdata, 
    success: function() { 
     alert('success') 
    }, 
    error: function() { 
     alert('ERROR'); 
    } 
    }); 

    return false; 
}); 

HTML

<form id="calendar-form" action="" method="" accept-charset="utf-8"> 
    <input type="text" name="name" id="name"> 
    <input type="text" name="email" id="email"> 
    <input type="hidden" name="site" id="site" value="<? echo $_SERVER['HTTP_HOST'] ?>"> 
    <input class="submit" type="submit" name="submit" value="Submit"> 
</form> 

PHP

try { 
    $bd = new PDO("mysql:host=localhost;dbname=;charset=utf8", "", ""); 
     // $bd->setAttribute(PDO::ATT_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    } catch (PDOException $e) { 
     echo 'Theres been an error while attempting to connect to the database'; 
    } 

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

     $sql = "INSERT INTO `users`(`name`, `email`, `site`) VALUES ('$name', '$email', '$site')"; 

     try { 
      $query = $bd->prepare($sql); 
      $query->bindValue(':name', $name, PDO::PARAM_STR); 
      $query->bindValue(':email', $email, PDO::PARAM_STR); 
      $query->bindValue(':site', $site, PDO::PARAM_STR); 

      if($query->execute()){ 
       echo "Success"; 
      }else{ 
       echo "Failure"; 
      } 
     } catch (Exception $e) { 
      echo $e->getMessage(); 
     } 
    } 

注:この記事のDBの詳細は削除されていますが、コードにはその部分があります。

コンソール

名=ベンジー&メール=電子メール%40email.com &サイトは=ローカルホスト%3A8888 - scripts.min.js:9:117

ネットワーク

Console - Network

+1

プリペアドステートメントを正しく使用していません。プレースホルダを値として使用してください。 – Akintunde007

+0

の中に投稿データをスローしないでください。リクエストを分析するには、開発者ツールの[ネットワーク]タブをご覧ください。 –

+0

print_r($ _ POST)とは何ですか?戻る? – Akintunde007

答えて

1

これは、jQueryの.serialize()does not include the submit button

ボタンを使用してフォームが送信されなかったため、送信ボタンの値はシリアル化されません。

あなたconsole.log(formdata)の出力のためのコンソールをチェックしてください - あなたはsubmitが欠落している表示されます。そして、それが欠落していることから、あなたはバックエンドでその値にやるテストは失敗します。

if(isset($_POST['submit'])){ 

これを解決するために行う方法を正確にすることは、あなたが何をしようとしてに依存します。

if ($_SERVER['REQUEST_METHOD'] === 'POST') { 

あなたが基本的な検証を行いたい場合は、明示的期待値のそれぞれが存在しているチェックすることもできます:

あなただけを確認するには、要求は、あなたが使用することができ、POST(ないGET)でした
if (isset($_POST['name']) && isset($_POST['email']) && isset($_POST['site'])) { 
+0

ありがとうございます!これは問題を解決しました。 –

関連する問題