2016-08-30 3 views
0

単純な検索を実行した後に値をフォームに取り込もうとしていますが、スクリプトを実行すると "undefined"アラートを出す(データ);PHP:ajaxを使用してクエリ結果をhtmlフォームフィールドに取り込む方法

search.php

<?php 
include_once 'config/config.php'; 
include_once 'config/connect.php'; 
$conn = dbconn(); 

if(isset($_POST['btn-search'])) 
{ 
    $sub_id = mysqli_real_escape_string($conn, $_POST['user_id']); 
    $sql = "SELECT * FROM users WHERE user_id = '".$sub_id."'"; 
    $res = mysqli_query($conn, $sql); 
    $row = mysqli_fetch_array($res); 

    $found = array(); 
    while ($row = mysqli_fetch_array($res)) 
    { 
     $found[] = array(
      'name' => $row['full_name'], 
      'init_date' => $row['init_date'], 
      'position' => $row['position'], 
      'email' => $row['email'], 
     ); 
     echo json_encode($found); 
    } 
} 
mysqli_close($conn); 
?> 

スクリプト

<script> 
/* 
simple validation script 
*/ 

$('document').ready(function() 
{ 
    $('#register-submit-btn').attr('disabled', 'disabled'); 
    /* validation */ 
    $("#register-form").validate({ 
     rules: 
     { 
      user_id: { 
      required: true, 
      minlength: 5, 
      }, 
     }, 
     messages: 
     { 
      cedulaid:{ 
         required: "The user ID is required", 
         minlength: "The user ID should be no less than 5 characeters long.", 
        }, 
     }, 
     submitHandler: submitForm 
     }); 
     /* validation */ 

     /* get data */ 
     function submitForm() 
     {   
      var data = $("#details-form").serialize(); 

      $.ajax({ 
      type : 'POST', 
      url : 'search.php', 
      data : data, 
      beforeSend: function() 
      { 
       $("#detailsmsg").fadeOut(); 
       $("#btn-search").html('<img src="include/btn-ajax-loader.gif" /> &nbsp; Looking...'); 
       $('#btn-search').attr('disabled', 'disabled'); 
      }, 
      success : function(data) 
       { 
       alert(data); 
         $("#detailsmsg").fadeIn(1000, function(){      
         $("#detailsmsg").removeClass("alert-danger").addClass("alert-success"); 
         $('#btn-search').removeAttr('disabled'); 
         $("#btn-search").html('Search again?'); 
         $('#register-submit-btn').removeAttr('disabled'); 
         $("#detailsmsg").html("<span>Data Found</span>"); 

         }); 
         $("#name").val(data.name); // not sure how to do this part. this is probably very wrong but still not getting anything on the alert. 
         $("#init_date").val(data.init_date); 
         $("#position").val(data.position); 
         $("#email").val(data.email); 
       } 
      }); 
       return false; 
     } 
     /* get data */ 
}); 
</script> 

私は、私はなるだろうか見たいので、私は成功関数の先頭に警告(データを)持っています戻りますが、それは空白に戻ってきます。私がアラート(データ[0])を行うと、私は "undefined"メッセージを得る。

コンソールPOSTに戻り、この:

name=&init_date=&position=&email= 

あり、スクリプト内の多くのミスがおそらくあると私は私が得ることができる任意のフィードバックやヘルプに開いています。他の詳細が必要な場合はお知らせください。事前に

おかげで、

+2

は、echo json_encode($ found)を置くことができます。 search.phpからのオフループ –

答えて

3

1つの出力を得るためには、$ row = mysqli_fetch_array($ res)のみが必要です。 loop.itは単一のパラメータ出力を返します。

Search.php 

<?php 
include_once 'config/config.php'; 
include_once 'config/connect.php'; 
$conn = dbconn(); 

if(isset($_POST['btn-search'])) 
{ 
    $sub_id = mysqli_real_escape_string($conn, $_POST['user_id']); 
    $sql = "SELECT * FROM users WHERE user_id = '".$sub_id."'"; 
    $res = mysqli_query($conn, $sql); 
    $row = mysqli_fetch_array($res); 

    $found = array(); 

     $found[] = array(
      'name' => $row['full_name'], 
      'init_date' => $row['init_date'], 
      'position' => $row['position'], 
      'email' => $row['email'], 
     ); 
     echo json_encode($found); 

} 
mysqli_close($conn); 
?> 

一度試してみてください。

+0

ありがとう@Kamlesh Gupta。あなたの提案はいくらか進歩しました。今回は結果が得られましたが、すべての値がゼロになっています。 [{"name":null、 "init_date":null、 "position":null、 "email":null}]。私がこれを使ってテストしているサンプルのuser_idでデータベースを照会すると、探している結果が得られるので、クエリとは何の関係もないと思います。何か案は? – BlueSun3k1

+0

私は、data:data:{user_id:$( '#user_id')。val()}のajax呼び出しで、data:dataの変更を変更することによって配列に値を取得することにしました。 if(isset($ _ POST ['btn-search']))からif(isset($ _ POST ['user_id']))へのPHPスクリプト。入力フィールドにどのように値を取得するのですか? – BlueSun3k1

+0

私はそれを働かせる。私はJSON.stringify(データ)を使用していましたが、配列の結果を取得していましたが、dataType: 'json'を削除し、result = jQuery.parseJSON(data); result.user_idを使用して配列から値を取得できます。だから$( "#user_id")。val(result.user_id);今すぐ動作します。 – BlueSun3k1

1

だけですぐにそれがネストされた配列を返すPHPコードを見ることによって:

[ 
    [ 
     'name' => 'whatever', 
     'init_date' => 'date', 
     ... 
    ] 
] 

あなたが最初$found = array();を定義し$found[] = array(...)でそれに複数のアレイを追加するので、これが起こります。

しかし、javascript部分は存在しないちょうどdata.nameにアクセスしようとします。たぶんdata[0].nameはデータベースに少なくとも1つのレコードがあると仮定して存在するはずです。

dataを代わりに配列として繰り返しましたか?

しかし、多分問題は、あなたが$row変数をオーバーライドして、最初に見つかった結果をスキップ二回、したがって、mysqli_fetch_array()を呼び出すPHPの一部である:

$row = mysqli_fetch_array($res); 

$found = array(); 
while ($row = mysqli_fetch_array($res)) 
{ 
... 

私が見る最後の事はあなたがおそらく後echo json_encode($found);を呼び出したいということですすべての検索結果を収集したときにはwhileループになります。ところで、これも無効なJSONを生成します。

+0

マーティンに感謝します。私はKamlesh Guptaが提案したループを削除し、いくつかの進歩を遂げました。データを配列として反復処理する必要はありませんが、良いアプローチだと考えました。予想されるフィールドを埋めるためにphp変数の値を渡す方法はわかりません。 $ user_id = $ row ['user_id']のような通常の変数を実行すると、フォームに値をロードするにはどうしたらいいですか? – BlueSun3k1

関連する問題