2013-09-16 5 views
0

Я делаю упражнение из книги PHP & MYSQL в простых шагах. Он включает форму HTML для обновления строки в базе данных, а затем различные скрипты PHP для проверки входных данных для HTML-кода и преобразования их в безопасный формат. Однако код просто не работает так, как написано в книге. Я пошел на веб-сайт издателя и загрузил пример кода, но без радости.PHP и безопасные формы

Вместо формы с именем строки под ней вместо этого я получаю форму, а затем ниже «Нет действительного нового имени». Затем под этим текущим именем строки в таблице, которую я хочу изменить. Когда я пытаюсь ввести и отправить данные в форму, это не имеет значения. Он отображает точно ту же страницу. Код ниже.

<!DOCTYPE HTML> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Ensuring security 
    </title> 
</head> 
<body> 

<form action="secure.php" method="POST"> 
    <p>New Name : <input type="text" name="name"> 
     <input type="submit"></p></form> 



<?php 

require('../connect_db.php'); 


if (!empty($POST['name']) && !is_numeric($_POST['name'])) { 
    $name = $POST['name']; 

    $name = mysqli_real_escape_string($dbc, $name); 
    $name = strip_tags($name); 

    $q = 'UPDATE towels SET name "' . $name . '" WHERE id= 1'; 
    mysqli_query($dbc, $q); 
} else { 
    echo 'No valid new name submitted'; 
} 

$q = 'SELECT * FROM towels WHERE id = 1 '; 
$r = mysqli_query($dbc, $q); 
while ($row = mysqli_fetch_array($r, MYSQLI_NUM)) { 
    echo "<p>Name : $row[1] </p>"; 
} 
mysqli_close($dbc); 

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

+3

Получить другую книгу. Тот, который преподает [подготовленные заявления] (http://php.net/manual/en/pdo.prepared-statements.php). (Не говоря уже о сочетании HTML и PHP, который делает материал нечитаемым и неподъемным.) –

+1

Вы используете 'mysqli' неправильно. Вы должны подготовить инструкцию, а затем использовать ['bind_param'] (http://php.net/manual/en/mysqli-stmt.bind-param.php), чтобы добавить значение' $ name'. Использование конкатенации строк чрезвычайно опасно, поскольку простая ошибка может быть разрушительной. Если вы изучаете эту технику из книги, ваша книга сломана. Я с Бартом здесь, возьму новую книгу. – tadman

+0

Для начала, измените все '$ POST' на' $ _POST' –

ответ

5

Нет суперглобального массива $POST, поэтому вам необходимо изменить $POST['name'] на $_POST['name'].

PHP не может видеть этот массив, поэтому он оценивает !empty($POST['name']) как false и никогда не выполняет код с запросом update.

И, как @BartFriederichs сказал, купите лучшую книгу. Я не думаю, что вы узнаете что-то ценное из нынешнего.

+0

Спасибо. Я уже прокомментировал выше. Я исправил ошибку, но она по-прежнему не обрабатывает изменение имени. Я не уверен, какую книгу я поеду дальше. –

Смежные вопросы