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
Форумы портала PHP.SU » » Вопросы новичков » Проверка сессии и вывод имени - PHP

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

1. Pavel8897 - 12 Сентября, 2017 - 16:08:49 - перейти к сообщению
Уважаемые форумчане! Есть такая проблема. Не могу вывести FIO при входе на сайт. В БД вся информация находится в одной таблице. ФИО, логин, пароль. Есть скрипт проверки пароля и логина. И при авторизации вывожу логин, но надо что бы вместо логина выводилось FIO из БД.

Код, там где проверка и запись в COOKIE:

PHP:
скопировать код в буфер обмена
  1. $mysqli = new mysqli ("...", "...", "...", "...") or die(mysqli_error());
  2.                 if(isset($_POST['enrbtn'])){
  3.                     if(empty($_POST['login'])){
  4.                         echo '<script>alert("Поле логин не заполненно");</script>';
  5.                     }elseif(empty($_POST['password'])){
  6.                         echo '<script>alert("Пароль не заполнен");</script>';
  7.                     }
  8.                     else{
  9.                         $login= $_POST['login'];
  10.                         $password= $_POST['password'];
  11.                         $query=mysqli_query($mysqli, "SELECT `id` FROM `users` WHERE `Email` = '$login' AND `Password` = '$password'");
  12.                         $result = mysqli_fetch_array($query);  // Формируем переменную с исполнением запроса к БД
  13.                
  14.                 if(empty($result['id'])){
  15.                     echo '<script>alert("Неверные Логин или Пароль");</script>';
  16.                 }else{
  17.                    
  18.                     $_SESSION['password'] = $password;
  19.                     $_SESSION['login'] = $login;
  20.                     $_SESSION['id'] = $result['id'];
  21.                     echo '<div class="log" align="center">'.$_SESSION['login'].'</div>'.'<br>';
  22.                    
  23.                     ?>
  24.                     <script>
  25.                         document.location.href = ('form.php');
  26.                     </script>
  27.                     <?
  28.                     }
  29.                 }
  30.             }


Вывод сессии:

PHP:
скопировать код в буфер обмена
  1. session_start();
  2.         if (isset($_SESSION['login']) && isset($_SESSION['id'])){
  3.             $get = $_SESSION['login'];
  4.             echo '<div class="log2" align="center">'.$get.'</div>'.'<br>';
  5.             ?>
  6.             <script>
  7.                 $('#entline').css('display','none');
  8.             </script>
  9.             <?
  10.         }
2. Vladimir Kheifets - 12 Сентября, 2017 - 20:32:00 - перейти к сообщению
Pavel8897 пишет:
Уважаемые форумчане! Есть такая проблема. Не могу вывести FIO при входе на сайт. В БД вся информация находится в одной таблице. ФИО, логин, пароль. Есть скрипт проверки пароля и логина. И при авторизации вывожу логин, но надо что бы вместо логина выводилось FIO из БД.

Код, там где проверка и запись в COOKIE:

PHP:
скопировать код в буфер обмена
  1. $mysqli = new mysqli ("...", "...", "...", "...") or die(mysqli_error());
  2.                 if(isset($_POST['enrbtn'])){
  3.                     if(empty($_POST['login'])){
  4.                         echo '<script>alert("Поле логин не заполненно");</script>';
  5.                     }elseif(empty($_POST['password'])){
  6.                         echo '<script>alert("Пароль не заполнен");</script>';
  7.                     }
  8.                     else{
  9.                         $login= $_POST['login'];
  10.                         $password= $_POST['password'];
  11.                         $query=mysqli_query($mysqli, "SELECT `id` FROM `users` WHERE `Email` = '$login' AND `Password` = '$password'");
  12.                         $result = mysqli_fetch_array($query);  // Формируем переменную с исполнением запроса к БД
  13.                
  14.                 if(empty($result['id'])){
  15.                     echo '<script>alert("Неверные Логин или Пароль");</script>';
  16.                 }else{
  17.                    
  18.                     $_SESSION['password'] = $password;
  19.                     $_SESSION['login'] = $login;
  20.                     $_SESSION['id'] = $result['id'];
  21.                     echo '<div class="log" align="center">'.$_SESSION['login'].'</div>'.'<br>';
  22.                    
  23.                     ?>
  24.                     <script>
  25.                         document.location.href = ('form.php');
  26.                     </script>
  27.                     <?
  28.                     }
  29.                 }
  30.             }


Вывод сессии:

PHP:
скопировать код в буфер обмена
  1. session_start();
  2.         if (isset($_SESSION['login']) && isset($_SESSION['id'])){
  3.             $get = $_SESSION['login'];
  4.             echo '<div class="log2" align="center">'.$get.'</div>'.'<br>';
  5.             ?>
  6.             <script>
  7.                 $('#entline').css('display','none');
  8.             </script>
  9.             <?
  10.         }


