在选择更改时使用数据库数据填充输入

时间:2012-02-19 22:36:10

标签: php jquery html postgresql

我是HTML / Php / JavaScript世界的绝对初学者。我正在尝试制作这个页面:

  1. 带文件标题的下拉列表
  2. 选择某些内容时,使用PostgreSQL中的数据填充下面的输入字段以允许更新
  3. 提交按钮以使用用户更正的值更新数据库。
  4. 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无济于事。我的代码逻辑是否正确?谢谢你的帮助

2 个答案:

答案 0 :(得分: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上的文档...祝你好运。

答案 1 :(得分:0)

这里有一些你需要改变的事情。

首先,最重要的是你的docsel.php脚本有一个巨大的安全漏洞。您永远不应该永远放置未经过处理的输入,例如直接从用户直接进入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。