PHP POST дает пустой результат, используя базу данных sqlite3 - PullRequest
0 голосов
/ 29 марта 2020

У меня есть простая веб-форма в HTML с использованием POST и PHP для базы данных SQLite3. Форма запрашивает идентификатор базы данных. После ввода и нажатия кнопки отправки результат не выводится на экран.

Вот код. Пожалуйста помоги! Кажется, переменная пуста. Где я ошибаюсь?

Исходная форма HTML (edit_entry1. html):

<body bgcolor = "#C7CFCA">
</p></p>
<center><h2>Update a Record<br>
<form method="POST" action="update_record.php">
<br />
<center>
<h3>To update a record click on 'View Database' and find the record ID you want to update and enter that ID here.</h3>
</center>
<table>
  <tr><td><h2>Record ID: </td><td><h2><input style="font-size:20px" type="text" name="archivo" size="80"></td></tr>
  <tr><td><input type="submit" name="save" value="Submit" style="font-size:20px"></td><td><input type=reset value="Reset Form" style="font-size:20px"></td>
</table>
</form>
</center>
</html>

Это соответствующий скрипт php (update_record. php):

 <?php
{
//open the database
$db = new SQLite3('wc.db');

// Set Variables from POST
$record = $_POST["archivo"];

//now output the data to a simple html table...
echo "<!DOCTYPE html>\n";
echo "<html lang=\"en\">\n";
echo "<body bgcolor = \"#C7CFCA\" text = \"black\">\n";
echo "<center>";
echo "<p>Record ID is <?php echo $record ?>.</p>";
echo "<table>\n";
echo "<h2>Update a Record</h2>";
echo "<tr><th><u><h3>ID</th><th><u><h3>Last Name</th><th><u><h3>First Name</th>";
echo "<th><u><h3>Middle Name</th><th><u><h3>Section</th>";
echo "<th><u><h3>Lot</th><th><u><h3>Plot</th><th><u><h3>Burial Date</th><th><u><h3>Veteran</th></tr>\n";

$results = $db->query('SELECT id,last_name,first_name,middle_initial,section,lot,plot,burial_date,veteran FROM burials WHERE id = $record');
while ($row = $results->fetchArray()) {
    echo "<tr><td><center><h3>" . $row['id'] . "</td><td><center><h3>" . $row['last_name'] . "</td><td><center><h3>" .
    $row['first_name'] . "</td><td><center><h3>" . $row['middle_initial'] . "</td><td><center><h3>" .
    $row['section'] . "</td><td><center><h3>" . $row['lot'] . "</td><td><center><h3>" . $row['plot'] . "</td><td><center><h3>" . $row['burial_date'] . "</td><td><center><h3>" . $row['veteran'] . "</td></tr>\n";

}

echo "</table>\n";
echo "<p>Record ID is <?php echo $record ?>.</p>";
echo "<label for=\"sql\"><h3>What do you want to update? </label>";

echo "<select id=\"option\">";
  echo "<h3><option value=\"last_name\"><h3>Last Name</option>";
  echo "<option value=\"fist_name\"><h3>First Name</option>";
  echo "<option value=\"middle_initial\"><h3>Middle Name</option>";
  echo "<option value=\"section\"><h3>Section</option>";
  echo "<option value=\"lot\"><h3>Lot</option>";
  echo "<option value=\"plot\"><h3>Plot</option>";
  echo "<option value=\"burial_date\"><h3>Burial Date</option>";
  echo "<option value=\"veteran\"><h3>Veteran Status</option>";
echo "</select>";
echo "<h2><input style=\"font-size:15px\" type=\"text\" name=\"opt\" size=\"30\">";
echo "</body>\n";
echo "</html>";

}
?>

Когда я ставлю, скажем, 1 в качестве идентификатора записи в форме, ничего не выводится. Я новичок в этом и определенно буду признателен за некоторые советы / подсказки.

1 Ответ

1 голос
/ 29 марта 2020

Чтобы предотвратить SQL инъекционную атаку , вам следует рассмотреть возможность использования шаблона prepare / bind / execute. Используйте пример 1 в SQLITE3 :: prepare do c в качестве руководства.

Относительно рассматриваемой проблемы: из PHP: строки делают c:

Когда строка указана в двойных кавычках или в формате c, в ней анализируются переменные.

Поскольку запрос SQL заключен в одинарных кавычках (') переменная $record не анализируется. Другими словами, вы видите то, что отправляется в базу данных, поэтому строки не возвращаются.

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