2009-05-18 2 views
0

У меня есть форма, с которой я пытаюсь отобразить форму с флажками, а затем вставлять в базу данных, проверяются ли эти флажки. Затем каждый раз, когда вызывается страница, проверьте значение и добавьте информацию в форму 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>"; 

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

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

+0

добавить санацию ввода в PHP тоже - очистка на стороне клиента может быть отключена ... – Alnitak

+1

Ваш код уязвим для SQL-инъекций. Использовать bind_param на $ pk в первом запросе на выбор. Он также уязвим для xss-инъекций. Escape $ pk с 'htmlspecialchars()' при встраивании его в html. – troelskn

ответ

1

Важно помнить, что флажок без отметки не вносит какие-либо значения в форму при ее отправке. Когда удаленное поле не отмечено, значение $ _POST ['deleted'] не установлено.

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

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

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

+0

Если флажок не установлен, то соответствующее значение должно обязательно оставаться в виде "", которое просто показывает его как не проверенное. Я до сих пор не понимаю, почему ничего, по-видимому, не отправляется, и я не получаю никаких ошибок. – 2009-05-18 11:12:50

+0

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

+0

Спасибо за ваш ответ ... тестирование этого сейчас. Попытка с помощью $ deleted = isset ($ _ POST ["deleted"])? "checked": ""; Я понимаю, что это странно. Я не получаю никаких ошибок. – 2009-05-18 11:36:15

-1

Я думал, флажков следует сделать это путь:

<input type="checkbox" name="notice1" value="value1" checked="checked"/> 
<input type="checkbox" name="notice2" value="value2" checked="checked"/> 
+0

Да, но тогда я не могу так же легко делать то, что хочу. Моя оценка работает, как я уже сказал, так что все в порядке. – 2009-05-18 11:11:44

+0

Ты думаешь о переключателях, я думаю. Если пользователь проверяет оба флажка, отправляется только значение2 (если вы не включите имя = «уведомление» в name = «notice []»). – ceejayoz

+0

Это не было ответом непосредственно на вопрос, но больше советом по html: точка, на которую нужно указать, была, как использовать проверенный атрибут в полях ввода. – TheHippo

0

в том же ключе, как ответ Пола Диксона, я сделал это в разы:

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

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