2012-02-19 16 views
1

私は、HTML/PHP/JavaScriptの世界では絶対初心者です。私はこのページ作成しようとしています:文書のタイトルと選択した変更の入力にデータベースデータを入力する

  1. ドロップダウンリストを
  2. 何かが選択されている場合、
  3. 更新を可能にしてデータベースを更新するには、ボタンを提出するのPostgreSQLからのデータを使って下の入力フィールドを移入ユーザーから補正された値。

1と3は大丈夫です(これはすでに挿入専用フォームで試してあります)。
私のコードは、(dbconnずに、単純化)次のようになります。

<p><form name="saisiedoc" method="post" action="docupdins.php"></p> 
<table border=0> 
<tr><td>Texte</td> 
<?php 
echo '<td> <textarea name="content" cols="100" rows="30"></textarea> </td>'; 
?> 
</tr><tr> 
<td colspan=2> 
<input type=submit value="Valider la saisie" name="maj"> </td> 
</tr> 
</table> 
</form>' 

そして、jQueryのスクリプト:

<script> 
$(document).ready(function(){ 
$("select#listedoc").change(function() { 
var id = $("select#listedoc option:selected").attr('value'); 
$.post("docsel.php", {id:id},function(data) { 
}); 
}); 

</script> 

echo "<select name='listedoc' size=1>"; 
while ($ligne = pg_fetch_array($result, null, PGSQL_ASSOC)) 
{ 
echo '<option value="'.$ligne['id_doc'].'">'.$ligne['doc_titre']. '</option>'; 
} 
echo "</select>"; 

入力フィールド(簡略化され、実際には4つのフィールドがあります)フィールドを選択するPHP(docsel.php):

私が何をしても、価値を取り戻すことはできません。私は入力にvalue="'.$doctitre'"を試しました、 echo $doctitre、無駄です。私のコードロジックは正しいですか?ご協力ありがとうございます

答えて

1

あなたは近くにあります。 docsel.phpスクリプトはhtmlページにデータを返す必要があります。

$result = []; 
$result['content'] = $doccontent; 
echo json_encode($result); 

は多分あなたが読んでする必要があります: すでにコールバック関数data.contentで何かを持っているために、

$.post("docsel.php", {id:id},function(data) { 
    $('textarea[name="content"]').text(data.content); 
}); 

でデータを受信するためのセットアップをそれを持って、PHPスクリプトは、JSONデータを送信します$ .postとjson_encodeのドキュメント...幸運。

+0

ありがとうございます。それは私のために働かなかった、docsel.phpは実行されていません。 '「何百回も読んで間違いを見つけられませんでした。 –

+0

ブラウザの開発者コンソールを開いて、そこにajax-callという行を直接置くことをお勧めします:$ .post( "docsel.php"、{id: '4'}、function(data){console.log(data );});次に、どのデータがdocsel.phpから戻ってくるのかを確認する必要があります。ここに出力してください。 – mindandmedia

+0

あなたの助けとchristophmccannの助けを借りて、私は私のdocsel.phpを動作させることができました!今、私は入力フィールドの値を変更するために使用する必要があるJsonエンコードされた配列を持っています(最後のステップ!)。ここに私が試したことがあります: '$。post(" docsel.php "、{id:id}、showResult、" text "); \t \t \t \t \t \t \t 関数showResult(RES) {VAR OBJ = JSON.parse(RES)。 $( 'content')。val(obj.content [0];); $( '#titre')。val(obj.titre [0];); }「私は間違っていますか? –

0

ここで変更する必要があるものがいくつかあります。

まず第一に、あなたのdocsel.phpスクリプトにはセキュリティ上の問題があります。 これまでに場所に非化成化された入力がありません。ユーザーから直接、SQLインジェクションが可能であるため、SQLクエリーに直接アクセスできます。本質的に、SQLインジェクションは、悪意のあるユーザーがプログラマーのクエリを終了し、独自のものを提出することを可能にします。これを回すには、ユーザーの入力をすべて消さなければなりません。そのため、この例では、クエリーに入れる前に関数pg_escape_literal()でユーザー入力を渡します。

第2に、docsel.phpスクリプトは、AJAXリクエストに対して何らかの出力を出さなければなりません。 echoを使用するとJSONにエンコードすることをお勧めします。コード例:

$return_vals = array("doctype" => $doctyp, "doctitle" => $doctitre, "docauthor" => $docauteur, "doccontent" => $doccontent); 
echo json_encode(array("document" => $return_vals)); 

最後に、あなたのjQueryのスクリプトでは、あなたが実際にあなたのAJAXポストリクエストから返されたデータで何もしていません。コールバック関数の中で、返されたフィールドを選択ドロップダウンに追加する必要があります。コード例:

ただし、コンテンツの要求を行うときは、POSTではなくGETを使用する必要があります。

+0

ありがとうございます。それは今作動する(セキュリティホールなし!)。 –

関連する問題