|
|
|
| Вобщем проблем с сессией $_SESSION['username']=$login; где $login вводится с клавиатуры, и запрос идёт только после нажатой кнопки выводит ошибку
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING
в принципе я нашёл решение проблемы но хочется что то элегантнее потому что мне кажется это извращение, а вот само решение:
$_SESSION['username']="a".$login;
substr_replace($_SESSION['username'], '', 1, 1);
|
| |
|
|
|
|
|
|
|
для: Рэшад
(09.04.2010 в 11:47)
| | вы хотите в $_SESSION['username'] потереть первый символ $login? не понятно что вам нужно, код на который ругается в студию | |
|
|
|
|
|
|
|
для: Balamut182
(09.04.2010 в 11:53)
| |
$_SESSION['username']=$login;
|
вот на эту строчку ругается если так пытаюсь присвоить, ругательство в 1 посте, нет я решил эту проблему тем что дополнительный символ "а" записываю и потом сразуже его стираю, перестаёт ругаться, но не очень элегантно выходит | |
|
|
|
|
|
|
|
для: Рэшад
(09.04.2010 в 11:56)
| | возможно у вас кавычки в $login или еще какая нибудь хрень, экранируйте то, что приходит из формы, лучше распечатайте $login и посмотрите, что в нем | |
|
|
|
|
|
|
|
для: Balamut182
(09.04.2010 в 11:58)
| | с кавычками экспериментировал и одинарные и фигурные и двойные... ок, попробую в $login ничего пока в форму не введёшь ничего | |
|
|
|
|
|
|
|
для: Рэшад
(09.04.2010 в 12:02)
| | попробуйте так
$_SESSION['username'] = htmlspecialchars( substr( trim( $_POST['login'] ), 0, 255 ), ENT_QUOTES );
|
ну и настройте под себя | |
|
|
|
|
|
|
|
для: Balamut182
(09.04.2010 в 12:05)
| | это всё есть до присваивания, я ведь проверку делаю на данные перед тем как сессию открыть, проверку сделал всё хорошо отображает, нужный введённый логин который прошёл проверку на наличие в базе данных ENT_QUOTES - что творит? | |
|
|
|
|
|
|
|
для: Balamut182
(09.04.2010 в 12:05)
| | Parse error: syntax error..
При чем тут значения переменных? | |
|
|
|
|
|
|
|
для: root
(09.04.2010 в 12:07)
| | да, ты прав, root, а проблема точно не в строке
$_SESSION['username']=$login;
| обычно такая ошибка появляется, когда переменные неправильно вставляются в строку, давай больше кода | |
|
|
|
|
|
|
|
для: Рэшад
(09.04.2010 в 11:56)
| | придется показать несколько строк вокруг этой. | |
|
|
|
|
|
|
|
для: Trianon
(09.04.2010 в 13:45)
| | вот пожалуйста
<?php $login=substr($_POST['login'],0,30);
$login = htmlspecialchars(stripslashes($login));
$password=substr($_POST['password'],0,30);
$password = htmlspecialchars(stripslashes($password));
$vhod = $_POST['plus'];
if(isset($vhod)) {$link=mysql_connect("localhost","pma");
mysql_select_db("datab",$link);
$result=mysql_query("SELECT login, password FROM reg WHERE login='$login' and password='$password'");
if(mysql_num_rows($result)>0)
{
session_start();
$_SESSION['username']=$login;
echo "вы удачно зашли $_SESSION['username'], теперь вы можете перейти на другие страницы<BR>";
echo "<a href=index2.php> Калькулятор</a><br>";
echo "<a href=news.php> Будущая лента новостей</a>"; }
else { echo"Пароль или логин не верны";} }
|
| |
|
|
|
|
|
|
|
для: Trianon
(09.04.2010 в 13:45)
| | вот пожалуйста
<?php $login=substr($_POST['login'],0,30);
$login = htmlspecialchars(stripslashes($login));
$password=substr($_POST['password'],0,30);
$password = htmlspecialchars(stripslashes($password));
$vhod = $_POST['plus'];
if(isset($vhod)) {$link=mysql_connect("localhost","pma");
mysql_select_db("datab",$link);
$result=mysql_query("SELECT login, password FROM reg WHERE login='$login' and password='$password'");
if(mysql_num_rows($result)>0)
{
session_start();
$_SESSION['username']=$login;
echo "вы удачно зашли $_SESSION['username'], теперь вы можете перейти на другие страницы<BR>";
echo "<a href=index2.php> Калькулятор</a><br>";
echo "<a href=news.php> Будущая лента новостей</a>"; }
else { echo"Пароль или логин не верны";} }
|
| |
|
|
|
|
|
|
|
для: Trianon
(09.04.2010 в 13:45)
| | вот пожалуйста, случайно запостил извиняюсь
<?php $login=substr($_POST['login'],0,30);
$login = htmlspecialchars(stripslashes($login));
$password=substr($_POST['password'],0,30);
$password = htmlspecialchars(stripslashes($password));
$vhod = $_POST['plus'];
if(isset($vhod)) {$link=mysql_connect("localhost","pma");
mysql_select_db("datab",$link);
$result=mysql_query("SELECT login, password FROM reg WHERE login='$login' and password='$password'");
if(mysql_num_rows($result)>0)
{
session_start();
$_SESSION['username']=$login;
echo "вы удачно зашли $_SESSION['username'], теперь вы можете перейти на другие страницы<BR>";
echo "<a href=index2.php> Калькулятор</a><br>";
echo "<a href=news.php> Будущая лента новостей</a>"; }
else { echo"Пароль или логин не верны";} }
|
| |
|
|
|
|
|
|
|
для: Рэшад
(09.04.2010 в 14:29)
| | Какая-то странная обработка приходящих данных(ниразу не видел.
mysql_real_escape_string() //уже не в моде?
|
Зачем обрезать символы у пароля и логина? Мы вроде должны работать с тем, что дал нам пользователь. Количество символов можно ограничить в форме и проверять количество этих символов в обработчике(вдруг кто пошел в обход нашей формы) ну и так далее
Только прежде чем в сессию заносить $login нужно почистить от экранирующих слешей. | |
|
|
|
|
|
|
|
для: tvv123456
(09.04.2010 в 14:41)
| | >Какая-то странная обработка приходящих данных(ниразу не видел.
от инъекции она не спасает.
>Зачем обрезать символы у пароля и логина? Мы вроде должны работать с тем, что дал нам пользователь.
>Количество символов можно ограничить в форме и проверять количество этих символов в обработчике(вдруг кто пошел в обход нашей формы) ну и так далее
количество символов логина - возможно.
Смысла в ограничении количества символов пароля нет никакого.
>Только прежде чем в сессию заносить $login нужно почистить от экранирующих слешей.
Это как раз выполнено. Даже с избытком. | |
|
|
|
|
|
|
|
для: Рэшад
(09.04.2010 в 14:29)
| |
echo "вы удачно зашли $_SESSION['username'], теперь вы можете перейти на другие страницы<BR>";
|
Заменить на
echo "вы удачно зашли {$_SESSION['username']}, теперь вы можете перейти на другие страницы<BR>";
|
Но в целом код страшноватый, по-моему.. | |
|
|
|
|
|
|
|
для: neadekvat
(09.04.2010 в 14:46)
| | хорошо это учтём только не вижу способа решения проблемы!!! | |
|
|
|
|
|
|
|
для: Рэшад
(09.04.2010 в 14:57)
| | на конструкцию if посмотрите внимательнее
<?
...
echo "вы удачно зашли {$_SESSION['username']}, теперь вы можете перейти на другие страницы<BR>";
|
| |
|
|
|
|
|
|
|
для: Рэшад
(09.04.2010 в 14:57)
| |
<?php
//$login=substr($_POST['login'],0,30); делайте проверку на соответствие >30 символам
//$login = htmlspecialchars(stripslashes($login)); - убрать
//$password=substr($_POST['password'],0,30); делайте проверку на соответствие >30 символам
//$password = htmlspecialchars(stripslashes($password)); - убрать
$login=$_POST['login'];
$password=$_POST['password'];
if(isset($_POST['plus'])) {
$link=mysql_connect("localhost","pma","password");
mysql_select_db("datab",$link);
if(!get_magic_qoutes_gpc)
{
$login = mysql_real_escape_string($login);
$password = mysql_real_escape_string($password);
}
$result=mysql_query("SELECT login FROM reg WHERE login='$login' AND password='$password'");
if(mysql_num_rows($result) == 1)
{
session_start();
$login = stripslashes($login);
$_SESSION['username']=$login;
echo "вы удачно зашли".$_SESSION['username'].", теперь вы можете перейти на другие страницы<BR>";
echo "<a href=index2.php> Калькулятор</a><br>";
echo "<a href=news.php> Будущая лента новостей</a>";
}
else
{
echo"Пароль или логин не верны";
}
}
|
Чуток получше но косяки все равно есть | |
|
|
|
|
|
|
|
для: tvv123456
(09.04.2010 в 15:04)
| | спасибо буду разбиратся! | |
|
|
|
|
|
|
|
для: Рэшад
(09.04.2010 в 14:57)
| | И для кого я {} жирным выделил? | |
|
|
|
|
|
|
|
для: neadekvat
(09.04.2010 в 15:21)
| | Да кстати :)))
Но вариант со стыковкой тоже покатит
Я тут просто некоторые некрасивости подправил и по привычке прописал "df".$we."dsfa"
Вот еще кстати:
$login=$_POST['login'];
$password=$_POST['password'];
//эти строки поместить надо бы после:
if(isset($_POST['plus'])) {
|
и вот еще:
//Перед заносом логина в сессию лучше действительно сделать так:
$login = htmlspecialchars(stripslashes($login)); // вместо $login = stripslashes($login);
// так как мы потом отдаем логин браузеру
|
НУ и других неточностей в моем коде наверняка уйма. | |
|
|
|
|
|
|
|
для: tvv123456
(09.04.2010 в 15:23)
| |
//Перед заносом логина в сессию лучше действительно сделать так:
$login = htmlspecialchars(stripslashes($login)); // вместо $login = stripslashes($login);
// так как мы потом отдаем логин браузеру
|
вроде у меня так реализовано разве что не после проверки на нажатие выполняется | |
|
|
|
|
|
|
|
для: Рэшад
(09.04.2010 в 15:54)
| | ПО идее htmlspecialchars - нужно выполнять непосредственно перед выводом в браузер, то есть при регистрации и авторизации эту функцию использовать большого смысла нету.
Но если у вас логика построена так что при регистрации данные введенные пользователем преобразуеться при помощи htmlspecialchars, то и при авторизации мы эти данные должны так же преобразовывать, но из-за этого может возникнуть путанница из-за невнимательности, поэтому пользоваться htmlspecialchars - желательно непосредственно при выводе данных в браузер. Также и mysql__escape_string использовать непосредственно перед запросом. Вообщем каждая функция должна быть именно на своем месте, чтобы не вносить путанницы в код
Лично мое мнение:
В БД должно храниться именно то что ввел пользователь, но при выводе из базы в браузер нужно учитывать, что там может храниться что-то нежелательное.
и смотрите зачем 2 раза использовать htmlspecialchars(при регистрации/(записи в базу) и при авторизации) достаточно просто при выводе логина в браузер(например в списке пользователей или когда пользователь оставляет сообщение) | |
|
|
|
|
|
|
|
для: tvv123456
(09.04.2010 в 15:59)
| | всем спасибо, проблема решилась просто нужно было сначала выполнить проверку на нажатую кнопку а потом уже остальной скрипт | |
|
|
|