Добрый вечер! Извините, я не увидел запись в COOKIE в коде "там где проверка и запись в COOKIE:"
У Вас значения передаются через сессию и для этого в первом коде должен быть session_start();
перед:
$_SESSION['password'] = $password;
$_SESSION['login'] = $login;
$_SESSION['id'] = $result['id'];
3. Pavel8897 - 13 Сентября, 2017 - 09:18:06 - перейти к сообщению
Vladimir Kheifets пишет:
Добрый вечер! Извините, я не увидел запись в COOKIE в коде "там где проверка и запись в COOKIE:"
У Вас значения передаются через сессию и для этого в первом коде должен быть session_start();
перед:
$_SESSION['password'] = $password;
$_SESSION['login'] = $login;
$_SESSION['id'] = $result['id'];


Спасибо большое! Там стоит сессия выше, не прописал просто.
Проблему решил, но теперь появилась другая, с кодировкой. Вместо русского текста вылезают знаки вопроса. Функция iconv не помогает Недовольство, огорчение
4. Vladimir Kheifets - 13 Сентября, 2017 - 09:51:31 - перейти к сообщению
Pavel8897 пишет:
Спойлер (Отобразить)

Спасибо большое! Там стоит сессия выше, не прописал просто.
Проблему решил, но теперь появилась другая, с кодировкой. Вместо русского текста вылезают знаки вопроса. Функция iconv не помогает Недовольство, огорчение

Доброе утро! У Вас кодировка PHP - UTF-8.
Попробуйте вставить в PHP-код обязательно до <html>(также пробелов и пустых строк не должно быть) cтроку:
PHP:
скопировать код в буфер обмена
  1. ini_set("default_charset", "windows-1251");

или если языков несколько, например, $_GET['sp'] ru,de,en
PHP:
скопировать код в буфер обмена
  1. $ENT=($_GET['sp']=="ru")?"windows-1251":"iso-8859-1";
  2. ini_set("default_charset", $ENT);
5. Pavel8897 - 13 Сентября, 2017 - 13:20:45 - перейти к сообщению
Vladimir Kheifets пишет:
Доброе утро! У Вас кодировка PHP - UTF-8.
Попробуйте вставить в PHP-код обязательно до <html>(также пробелов и пустых строк не должно быть) cтроку:
PHP:
скопировать код в буфер обмена

ini_set("default_charset", "windows-1251");


или если языков несколько, например, $_GET['sp'] ru,de,en
PHP:
скопировать код в буфер обмена

$ENT=($_GET['sp']=="ru")?"windows-1251":"iso-8859-1";
ini_set("default_charset", $ENT);


Спасибо! Но все же не получается! Может такое быть, что нужно поменять кодировку в таблице phpmyadmin? Или что то может ее перебивать?
6. Vladimir Kheifets - 13 Сентября, 2017 - 13:59:04 - перейти к сообщению
Pavel8897 пишет:

Спойлер (Отобразить)


Спасибо! Но все же не получается! Может такое быть, что нужно поменять кодировку в таблице phpmyadmin? Или что то может ее перебивать?


По-опыту. Если в PHP-файле перед первым "<?" есть хотя бы один пробел, то
ini_set("default_charset", "windows-1251") работать не будет.

Проверьте, пожалуйста, есть ли у Вас в PHP:
header("Content-Type: text/html; charset=windows-1251'', true);
и в HTML:
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">

Здесь это работает на PHP7:
https://www[dot]alto-booking[dot]com

Если не поможет, то попробуйте поставить mysqli_set_charset
перед mysqli_query
Удачи!
7. Pavel8897 - 14 Сентября, 2017 - 17:42:47 - перейти к сообщению
Vladimir Kheifets пишет:
По-опыту. Если в PHP-файле перед первым "<?" есть хотя бы один пробел, то
ini_set("default_charset", "windows-1251") работать не будет.

Проверьте, пожалуйста, есть ли у Вас в PHP:
header("Content-Type: text/html; charset=windows-1251'', true);
и в HTML:
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">

Здесь это работает на PHP7:
https://www[dot]alto-booking[dot]com

Если не поможет, то попробуйте поставить mysqli_set_charset
перед mysqli_query
Удачи!


Спасибо огромное! Имя теперь отображается нормально, но вот все остальное превращается в каракули. Попробовал все функции, что Вы подсказали.
8. Vladimir Kheifets - 14 Сентября, 2017 - 20:21:38 - перейти к сообщению
Pavel8897 пишет:
Vladimir Kheifets пишет:
По-опыту. Если в PHP-файле перед первым "<?" есть хотя бы один пробел, то
ini_set("default_charset", "windows-1251") работать не будет.

Проверьте, пожалуйста, есть ли у Вас в PHP:
header("Content-Type: text/html; charset=windows-1251'', true);
и в HTML:
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">

Здесь это работает на PHP7:
https://www[dot]alto-booking[dot]com

Если не поможет, то попробуйте поставить mysqli_set_charset
перед mysqli_query
Удачи!


Спасибо огромное! Имя теперь отображается нормально, но вот все остальное превращается в каракули. Попробовал все функции, что Вы подсказали.


Добрый вечер! Имя выбирается из базы данных.Верно? Откуда берётся остальное, которое превращается в каракули? Покажите, пожалуйста, скриншоты.
Если тексты заданы в php-коде, проверьте установки в редакторе.
Например, PHP Expert Editor есть установки Encoding: ANSI или UTF-8

 

Powered by ExBB FM 1.0 RC1