Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Срабатывание кода через раз
Форумы портала PHP.SU » » Вопросы новичков » Срабатывание кода через раз

Страниц (1): [1]
 

1. Romarione - 06 Января, 2017 - 22:08:09 - перейти к сообщению
Доброго времени суток.
Код срабатывает через раз.
А именно if(mysql_num_rows($result) < 1 ) .
Данная проблема возникает сразу после регистрации нового пользователя, при переходе с обработчика на главную страницу.
Такое ощущение что в бд еще не успела попасть информация, а запрос уже был подан.
Как такое лечится ?

$row_cat = mysql_fetch_assoc($result); - выдает FALSE. НО должна быть array.
$row_cat2 = mysql_num_rows ($result); - выдает 0. Хотя должна быть 1, т.к. регистрация прошла, в базе есть данные и присутствует сессия!

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. if (isset($_SESSION['login']) && isset($_SESSION['password'])) {
  3.                 $email_1 = $_SESSION['email'];
  4.                 $password_1 = md5($_SESSION['$password']);
  5.                 $login_1 = $_SESSION['login'];
  6.         }
  7.        
  8.         $query = "SELECT * FROM users WHERE login = '$login_1'";
  9.         $result = mysql_query($query) or die ( "ОШИБКА : ".mysql_error() );
  10.         $row_cat = mysql_fetch_assoc($result);
  11.         $row_cat2 = mysql_num_rows ($result);
  12.        
  13.        
  14.        
  15.         if(mysql_num_rows($result) <  1 ) {
  16.                 echo "<center><b><span style='color:red'>Вы не авторизованы! Необходимо авторизоваться, или зарегистрируйтесь если у вас нет логина и пароля!</span></center></b><br>";
  17.                         }
  18.         else {
  19.                 echo "<div align='right'> <span style='color:green'>Вы авторизованы под логином :<b> $login_1 </b></span></div><br>";
  20.                 echo "<div align='right'><html><form action='exit.php'>
  21.                 <input type='submit' VALUE='Выйти'/>
  22.                 </form></html><br></div>";
  23.         }
  24.  
2. Fart - 08 Января, 2017 - 12:22:09 - перейти к сообщению
хотя вы говорите, что все данные есть, но $login_1 - отследите эту переменную.

имеются ли значения?!
3. Romarione - 08 Января, 2017 - 15:51:59 - перейти к сообщению
Fart пишет:
хотя вы говорите, что все данные есть, но $login_1 - отследите эту переменную.

имеются ли значения?!



Спасибо, пошло какое то продвижение..

Если присваиваю значение то все работает.

НО

у меня же есть этот код

if (isset($_SESSION['login']) && isset($_SESSION['password'])) {
$email_1 = $_SESSION['email'];
$password_1 = md5($_SESSION['$password']);
$login_1 = $_SESSION['login'];
}

Ведь я ему говорю, что если есть сессия с логином и с паролем то присваиваем переменная = сессия;
4. Строитель - 08 Января, 2017 - 16:48:27 - перейти к сообщению
Romarione, вы проверяете так :

Если есть $_SESSION['login'] и $_SESSION['password']

а в переменную $email_1 почему-то записываете $_SESSION['email'];

А вы проверяли где-то её существование? Я про $_SESSION['email']
5. Romarione - 08 Января, 2017 - 16:55:09 - перейти к сообщению
Строитель пишет:
Romarione, вы проверяете так :

Если есть $_SESSION['login'] и $_SESSION['password']

а в переменную $email_1 почему-то записываете $_SESSION['email'];

А вы проверяли где-то её существование? Я про $_SESSION['email']


Email я раньше использовал вместо логина. Потом решил авторизовывать по логину.
А строку не не стёр. Но мне кажется это не влияет на результат
6. Строитель - 08 Января, 2017 - 17:11:00 - перейти к сообщению
Romarione пишет:
Но мне кажется
Это не аргумент для программы. Проверять нужно всё.
7. Romarione - 08 Января, 2017 - 17:16:39 - перейти к сообщению
Строитель пишет:
Romarione пишет:
Но мне кажется
Это не аргумент для программы. Проверять нужно всё.


Я проверил - это не влияет никак.
(Добавление)
Наконец таки решил проблему.
$_SESSION["password"] = $password;
Это надо было написать в обработчик при регистрации.
Как же обидно.. Из-за такой фигни потерял 2 дня
8. Quest - 09 Января, 2017 - 10:06:33 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.         $row_cat2 = mysql_num_rows ($result);
  2.        
  3.        
  4.        
  5.         if(mysql_num_rows($result) <  1 ) {


зачем 2 раза делать одно и то же?

В целом код плохой и небезопасный

 

Powered by ExBB FM 1.0 RC1