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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: выборка по базе

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: ошибка , help
podenik
Отправлено: 29 Мая, 2015 - 22:22:32
Post Id


Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Май 2015  


Помог: 0 раз(а)




пытаюсь зделать форму входа . регистрация работает
mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in ../account.php on line 74
Cannot modify header information - headers already sent by (output started at ../account.php:74) in ../index.php on line 41


74 строка
PHP:
скопировать код в буфер обмена
  1. $Row = mysqli_fetch_assoc(mysqli_query($CONNECT, "SELECT 'password','active' FROM 'users' WHERE 'login' = '$_POST[login]'"));


41 строка
PHP:
скопировать код в буфер обмена
  1. exit(header('Location: '.$_SERVER['HTTP_REFERER']));
 
 Top
Ts.Saltan
Отправлено: 29 Мая, 2015 - 22:51:41
Post Id



Посетитель


Покинул форум
Сообщений всего: 384
Дата рег-ции: Дек. 2013  
Откуда: Belarus


Помог: 22 раз(а)




mysqli_query может вернуть false в случае ошибки и тогда возникает первый warning.
Нужно дополнительная проверка того, что вернёт mysqli_query.

header'ы должны отправляться перед любым выводом в браузер
А получается, что перед хедером уже отправлен текст первой ошибки.
Решите первую ошибку, пропадёт вторая.
 
 Top
podenik
Отправлено: 30 Мая, 2015 - 09:40:51
Post Id


Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Май 2015  


Помог: 0 раз(а)




Спасибо ,
а чему должна ыть дополнительная проверка для mysqli_query.
(Добавление)
Спасибо ,
а чему должна ыть дополнительная проверка для mysqli_query.

правильно ли будет так
if ($mysqli->errno) {
die('Select Error (' . $mysqli->errno . ') ' . $mysqli->error);
 
 Top
Ts.Saltan
Отправлено: 30 Мая, 2015 - 10:16:59
Post Id



Посетитель


Покинул форум
Сообщений всего: 384
Дата рег-ции: Дек. 2013  
Откуда: Belarus


Помог: 22 раз(а)




podenik пишет:
а чему должна ыть дополнительная проверка для mysqli_query

Если эта функция вернёт false, mysqli_fetch_assoc вызывать не надо
(Добавление)
podenik пишет:
правильно ли будет так

Нет, не нужно мешать объекты и процедурный стиль
 
 Top
podenik
Отправлено: 30 Мая, 2015 - 13:36:00
Post Id


Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Май 2015  


Помог: 0 раз(а)




наставь на путль истенный ., плизз. чето я застрял
 
 Top
Bio man
Отправлено: 30 Мая, 2015 - 13:48:48
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


Помог: 52 раз(а)




Ts.Saltan пишет:
Нет, не нужно мешать объекты и процедурный стиль
Одно другому не мешает. Судя по всему автор пишет именно в процедурном стиле.

Как вариант, бросить исключение и его поймать.
PHP:
скопировать код в буфер обмена
  1. try {
  2.     $login = mysqli_real_escape_string($CONNECT, $_POST['login']);
  3.     $result = mysqli_query($CONNECT, "SELECT `password`,`active` FROM `users` WHERE `login` = '$login'");
  4.  
  5.     if($result === false) {
  6.         throw new Exception('Произошла ошибка: ' . mysqli_error($CONNECT));
  7.     }
  8.  
  9.     $Row = mysqli_fetch_assoc($result);
  10.  
  11.     header('Location: ' . @$_SERVER['HTTP_REFERER']);
  12.     exit;
  13. } catch (Exception $e) {
  14.     echo $e->getMessage();
  15. }
 
 Top
podenik
Отправлено: 30 Мая, 2015 - 14:27:38
Post Id


Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Май 2015  


Помог: 0 раз(а)




в таком случаэ нету проверки на подлиность логина пароля, их существования , просто процедура проваливается на страницу акаунта и усе
(Добавление)
а после установки проверки вот
Fatal error: Cannot use object of type mysqli_result as array in S:\home\podenik\www\php\account.php on line 77
(Добавление)
PHP:
скопировать код в буфер обмена
  1. else if ($Module == 'login' and $_POST['enter']) {
  2. $_POST['login'] = FormChars($_POST['login']);
  3. $_POST['password'] = GenPass(FormChars($_POST['password']), $_POST['login']);
  4. if (!$_POST['login'] or !$_POST['password'] ) MessageSend(1, 'Невозможно обработать форму.');
  5.  
  6.  
  7. $login = mysqli_real_escape_string($CONNECT, $_POST['login']);
  8.     $result = mysqli_query($CONNECT, "SELECT `password`,`active` FROM `users` WHERE `login` = '$login'");
  9.     if ($result ['password'] != $_POST['password']) MessageSend(1, 'Не верный логин или пароль.');
  10.     if($result === false) {
  11.         throw new Exception('Произошла ошибка: ' . mysqli_error($CONNECT));
  12.     }
  13.  
  14.     $Row = mysqli_fetch_assoc($result);
  15.  
  16.  
  17.    exit(header('Location:/profile'));

(Добавление)
Сори тупанул , разобрался (идийот Радость )
PHP:
скопировать код в буфер обмена
  1. else if ($Module == 'login' and $_POST['enter']) {
  2. $_POST['login'] = FormChars($_POST['login']);
  3. $_POST['password'] = GenPass(FormChars($_POST['password']), $_POST['login']);
  4. if (!$_POST['login'] or !$_POST['password'] ) MessageSend(1, 'Невозможно обработать форму.');
  5. $login = mysqli_real_escape_string($CONNECT, $_POST['login']);
  6.     $result = mysqli_query($CONNECT, "SELECT `password`,`active` FROM `users` WHERE `login` = '$login'");
  7.     if($result === false) {
  8.         throw new Exception('Произошла ошибка: ' . mysqli_error($CONNECT));}
  9.     $Row = mysqli_fetch_assoc($result);
  10.     if ( $Row['password'] != $_POST['password']) MessageSend(1, 'Аля УлЮ');
  11.  
  12.    exit(header('Location:/profile'));
  13.  
  14.  
  15.  

(Добавление)
спс Bio man
(Добавление)
вот только как терь сесии добавить
(Добавление)
тоже через
PHP:
скопировать код в буфер обмена
  1.  $login = mysqli_real_escape_string($CONNECT, $_POST['login']);
  2.     $result = mysqli_query($CONNECT, "SELECT `password`,`active` FROM `users` WHERE `login` = '$login'");
  3.  
  4.     if($result === false) {
  5.         throw new Exception('Произошла ошибка: ' . mysqli_error($CONNECT));
 
 Top
Bio man
Отправлено: 30 Мая, 2015 - 15:08:11
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


Помог: 52 раз(а)




podenik пишет:
в таком случаэ нету проверки на подлиность логина пароля, их существования
так добавь.

Я показал стиль написания, исправил банальные ошибки, в том числе sql инъекцию, а дальше сам думай, что делаешь не так. Мне даже тыкать пальцем не хочется, настолько это банально.
Документацию в руки и пошёл учить, в документации всё есть.
http://php.net/manual/ru/mysqli.query.php
(Добавление)
Ну молодец. Сессии? Запускай в начале скрипта (session_start()) и используй.
 
 Top
podenik
Отправлено: 30 Мая, 2015 - 15:10:13
Post Id


Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Май 2015  


Помог: 0 раз(а)




Спасибо , будем учиться
(Добавление)
нет как сесию запускать я понял
(Добавление)
а как выбарку на сесию подключать , мне еще предстоит додумать, спасибо
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB