вопросы формы php - PullRequest
       18

вопросы формы php

0 голосов
/ 18 мая 2009

У меня есть форма, с помощью которой я пытаюсь отобразить форму с флажками, а затем вставить в базу данных независимо от того, установлены ли эти флажки или нет. Затем при каждом вызове страницы проверяйте значение и добавляйте информацию в html-форму, чтобы отображать флажок как установленный или нет.

Я изменил приведенный ниже пример кода, чтобы сделать его коротким, и мне известно, что я присваиваю проверенное значение значению 'value', которое ничего не будет делать.

Подход

<input type="checkbox" name="notice"  value="checked" checked/>

для отображения флажка как отмеченного, хотя и не является действительным html, работает в каждом браузере и основан на примере здесь . Я бы предпочел придерживаться этого подхода.

Теперь я не вижу, что не так с моим кодом.

Первым шагом должно быть получение значений из базы данных, из которых будет извлечена только одна строка, так как article_no является первичным ключом. Если ничего не получено, переменные просто присваиваются "", что приводит к тому, что флажок не проверяется.

Поскольку значение проверено, если оно выбрано, оно должно быть вставлено в базу данных и будет отображаться как проверенное при следующем просмотре страницы.

Теперь, как есть, этот код полностью не работает. firebug не показывает ничего отправляемого или получаемого в консоли, ошибки не записываются ни с помощью 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>";

В реальной форме / странице у меня есть соответствующая очистка.

Большая проблема в том, что в базу данных ничего не вставляется и ошибок вообще не возвращается!

Ответы [ 3 ]

1 голос
/ 18 мая 2009

Важно помнить, что не отмеченный флажок не вносит никаких значений в форму при ее отправке. Если удаленное поле не отмечено, значение $ _POST ['удалено'] не установлено.

Имея это в виду, похоже, что вы на самом деле не устанавливали значение $ удалено, если флажок снят. Используйте такую ​​идиому, как эта.

$deleted = isset($_POST["deleted"]) ? 1: 0;

Замените 1 и 0 любыми значениями, которые вы хотите в своей таблице базы данных для проверенных и непроверенных состояний (в вашем случае, «проверено» и «»)

0 голосов
/ 18 мая 2009

По тому же принципу, что и ответ Пола Диксона, я иногда делал это:

<input type="hidden" name="notice" value="not checked" />
<input type="checkbox" name="notice" value="checked" checked="checked" />

Если пользователь снимает флажок, вместо него отправляется значение скрытого ввода. Таким образом, $_POST['notice'] всегда отправляется в ваш скрипт.

0 голосов
/ 18 мая 2009

Я думал, флажки должны быть сделаны следующим образом:

<input type="checkbox" name="notice1"  value="value1" checked="checked"/>
<input type="checkbox" name="notice2"  value="value2" checked="checked"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...