|
автор: новичек (29.09.2005 в 16:03) |
|
| извините что без названия, если что назовите икак нибудь и подправте.
вопрос вот в чем, к примеру передается из формуы переменая $_POST['user'], ее обязательно надо так сказать переопределять вот так
$user=$_POST['user'];
что бы зделать выборку из базы или можно писать так
where username='$_POST[user]'
надеюсь понятно обьяснил что хочу узнать. | |
|
|
|
|
|
|
|
для: новичек
(29.09.2005 в 16:03)
| | $_POST это обычный массив, а соответственно $_POST['user'] это элемент массива. А сэлементами массивов можно поступать как с обычными переменными.
То есть where username='$_POST[user]' вполне возможен, только лучше сделать примерно следующее:
$user=htmlentities(addslashes(trim($_POST['user'])));
|
Дабы хоть немного обезопасить себя от злобных хакеров.
А потом при выборке из базы провести обратное преобразование | |
|
|
|
|
автор: новичек (29.09.2005 в 16:53) |
|
|
для: Axxil
(29.09.2005 в 16:29)
| | понятно, спасибо. | |
|
|
|
|
|
|
|
для: новичек
(29.09.2005 в 16:03)
| | Можно, только не шибко удобно: если у вас переменная из 2-3 букв и встречается в каждой строчке - замучаетесь вставлять всю эту конcтрукцию... Да, ее еще и из кавычек придется выделять:
$sql="SELECT * FROM table WHERE ".$_POST['user']." ORDR BY и т.д.";
|
| |
|
|
|
|
|
|
|
для: новичек
(29.09.2005 в 16:03)
| | Что-то я не понимаю вас всех, народ ! Зачем обращаться к переданной переменной через ж... т.е. массив $_POST, если каждая переданная переменная автоматически объявляется своим именем ??! Т.е. допустим, я передаю пременную sentvar, так она в скрипте и будет доступна просто как переменная $sentvar ! Проверьте сами:
<?
if(!isset($sentvar)) {
echo "<form action=\"$PHP_SELF\" method=\"post\">";
echo "<input type=\"text\" name=\"sentvar\" value=\"1\"><br>";
echo "<input type=\"Submit\" value=\"Отправить\"></form>";
} else {
echo "Переменная \$sentvar успешно передана скрипту и имеет значение: $sentvar";
}
?>
|
Зачем грузить код обращением к массиву, если всё гораздо проще ?! | |
|
|
|
|
|
|
|
для: DDK
(29.09.2005 в 17:10)
| | потому что в php5 рекомендовано register globals ставить off...дабы увеличить безопасность | |
|
|
|
|
|
|
|
для: DDK
(29.09.2005 в 17:10)
| | Всвязи с этим возник побочный вопрос.
Не в первый раз вижу запись типа
<form action=\"$PHP_SELF\" method=\"post\">
|
Не понимаю нафига $PHP_SELF ?
Форма и так в ту же страницу вернётся если вообще не указывать action
Или тут есть хитрый смысл? | |
|
|
|
|
автор: новичек (29.09.2005 в 19:24) |
|
|
для: Axxil
(29.09.2005 в 17:31)
| | по поводу вот этого
$sql="SELECT * FROM table WHERE ".$_POST['user']." ORDR BY и т.д.";
|
хочу спросить, зачем городить вот этот огород ".$_POST['user']." когда все прекрасно работает вот так
$sql="SELECT * FROM table WHERE '$_POST[user]' ORDR BY и т.д.";
|
так же по поводу этого
<?
if(!isset($sentvar)) {
echo "<form action=\"$PHP_SELF\" method=\"post\">";
echo "<input type=\"text\" name=\"sentvar\" value=\"1\"><br>";
echo "<input type=\"Submit\" value=\"Отправить\"></form>";
} else {
echo "Переменная \$sentvar успешно передана скрипту и имеет значение: $sentvar";
}
?>
|
к чему городить слеши когда вот так проще и читается удобнее
<?
if(!isset($sentvar)) {
?>
<form action="$PHP_SELF" method="post">
<input type="text" name="sentvar" value="1"><br>
<input type="Submit" value="Отправить"></form>
<?
} else {
echo "Переменная \$sentvar успешно передана скрипту и имеет значение: $sentvar";
}
?>
|
| |
|
|
|
|
|
|
|
для: новичек
(29.09.2005 в 19:24)
| | Вы правы, не зачем... правда иногда встречаются двумерные массивы $_POST[user][0] и возникает потребность в динамических индексах $_POST[user][$i] - вот такие конструкции по второму варианту уже не пройдут. | |
|
|
|
|
автор: новичек (29.09.2005 в 19:46) |
|
|
для: cheops
(29.09.2005 в 19:28)
| | ок.
спасибо.
ну про двумерные массивы я речь сейчас и не веду. | |
|
|
|
|
|
|
|
для: новичек
(29.09.2005 в 19:24)
| | И всё равно не понятно зачем PHP_SELF?
что касается суперглобальных массивов
$sentvar в случае без них будет восприниматься как переменная метода GET так и как переменная метода POST т.е у два раза больше возможностей для злоумышленников. | |
|
|
|
|
|
|
|
для: axxil
(29.09.2005 в 20:44)
| | Тоже не зачем, единственное оправдание - увеличение читабельности, вроде как без action не очень сразу видно что куда будет отправляться - если прописать явно, сомнений не остаётся. Но это действительно лишняя лазейка... | |
|
|
|
|
|
|
|
для: DDK
(29.09.2005 в 17:10)
| | Проще, но код более уязвим для взлома, поэтому со временем прямой передачи в переменные в PHP вообще не будет - всё будет на суперглобальных переменных. Подробности в теме по ссылке [url]://www.softtime.ru/forum/read.php?id_forum=1&id_theme=1309[/url] | |
|
|
|
|
автор: новичек (30.09.2005 в 08:07) |
|
|
для: cheops
(29.09.2005 в 19:21)
| | и еще один вопросик, может немного не в тему.
как прописать, что бы проверилось что данные пришли имено с этого файла а не откуда то еще, вообще с другого хоста ? | |
|
|
|
|
|
|
|
для: новичек
(30.09.2005 в 08:07)
| | Можно по рефферер - просто, но ненадежно.
А можно передать идентификатор сессии, но тогда вы проверите не конкретный файл, а только хост. | |
|
|
|
|
|
|
|
для: Loki
(30.09.2005 в 10:52)
| | Да, можно прошить через HTML-форму сессию, как это описывается в статье Безопасное программирование на PHP | |
|
|
|