Просмотр полной версии : mysql & php
есть такой вывод базы данных
while ($output = mysql_fetch_assoc($result)) {
echo $output["id_msg"].<br />;
;
echo $output["name"].'<br />';
echo $output["city"].'<br />';
echo $output["email"].'<br />';
echo $output["url"]. '<br />';
echo $output["msg"].'<br />';
echo $output["answer"].'<br />'.'<a href="admin/add_answer.php">написать ответ</a><br />'; //наверное тут
echo $output["puttime"].'<br />';
// echo $output["hide"].'<br />';
}
как ПРАВИЛЬНО добавить GET чтобы передать id_msg в add_answer.php чтобы использовать его для связи с таблицей записи (это гостевая книга)
[x26]VOLAND
05.12.2008, 18:43
В текст запроса добавь ' WHERE id_msg=$_GET['id']'
И про фильтрацию не забудь
optimazer
05.12.2008, 18:58
... секунду
нет нет
просто в своей ссылке добавь
<a href="admin/add_answer.php?VAR=$output['id_msg']">написать ответ</a>
а в файле add_answer.php ловишь эту переменную $_GET['VAR']
вместо VAR как ты понимаешь любое имя переменной написать можно!
______
параметры get передаются после разделителя "?" парами переменная=значение разделенные символом "&"
пример:
<a href="www.lll.ru?var1=zn1&var2=zn2"></a>
strip_tags() - вырезает теги HTML и PHP из строки.
htmlspecialchars() — конвертирует только специальные символы (’&’, ‘”‘, ”’, ‘<’ и ‘>’) в HTML сущности (’&’, ‘"’…). Используется для фильтрации вводимых пользователем данных для защиты от XSS-атак.
htmlentities() - конвертирует все символы в строке (кроме букв) в мнемоники HTML. Используется для защиты от XSS, являясь более гибким аналогом htmlspecialchars.
stripslashes() - удаляет заэкранированные символы (после преобразования в сущности предыдущими функциями их незачем экранировать). Обычно используется в связке с проверочной функцией get_magic_quotes_gpc(), показывающей текущую установку конфигурации magic_quotes_gpc.
mysql_real_escape_string - мнемонизирует специальные символы в строке для использования в операторе SQL с учётом текущего набора символов в кодировке соединения. Иными словами, функция превращает любую строку в правильную и безопасную для MySQL-запроса. Используется для очистки всех данных, передающихся в MySQL-запрос для защиты от SQL-инъекций.
$id=strip_tags(htmlentities($_GET['id']));
......' WHERE id_msg='.$id;
optimazer, твой запрос sql уязвим!
optimazer
05.12.2008, 19:27
2eLWAux
спс
_______
тогда исправляюсь
перед использованием переданного параметра отфильтровать всякую ересь
$_GET=array_map('htmlspecialchars',$_GET);
$_GET=array_map('strip_tags',$_GET);
$_GET=array_map('mysql_escape_string',$_GET);
для удобства в случае если передается несколько параметров
можно работать с ними как с массивом $_GET
не проверяя каждый параметр по отдельности
optimazer Эт типа, давайте просто так, ради смеха испортим весь массив $_GET
eLWAux Тож ниче так, забавно получится, что вы собираетесь убрать strip_tags после того, как преобразовали <> в сущности?
Так как ID у автора скорее всего число, то достаточно делать запрос:
mysql_query("SELECT * FROM table WHERE id='".intval($_GET['id'])."'"); Все, скули не будет, а вот для результата, лучше будет все же использовать array_map('htmlspecialchars',$output);
Всем читать - http://forum.antichat.ru/thread30641.html
optimazer
06.12.2008, 16:02
2Gifts а почему испортим то? =) ты часто спец.символы get-ом передаешь? =))
по хорошему нада все данные на валидность проверять
а если id не число, а генерированная символьная последовательность?
optimazer ссылка дадена просто для красоты наверн. Если символьная - mysql_real_escape_string()
Не поверишь, гетом можно передать что угодно, а как часто - это уже дело десятое. Может я хочу md5 не в хекс строке передать?
optimazer
06.12.2008, 16:26
2Gifts
чтобы охватить весь спектр угроз безопасности нужно проверять на валидность данных весь массив get
GreenBear
06.12.2008, 16:37
ничего не нужно проверять весь $_GET, нужно проверять то, что нужно.
Используй жесткое приведение типов:
$id = (int)$_GET['id'];
Все лишнее, кроме цифр отфильтруется. Для отвода лишних глаз, ставь в начало скрипта error_reporing(0);
Советую почитать вот это про анти-sql-инъекции: https://forum.antichat.ru/thread30641.html
$id = (int)$_GET['id'];
Это пропустит отрицательные и нулевой id.
Хорошо - так:
$id=isset($_GET['id']) && !is_array($_GET['id']) ? $_GET['id'] : 0;
if(!preg_match("/^\d+$/",$id) || !$id)
die('Недопустимый ID');
vikseriq
06.12.2008, 21:32
регулярки рулят: проверяй так:
$f="123"; // число от 1 до 99999
if (!ereg("^([0-9]{1,5})$",$f)) {
echo 'Недопустимый ID';
}
d_x $id=intval($id)>0 ? intval($id) : 1;
vikseriq Тру )))))
vikseriq, про ereg уже много раз говорилось, что функция уязвима к нулевому байту при magic_quotes=off.
Лучше всего - preg_match, она помимо этого быстрее ereg.
vikseriq
07.12.2008, 00:12
Никто не запрещает обрезать нульбайт ) Мы тут не все гуру, а мой вариант для начинающих само то - просто и легко расширяемо (напр. , проверка на wmz кошель - полминуты дела).
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot