У меня есть форма, с которой я пытаюсь отобразить форму с флажками, а затем вставлять в базу данных, проверяются ли эти флажки. Затем каждый раз, когда вызывается страница, проверьте значение и добавьте информацию в форму html, чтобы отобразить флажок, если он установлен, или нет.php form issues
Я изменил приведенный ниже пример кода, чтобы сделать его коротким, и я знаю, что присваиваю проверенное значение «value», которое ничего не сделает.
Подход
<input type="checkbox" name="notice" value="checked" checked/>
, чтобы отобразить флажок в зарегистрированном, а не действительный HTML, работает в любом браузере, и на примере here. Я бы предпочел придерживаться такого подхода.
Теперь я не вижу, что не так с моим кодом.
Первыми шагами должны быть извлечение значений из базы данных, из которых будет извлекаться одна одинарная строка, поскольку article_no является первичным ключом. Если ничего не получено, переменные просто назначаются «", что приводит к тому, что флажок не установлен.
Поскольку это значение отмечено, если оно выбрано, оно должно быть вставлено в базу данных и будет отображаться как указано при следующем просмотре страницы.
Теперь, как есть, этот код неудачен. firebug не показывает ничего, что отправляется или принимается в консоли, никакие erros не записываются ни с помощью php, ни с mysql, ничто не появляется в базе данных, несмотря на то, что поля являются корректными, и не сообщается об ошибках mysql ...
Что такое проблема?
The code:
<?php
error_reporting(E_ALL);
if (isset($_GET["cmd"]))
$cmd = $_GET["cmd"];
else
if (isset($_POST["cmd"]))
$cmd = $_POST["cmd"];
if (isset($_GET["pk"]))
{ $pk = $_GET["pk"];}
if (isset($_POST["deleted"]))
{ $deleted = $_POST["deleted"];}
if (isset($_POST["notice"]))
{ $notice = $_POST["notice"];}
$con = mysqli_connect("localhost","user","pass", "db");
if (!$con) {
echo "Can't connect to MySQL Server. Errorcode: %s\n". mysqli_connect_error();
exit;
}
$con->set_charset("utf8");
$getformdata = $con->query("select * from TEST where ARTICLE_NO = '$pk'");
$checkDeleted = "";
$checkNotice = "";
while ($row = mysqli_fetch_assoc($getformdata))
{
$checkDeleted = $row['deleted'];
$checkNotice = $row['notice'];
}
if($cmd=="submitinfo"){
$statusQuery = "INSERT INTO TEST VALUES (?, ?, ?)";
if ($statusInfo = $con->prepare($statusQuery)) {
$statusInfo->bind_param("sss", $pk, $deleted, $notice);
$statusInfo->execute();
$statusInfo->close();
} else {
print_r($con->error);
}
}
echo "<form name=\"statusForm\" action=\"x.php\" method=\"post\" enctype=\"multipart/form-data\">
<h1>Editing information for auction: ".$pk."</h1>
Löschung Ebay:
<input type=\"checkbox\" name=\"deleted\" value=\"checked\" ".$checkDeleted." align=\"right\"/>
<br />
Abmahnung:
<input type=\"checkbox\" name=\"notice\" value=\"checked\" ".$checkNotice." align=\"left\"/>
<br />
<input type=\"hidden\" name=\"cmd\" value=\"submitinfo\" />
<input name=\"Submit\" type=\"submit\" value=\"submit\" />
</form>";
В настоящей форме/странице у меня есть соответствующая дезинфекция.
Большая проблема заключается в том, что в базу данных ничего не вставлено и никаких ошибок не возвращается вообще!
добавить санацию ввода в PHP тоже - очистка на стороне клиента может быть отключена ... – Alnitak
Ваш код уязвим для SQL-инъекций. Использовать bind_param на $ pk в первом запросе на выбор. Он также уязвим для xss-инъекций. Escape $ pk с 'htmlspecialchars()' при встраивании его в html. – troelskn