2012-02-19 73 views
1

我是HTML/PHP/JavaScript世界中的絕對初學者。我試圖讓這個網頁:與文檔標題使用選擇變化的數據庫數據填充輸入

  1. 下拉列表
  2. 當選擇的東西,下面填充與PostgreSQL的數據輸入字段,允許更新
  3. 提交按鈕更新數據庫更正來自用戶的值。

1和3都沒問題(已經試過用插入表單)。
我的代碼如下所示(簡化,沒有dbconn):

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場實際上):

<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> 

php選擇字段(docsel.php):

<?php 
include('../scripts/pgconnect.php'); 
$iddoc = $_POST['id']; 
$sql="SELECT * FROM document where id_doc = $iddoc"; 
$result = pg_query($db, $sql); 
if (!$result) { 
    echo "ERREUR<br>\n"; 
exit;} 
$row = pg_fetch_row($result); 
$doctyp = $row[1]; 
$doctitre = $row[2]; 
$docauteur = $row[3]; 
$doccontent =$row[4]; 
pg_free_result($result); 
pg_close($db); 
} 
?> 

無論我做什麼,我都無法取回價值觀。我嘗試value="'.$doctitre'"在輸入, echo $doctitre,無濟於事。我的代碼邏輯是否正確?謝謝你的幫助

回答

1

你就在附近。腳本docsel.php需要將數據返回到html頁面。 你有它已經安裝在回調函數

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

爲了在data.content東西來接收數據,PHP腳本發送JSON數據:

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

也許你需要閱讀$ .post和json_encode上的文檔...祝你好運。

+0

感謝您的幫助。它不適合我,docsel.php不運行。一定有東西在這裏錯了:''我重讀了一百次,沒有發現任何錯誤。 – 2012-02-20 02:27:11

+0

我建議你打開你的瀏覽器開發者控制檯,並直接把ajax-call放在那裏:$ .post(「docsel.php」,{id:'4'},function(data){console.log(data );});然後你應該看到,從docsel.php返回的數據是什麼。在這裏發佈輸出。 – mindandmedia 2012-02-20 10:02:23

+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];); }'我做錯了什麼? – 2012-02-20 15:17:06

0

在這裏有幾件事需要改變。

首先,最重要的是你的docsel.php腳本有一個巨大的安全漏洞。你永遠不應該永遠永遠地方unsanitised輸入例如直接來自用戶,直接進入SQL查詢,因爲它允許SQL注入。實質上,SQL注入允許惡意用戶結束程序員查詢並提交他們自己的。爲了解決這個問題,你必須清理任何用戶輸入 - 所以在這種情況下,在將用戶輸入放入查詢之前,通過函數pg_escape_literal()傳遞用戶輸入。

其次,您的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請求返回的數據什麼。在回調函數中,您需要將返回的字段添加到您的選擇下拉菜單中。代碼示例:

<script> 
    $(document).ready(function(){ 
    $("select#listedoc").change(function() { 
      var id = $("select#listedoc option:selected").attr('value'); 
      $.post("docsel.php", {id:id},function(data) { 
       //FILL THE DROPDOWN HERE 
       $(data).each(function(elem) { 
        $("#dropdown-id").append("<option value='" + elem.doctitle + "'>" + elem.doctitle + "</option>"); 
       }); 
      }, "json"); 
    }); 

</script> 

一個靜音和迂腐點,但是當提出內容請求時,您應該使用GET而不是POST。

+0

謝謝你的幫助。它現在可以工作(沒有安全漏洞!)。 – 2012-02-21 12:51:27

相關問題