Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: проблема с сессией
 
 автор: Рэшад   (09.04.2010 в 11:47)   письмо автору
 
 

Вобщем проблем с сессией $_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);

  Ответить  
 
 автор: Balamut182   (09.04.2010 в 11:53)   письмо автору
 
   для: Рэшад   (09.04.2010 в 11:47)
 

вы хотите в $_SESSION['username'] потереть первый символ $login? не понятно что вам нужно, код на который ругается в студию

  Ответить  
 
 автор: Рэшад   (09.04.2010 в 11:56)   письмо автору
 
   для: Balamut182   (09.04.2010 в 11:53)
 

$_SESSION['username']=$login;

вот на эту строчку ругается если так пытаюсь присвоить, ругательство в 1 посте, нет я решил эту проблему тем что дополнительный символ "а" записываю и потом сразуже его стираю, перестаёт ругаться, но не очень элегантно выходит

  Ответить  
 
 автор: Balamut182   (09.04.2010 в 11:58)   письмо автору
 
   для: Рэшад   (09.04.2010 в 11:56)
 

возможно у вас кавычки в $login или еще какая нибудь хрень, экранируйте то, что приходит из формы, лучше распечатайте $login и посмотрите, что в нем

  Ответить  
 
 автор: Рэшад   (09.04.2010 в 12:02)   письмо автору
 
   для: Balamut182   (09.04.2010 в 11:58)
 

с кавычками экспериментировал и одинарные и фигурные и двойные... ок, попробую в $login ничего пока в форму не введёшь ничего

  Ответить  
 
 автор: Balamut182   (09.04.2010 в 12:05)   письмо автору
 
   для: Рэшад   (09.04.2010 в 12:02)
 

попробуйте так
$_SESSION['username'] = htmlspecialchars( substr( trim( $_POST['login'] ), 0, 255 ), ENT_QUOTES );

ну и настройте под себя

  Ответить  
 
 автор: Рэшад   (09.04.2010 в 12:06)   письмо автору
 
   для: Balamut182   (09.04.2010 в 12:05)
 

это всё есть до присваивания, я ведь проверку делаю на данные перед тем как сессию открыть, проверку сделал всё хорошо отображает, нужный введённый логин который прошёл проверку на наличие в базе данных ENT_QUOTES - что творит?

  Ответить  
 
 автор: root   (09.04.2010 в 12:07)   письмо автору
 
   для: Balamut182   (09.04.2010 в 12:05)
 

Parse error: syntax error..
При чем тут значения переменных?

  Ответить  
 
 автор: Balamut182   (09.04.2010 в 13:06)   письмо автору
 
   для: root   (09.04.2010 в 12:07)
 

да, ты прав, root, а проблема точно не в строке
$_SESSION['username']=$login;
обычно такая ошибка появляется, когда переменные неправильно вставляются в строку, давай больше кода

  Ответить  
 
 автор: Trianon   (09.04.2010 в 13:45)   письмо автору
 
   для: Рэшад   (09.04.2010 в 11:56)
 

придется показать несколько строк вокруг этой.

  Ответить  
 
 автор: Рэшад   (09.04.2010 в 14:29)   письмо автору
 
   для: 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)   письмо автору
 
   для: 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)   письмо автору
 
   для: 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
"Пароль или логин не верны";} }

  Ответить  
 
 автор: tvv123456   (09.04.2010 в 14:41)   письмо автору
 
   для: Рэшад   (09.04.2010 в 14:29)
 

