Безопасен ли этот скрипт: <?php include ("mysql.php"); $tit = $_POST ['title']; $tit = htmlspecialchars ($tit, ENT_QUOTES); if (empty ($tit)) die ("<b>Вы не ввели название !!!</b>"); if (strlen ($tit) > 50) die ("<b>Название слишком длинное !!!</b> "); $title_query = mysql_query ("SELECT title FROM sections WHERE (title = '$tit') LIMIT 1"); if (mysql_num_rows ($title_query) > 0) die ("<b>Раздел уже существует !!!</b>"); mysql_query ("INSERT INTO sections (title) VALUES ('$tit')"); echo "Раздел успешно добавлен !!!"; ?> Или еще добавить mysql_real_escape_string? Но при выводе перед кавычками не должны появляться слеши.
Я бы сделал вот так: PHP: <?php include ($_SERVER["DOCUMENT_ROOT"]."/some/path/to/mysql.php"); $tit = trim($_POST ['title']); if (empty($tit)) die ("<b>Вы не ввели название !!!</b>"); if (strlen($tit) > 50) die ("<b>Название слишком длинное !!!</b> "); $tit = mysql_real_escape_string($tit); $title_query = mysql_query ("SELECT title FROM sections WHERE title='".$tit."' LIMIT 1"); if (mysql_num_rows ($title_query) > 0) die ("<b>Раздел уже существует !!!</b>"); $res = mysql_query ("INSERT INTO sections (title) VALUES ('".$tit."')"); if ($res) echo "Раздел успешно добавлен !!!"; else echo "Ошибка!!!"; ?>
Andrey5555 mysql_real_escape_string Использование конструкции die при проверке КРАЙНЕ НЕЖЕЛАТЕЛЬНО! Нельзя совать их куда попало.
Как я понял используем stripslashes при выводе, но при обработке mysql_real_escape_string. А почему нежелательно использовать die?
Andrey5555 Как почему? Ну вот представьте. Пишите вы проект какой-то. Модульный. Внутри модуля - всякие проверки. Ну, к примеру такая PHP: <?php $name = $_POST['name']; if (empty ($name)) die ("Имя осталось пустым"); ?> Лучше использовать такое: PHP: <?php $name = $_POST['name']; $err = array(); if (empty ($name)) $err[] = 'имя осталось пустым'; ... ?> А потом уже обрабатывать эти ошибки и выводить их красиво в шаблон.
Понятно)) А на счет mysql_real_escape_string и stripslashes я правильно понял? echo "<td>$title</td>"; Где мне тут использовать stripslashes?
Andrey5555 mysql_real_escape_string используется при добавлении данных в базу. На конечный вывод они никак не влияют. К примеру $title = htmlspecialchars ($_POST['title']); ... INSERT into `table` (title) VALUES ('".mysql_real_escape_string($title)."');
У меня оно добавляет в базу данных с слешми. И когда я вывожу из базы оно отображаеться тоже со слешами. Вот так и тп: \'