2017-04-03 12 views
0

WebページからのAJAXリクエストに応じて、PHPスクリプトから必要な情報をすべて取得できません。mysqlからバックエンドに戻ってURLを使用する方法

私は、フロントエンドのフォームがあります。

<form method="post" id="register-form"> 
    <input class="form-control" id="firstname" name="first name" placeholder="Fornavn" type="text" /> 
    <button type="submit" class="btn btn-success" name="btn-save" id="btn-submit"> 
     Next page &nbsp; <i class="fa fa-arrow-right"></i> 
    </button> 

データをポストするためにAJAXを使用しています。

<a href="goHome.php?userID=XX" class="btn btn-buy-now" role="button">Go home</a> 
<a href="goAway.php?userID=XX" class="btn btn-buy-now" role="button">Go Away</a> 
:正常な応答は、2つのリンクボタンを表示して終了した後

function submitForm(){ 
    $.ajax({ 
     type : 'POST', 
     async: false, // NEW 
     url : 'register.php', 
     data : $("#register-form").serialize(), 
     dataType: 'json', 
     success : function(data){ 
      if (data.status==='success') { 
       $("#btn-submit").html('<span class="fa fa-spinner fa-spin"></span> &nbsp; Saving ...'); 
       $('#btn-submit').attr('disabled', 'disabled'); 
       $(".reg-form").fadeOut(500); 
       $(".ChooseProductForm").fadeIn(500); 
      } 

     }); 
     return false; 
    } 

リンクhrefの値のXXは、のプレースホルダ文字ですPHPで生成された値。

私のPHPファイル:

<?php 
$response = array(); 
if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
    $user_firstname   = trim_inputs($_POST['firstname']); 
    $user_joining_date  = date('Y-m-d H:i:s'); 
    $response['status'] = 'success'; 
    $SaveData = "INSERT INTO Users (firstname, joined) 
       VALUES ('".$user_firstname."', '".$user_joining_date."')"; 

    if (mysqli_query($link, $SaveData)) { 
     $LastInsertedID = mysqli_insert_id($link); 
    } else { 
     $response['status'] = 'error'; 
     //echo "Error: " . $SaveData . "<br>" . mysqli_error($link); 
    } 
    echo json_encode($response); 
} 
?> 

すべてがちょうどそれが必要のように動作しますが、これらの二つのボタンをフロントエンドに戻す$LastInsertedID値を取得する方法を理解することはできません。

私は$ responseの配列があることを知っていますが、値を戻す方法はあります。私は得ることができます

$response['message'] = 'Welcome user'; 

が、私は、そのメッセージにのhref ...タグをURLを追加したり、<場合、何も表示されないであろう: はまたのようなメッセージが表示されます。この質問を読み取るための

おかげで、うまくいけば、それは理解できると、おそらく誰かが事前に

感謝:-)助けることができます!

+3

?あなたはこれもSQLインジェクションにオープンしています。 – chris85

+0

あなたの応答にidを入れてください。あなたの成功コールバック(submitForm関数内)の中にレスポンスからIDを取得して、2つのオプションがあります:1.クッキーに保存して、次のページでそのクッキーを読んでください。 2。)URLにIDを入れ、次のページが読み込まれたら、そのIDをURLから取得してください – victor

+1

**警告**:mysqliを使用する場合は、[パラメータ化されたクエリ](http://php.net/manual /en/mysqli.quickstart.prepared-statements.php)と['bind_param'](http://php.net/manual/en/mysqli-stmt.bind-param.php)を使用してクエリにユーザーデータを追加します。 **重大な[SQLインジェクションのバグ](http://bobby-tables.com/)を作成したため、文字列の補間または連結を使用してこれを実行しないでください。 ** '$ _POST'、' $ _GET'、**任意の**ユーザデータを直接クエリーに入れないでください。誰かがあなたのミスを悪用しようとすると非常に危険です。 – tadman

答えて

1

バック新しいIDを送信:JavaScriptに

success : function(data) 
{ 
    if (data.status==='success') { 
     $("#btn-submit").html('<span class="fa fa-spinner fa-spin"></span> &nbsp; Saving ...'); 
     $('#btn-submit').attr('disabled', 'disabled'); 
     $(".reg-form").fadeOut(500); 
     $(".ChooseProductForm").fadeIn(500); 
     $("#id-of-go-away-button").attr("href", "goAway.php?userId=" + data.userId); 
     $("#id-of-go-home-button").attr("href", "goHome.php?userId=" + data.userId); 
    } 
} 
+0

あなたのソリューションにはありがとうございます。今私は何をすべきか理解しました! – KommerSnart

1

小さな変化:

if (mysqli_query($link, $SaveData)) { 
    $LastInsertedID = mysqli_insert_id($link); 
    $response['userId'] = $LastInsertedID; 
} else { 
    $response['status'] = 'error'; 
} 

は、そのIDを使用してください。スピナーを表示し、ajax呼び出しの前に保存していることをユーザーに伝えるようにコードを移動しました。 次に、ajax呼び出しから返されたデータから新しいIDを取得するためのコードを追加し、フィールドに入れて模擬しました。

Javascriptのコード:サーバー上

function submitForm(){ 
    $("#btn-submit").html('<span class="fa fa-spinner fa-spin"></span> &nbsp; Saving...'); 
    $('#btn-submit').attr('disabled', 'disabled'); 
    $.ajax(
     { 
      type : 'POST', 
      async: false, // NEW 
      url : 'register.php', 
      data : $("#register-form").serialize(), 
      dataType: 'json', 
      success : function(data) { 
       if (data.status==='success') { 
        $("#btn-submit").html('Saved.'); 
        $(".reg-form").fadeOut(500); 
        $(".ChooseProductForm").fadeIn(500); 
        var new_id = data.new_id; 
        $("#field to hold the new id").val(new_id); 
       } 
      } 
     } 
    ); 
    return false; 
} 

、私たちは、呼び出し元に返されたデータに新しいIDを追加する必要があります。

PHPコード:二つのボタンが生成され、どのように

<?php 
    $response = array(); 
    if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
     $user_firstname = trim_inputs($_POST['firstname']); 
     $user_joining_date = date('Y-m-d H:i:s'); 
     $response['status'] = 'success'; 
     $response['error_message'] = ""; 
     $SaveData = "INSERT INTO Users (firstname, joined) VALUES ('".$user_firstname."', '".$user_joining_date."')"; 

     if (mysqli_query($link, $SaveData)) { 
      $LastInsertedID = mysqli_insert_id($link); 
      $response['new_id'] = $LastInsertedID; 
      $response['message'] = "Welcome new user!"; 
     } else { 
      $response['status'] = 'error'; 
      $response['error_message'] = $SaveData . "<br>" . mysqli_error($link); 
     } 
     echo json_encode($response); 
    } 
?> 
関連する問題