2013-12-03 4 views
0

Я пытаюсь обновить таблицу MySQL с помощью простого PHP, но каждый раз, когда я запускаю эту команду, я получаю сообщение об ошибке: «Сайт находится в автономном режиме, пожалуйста, зайдите позже!» Строка, которую я вводил, - это только один простой абзац, но в нем есть HTML-код. Какую дезинфекцию нужно предпринять, чтобы заставить эту работу работать? Вот код:Что я не могу ОБНОВИТЬ мою таблицу с PHP?

if (!empty($_POST) && $_SESSION['logged'] == 1) 
{ 
    $title = $_POST['title1']; 
    $body = $_POST['body1']; 
    $query = "UPDATE pages SET title = '$title', body = '$body' WHERE id = '$id'"; 
    $do_query = mysql_query($query) or die ("Site is offline, please check back later!"); 
} 

И в этом пункте я пытаюсь обновить с:

Lorem Ipsum is simply dummy text of the printing and typesetting industry. <br /><br />Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. <br /><br />Please visit <a href="http://lipsum.com">Lipsum's website</a> for more info. 
+0

Вы не спасаясь текст, так что ваш SQL является неправильным после 'industry' – Popnoodles

+1

Вы очень открыты для инъекции SQL. 'title1 = & body1 = & id = 'OR 1 = 1' будет испортить ВСЕ ваши страницы. [** Пожалуйста, не используйте 'mysql_ *' функции в новом коде **) (http://bit.ly/phpmsql). Они больше не поддерживаются [и официально устарели] (https://wiki.php.net/rfc/mysql_deprecation). См. [** красное поле **] (http://j.mp/Te9zIL)? Узнайте о [* подготовленных операторах *] (http://j.mp/T9hLWi) и используйте [PDO] (http://php.net/pdo) или [MySQLi] (http://php.net/ mysqli) - [эта статья] (http://j.mp/QEx8IB) поможет вам решить, какой из них. Если вы выберете PDO, [здесь хороший учебник] (http://j.mp/PoWehJ). – h2ooooooo

+0

@popnoodles Кажется, да. Это точная причина, по которой «она будет использоваться только как внутренняя система», является худшей аргументацией в мире, чтобы не избегать переменных SQL. – h2ooooooo

ответ

4

Чтобы получить ответ на ваш вопрос, ваш SQL-запрос не удается, потому что текст вы вставив содержит один -quote, ', и вы не избегаете его.

Чтобы исправить это, вы можете использовать mysql_real_escape_string() дезинфицировать свои данные:

$title = mysql_real_escape_string($_POST['title1']); 
$body = mysql_real_escape_string($_POST['body1']); 

Однако я настоятельно рекомендую вам взять время, чтобы остановки используя старые mysql_ функции и переключиться на более- поддерживается MySQLi или PDO библиотека; они позволят вам использовать prepared statements для предотвращения этой проблемы.

Пример с MySQLi:

$mysqli = new mysqli("localhost", "user", "password", "database"); 
$stmt = $mysqli->prepare('UPDATE pages SET title = ?, body = ? WHERE id = ?'); 
$stmt->bind_param("s", $_POST['title1']); 
$stmt->bind_param("s", $_POST['body1']); 
$stmt->bind_param("i", $id); 
$stmt->execute(); 
+0

Большое спасибо, это решило мою проблему. И спасибо всем остальным за ответы. – user3061610

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