Проблема передачи переменных в форме PHP - PullRequest
0 голосов
/ 15 мая 2009

У меня есть следующая форма php.

Я пытаюсь сделать так, чтобы при загрузке формы значения были назначены соответствующей проверочной переменной. Эта переменная будет содержать либо «флажок, либо». Если он содержит флажок, то способ отображения с помощью html должен привести к установке соответствующего флажка.

На самом деле переменные, похоже, не передаются. Когда я отображаю $ удаленное или $ уведомление из ветви submitinfo, они остаются пустыми. Кроме того, ничего не вставляется в базу данных, и я не получаю никакой ошибки базы данных. Как я могу это проверить?

<?php
if (isset($_GET["cmd"]))
  $cmd = $_GET["cmd"]; else
if (isset($_POST["cmd"]))
  $cmd = $_POST["cmd"]; else
die("Invalid URL");
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","password", "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 STATUS where ARTICLE_NO = '$pk'");
$checkDeleted = "";
$checkNotice = "";
while ($row = mysqli_fetch_assoc($getformdata)) {
    $checkDeleted = $row['deleted'];
    $checkNotice = $row['notice'];
}
if($cmd=="submitinfo") {
    $statusQuery = "INSERT INTO STATUS VALUES (?, ?)";
    if ($statusInfo = $con->prepare($statusQuery)) {
        $statusInfo->bind_param("ss", $deleted, $notice);
        $statusInfo->execute();
        $statusInfo->close();
        echo "true";
    } else {
        echo "false";
    }
    print_r($con->error);
}
if($cmd=="EditStatusData") {
    echo "<form name=\"statusForm\" action=\"test.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." />
<br />
Abmahnung:
<input type=\"checkbox\" name=\"notice\"  value=\"checked\" ".$checkNotice."  />
<br />
<input type=\"hidden\" name=\"cmd\" value=\"submitinfo\" />
<input name=\"Submit\" type=\"submit\" value=\"submit\" />
</form>";
} else {
    print_r($con->error);
}

Ответы [ 4 ]

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

Простой ответ для стороны отправки формы включает скрытый ввод перед каждым флажком с тем же именем и значением «unchecked». Флажок будет перезаписывать значение скрытого ввода, только если установлен флажок.

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

Таким образом, у вас всегда есть значение для $ _POST ['note'].

Для ошибки проверки, упомянутой выше, и установки флажка в статусе. В соответствии со стандартами w3c для xhtml, атрибут «флажок» должен иметь значение, в данном случае также «флажок».

<?php

while ($row = mysqli_fetch_assoc($getformdata)) {
    $checkDeleted = ($row['deleted'] == 'checked') 
        ? 'checked="' . $row['deleted'] . '"' 
        : '';
    $checkNotice = ($row['notice'] == 'checked') 
        ? 'checked="' . $row['notice'] . '"' 
        : '';
}
?>

Теперь ваш атрибут «проверен» будет соответствовать стандарту

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

IIRC, если значение типа ввода «флажок» является пустой строкой, оно не будет проверено. Если это что-то еще, это будет проверено. Как он там выглядит, значение всегда будет «проверено».

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

Я не уверен, что следую вашему коду ...

Ваш HTML имеет:

value="checked"

Это означает, что если пользователь установит флажок и загрузит форму, ему будет присвоено этому полю значение «флажок» (в отличие от значения, скажем, «мужской»).

Так как в качестве значений у вас есть только эти значения, то в таблицу никогда не будет вставлено что-либо как "непроверенное", также ваше поле ввода имеет вывод непроверенной и проверенной БД, просто находящийся там без какого-либо присвоенного ему атрибута. Это намеренно? Это встроено в значение БД, в противном случае у вас есть что-то с эффектом:

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

Что на самом деле ничего не даст, по крайней мере, ничего не поможет?

И наконец, в вашем результате выборки, если я правильно читаю, у вас есть:

$checkedValue = $row['checked'];

Это означает, что если у вас есть несколько результатов, вы присваиваете только последнюю строку с этим значением, поэтому, если у вас по какой-либо причине будет пустая строка внизу, это даст вам пустые переменные и ошибки не будет. Возможно, вы хотели присвоить это массиву? Или, по крайней мере, сделайте проверку на счетчик результатов, например mysql_num_rows (), чтобы убедиться, что это только первая строка (или только одна строка, даже). Вы даже можете добавить отказоустойчивый и заставить его завершить цикл while после одной итерации, на всякий случай.

И, наконец, ваш код будет намного чище и проще для написания и чтения, если вы используете Синтаксис Heredoc он же EOD. При этом вам не придется комментировать все ваши двойные кавычки, и вы все равно можете использовать встроенные переменные.

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

О проверке ошибок проверьте журналы веб-сервера или убедитесь, что php отображает ошибки в вашем php.ini.

Вы размещаете на веб-странице? $ удалено и $ извещение будет установлено только для запросов POST.

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