Заполните ввод данными базы данных при изменении выбора - PullRequest
1 голос
/ 20 февраля 2012

Я абсолютный новичок в мире 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, безрезультатно. Правильна ли моя логика кода? Спасибо за вашу помощь

Ответы [ 2 ]

1 голос
/ 20 февраля 2012

ты рядом.скрипт 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 голосов
/ 20 февраля 2012

Здесь есть пара вещей, которые вам нужно изменить.

Во-первых, и самое главное, в вашем скрипте 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.Внутри функции обратного вызова вам необходимо добавить возвращенные поля в выпадающий список.Пример кода:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...