PHP и с чем его едят....

Dre.hz

Active Member
fly, тогда ищите баг методически. Идентификатор сессии можно передать либо через GET/POST, либо через куки. Убедитесь, что он сохраняется после первого захода на страницу и передается при последюующем (можно посмотреть дамп HTTP-заголовков).
Дальше уже в зависимости от полученного результата — если он не сохраняется в браузере между двумя запросами, развивайте это направление. Если же он не передается в браузер при первом запросе, смотрите phpinfo на сервере.

Правильный вопрос здесь — как работают сессии? А зная, как они работают, можно и отследить, где проблема.
 

dreamer

Member
Есть скрипт:

PHP:
if(empty($user_num))	{
	$_SESSION['user_num']=rand(111111111,999999999);
	$user_num=$_SESSION['user_num'];
}	else	{
		echo $user_num;
}
Вроде все просто. Зашел человек на сайт - присвоили сессию с рендомным числом.

Далее, если переменная $user_num не пустая - вывожу эту самую переменную с данными сессии, но данных никаких нет. Т.е. в данном случае $user_num ничего не выводит.

Но если отдельно, вне проверки вывести, то пишет число, допустим пишет: 1234567

А теперь сам вопрос. А точнее два. Почему $user_name не выводит данных в моей конструкции и почему при обновлении окна браузера, меняется число "1234567", которое занесено в сессию! При этом на локальном хосте она не меняется.
Попробуйте сначала сделать
PHP:
	$user_num=$_SESSION['user_num'];
а потом уж работать с переменной.
 

[fly]

Sweet orange
dreamer, уже все работает, но спасибо за внимание к моему вопросу.

Есть еще один вопрос. Есть таблица с полями:

| id | category_id | pod_category_id | product_name | price|

В поле `price` только числа без указания валюты. Делаю запрос для вывода товара с сортировкой по цене:

PHP:
$q=mysql_query("SELECT * FROM `products` WHERE(`pod_category_id`='$pod_category_id') ORDER BY price DESC");
Сортировка работает, но не так как нужно. Ставлю в запросе ASC, товар меняет позиции, но сортируется явно не по цене.

Теперь вопрос. Почему сортирует не правильно?
 

[fly]

Sweet orange
Dre.hz, да, изначально туда еще и указатель валюты писался. Но теперь не могу поменять на INT:(
 

[fly]

Sweet orange
Ребятки, а ну подскажите. Допустим есть форма:
HTML:
<form action='login.php' method='post'>
E-mail: <input type='text' name='emailUser'><br />
Пароль: <input type='password' name='passwordUser'><br />
<input type=submit name=submit value=' войти '><br />
<?php=$message;?>
<form>
А дальше есть обработчик этой формы:

PHP:
if (isset($_POST['submit'])) {
	$emailUser=$_POST['emailUser'];
	$passwordUser=md5($_POST['passwordUser']);
	// дальше идет проверка на вводимые данные, аля "пустые поля", "кол-во воодимых символов", "корректность вводимого e-mail'a"
	// и дальше делаю запрос в базу
	include "config.php";
	$q=mysql_query("SELECT * FROM `users` WHERE(`emailUser`='$emailUser')");
	$r=mysql_fetch_array($q);
		if ($r['emailUser']!=$emailUser or $r['passwordUser']!=$passwordUser) { $message="Пароль или e-mail введен не верно!"; }
			else {	
				$_SESSION['user']="yes";	
				$_SESSION['idUser']=$r['idUser'];
				echo "<script type=\"text/javascript\"> window.location.href = \"login.php\" </script>";
			}
	mysql_close($link);
} else;
Но учитывая ошибки, решил обратиться к
PHP:
mysql_real_escape_string()
Но думается мне, что ее одной не достаточно для того, чтобы максимально обезопасить запрос. Поэтому еще решил преобразовать html функцией
PHP:
htmlentities()
В итоге обработка получилась такого вида:

PHP:
$emailUser=mysql_real_escape_string(htmlentities($_POST['emailUser']));
$passwordUser=mysql_real_escape_string(htmlentities(md5($_POST['passwordUser'])));
Теперь сам вопрос: на сколько правильная и безопасная обработка? При том, что запрос остается прежним
PHP:
$q=mysql_query("SELECT * FROM `users` WHERE(`emailUser`='$emailUser')");
 
Останнє редагування:

Dre.hz

Active Member
PHP:
$passwordUser=mysql_real_escape_string(htmllentities(md5($_POST['passwordUser'])));
Теперь сам вопрос: на сколько правильная и безопасная обработка?
С паролем - крайне непрофессионально. Как вы не изощряйтесь, но md5() от любой строки вернет вам 32 символа, в составе которых могут быть только цифры 0-9 и буквы a-f. Как раз md5() это тот случай, когда можно прямо вставлять в SQL-запрос. Почитайте-осмыслите еще раз, от чего именно надо защищаться, вставляя данные в SQL-запрос и как «вредоносный код» модет туда просочиться.

Имейл логичнее валидировать регулярным выражением — убьёте несколько зайцев сразу.
 
Зверху