Какая-то странная обработка приходящих данных(ниразу не видел.

mysql_real_escape_string() //уже не в моде?



Зачем обрезать символы у пароля и логина? Мы вроде должны работать с тем, что дал нам пользователь. Количество символов можно ограничить в форме и проверять количество этих символов в обработчике(вдруг кто пошел в обход нашей формы) ну и так далее
Только прежде чем в сессию заносить $login нужно почистить от экранирующих слешей.

  Ответить  
 
 автор: Trianon   (09.04.2010 в 15:18)   письмо автору
 
   для: tvv123456   (09.04.2010 в 14:41)
 

>Какая-то странная обработка приходящих данных(ниразу не видел.
от инъекции она не спасает.

>Зачем обрезать символы у пароля и логина? Мы вроде должны работать с тем, что дал нам пользователь.
>Количество символов можно ограничить в форме и проверять количество этих символов в обработчике(вдруг кто пошел в обход нашей формы) ну и так далее

количество символов логина - возможно.
Смысла в ограничении количества символов пароля нет никакого.

>Только прежде чем в сессию заносить $login нужно почистить от экранирующих слешей.
Это как раз выполнено. Даже с избытком.

  Ответить  
 
 автор: neadekvat   (09.04.2010 в 14:46)   письмо автору
 
   для: Рэшад   (09.04.2010 в 14:29)
 

echo "вы удачно зашли $_SESSION['username'], теперь вы можете перейти на другие страницы<BR>";

Заменить на
echo "вы удачно зашли {$_SESSION['username']}, теперь вы можете перейти на другие страницы<BR>";


Но в целом код страшноватый, по-моему..

  Ответить  
 
 автор: Рэшад   (09.04.2010 в 14:57)   письмо автору
 
   для: neadekvat   (09.04.2010 в 14:46)
 

хорошо это учтём только не вижу способа решения проблемы!!!

  Ответить  
 
 автор: root   (09.04.2010 в 15:03)   письмо автору
 
   для: Рэшад   (09.04.2010 в 14:57)
 

на конструкцию if посмотрите внимательнее
<?
...
echo 
"вы удачно зашли {$_SESSION['username']}, теперь вы можете перейти на другие страницы<BR>"

  Ответить  
 
 автор: tvv123456   (09.04.2010 в 15:04)   письмо автору
 
   для: Рэшад   (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
"Пароль или логин не верны";
      } 
}



Чуток получше но косяки все равно есть

  Ответить  
 
 автор: Рэшад   (09.04.2010 в 15:10)   письмо автору
 
   для: tvv123456   (09.04.2010 в 15:04)
 

спасибо буду разбиратся!

  Ответить  
 
 автор: neadekvat   (09.04.2010 в 15:21)   письмо автору
 
   для: Рэшад   (09.04.2010 в 14:57)
 

И для кого я {} жирным выделил?

  Ответить  
 
 автор: tvv123456   (09.04.2010 в 15:23)   письмо автору
 
   для: 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);  
// так как мы потом отдаем логин браузеру


НУ и других неточностей в моем коде наверняка уйма.

  Ответить  
 
 автор: Рэшад   (09.04.2010 в 15:54)   письмо автору
 
   для: tvv123456   (09.04.2010 в 15:23)
 

//Перед заносом логина в сессию лучше действительно сделать так:

$login = htmlspecialchars(stripslashes($login));   // вместо $login = stripslashes($login);  
// так как мы потом отдаем логин браузеру 


вроде у меня так реализовано разве что не после проверки на нажатие выполняется

  Ответить  
 
 автор: tvv123456   (09.04.2010 в 15:59)   письмо автору
 
   для: Рэшад   (09.04.2010 в 15:54)
 

ПО идее htmlspecialchars - нужно выполнять непосредственно перед выводом в браузер, то есть при регистрации и авторизации эту функцию использовать большого смысла нету.
Но если у вас логика построена так что при регистрации данные введенные пользователем преобразуеться при помощи htmlspecialchars, то и при авторизации мы эти данные должны так же преобразовывать, но из-за этого может возникнуть путанница из-за невнимательности, поэтому пользоваться htmlspecialchars - желательно непосредственно при выводе данных в браузер. Также и mysql__escape_string использовать непосредственно перед запросом. Вообщем каждая функция должна быть именно на своем месте, чтобы не вносить путанницы в код

Лично мое мнение:
В БД должно храниться именно то что ввел пользователь, но при выводе из базы в браузер нужно учитывать, что там может храниться что-то нежелательное.
и смотрите зачем 2 раза использовать htmlspecialchars(при регистрации/(записи в базу) и при авторизации) достаточно просто при выводе логина в браузер(например в списке пользователей или когда пользователь оставляет сообщение)

  Ответить  
 
 автор: Рэшад   (09.04.2010 в 21:02)   письмо автору
 
   для: tvv123456   (09.04.2010 в 15:59)
 

всем спасибо, проблема решилась просто нужно было сначала выполнить проверку на нажатую кнопку а потом уже остальной скрипт

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования