PHP.SU

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


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

> Без описания
DoctorMED
Отправлено: 17 Мая, 2017 - 00:21:45
Post Id


Новичок


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


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




не могу понять почему сразу после скрипта php-авторизации html код перестает выполняться (на диве "контент" все стопориться) :

index.php
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. if(session_id() == '') {
  3. }
  4. ?>
  5. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
  6. "http://www.w3.org/TR/html4/strict.dtd">
  7. <html>
  8. <head>
  9.     <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  10.  
  11.     <title>Мій сайт</title>
  12.     <link href="css/style.css" type="text/css" rel="stylesheet">
  13.     <link href="https://fonts.googleapis.com/css?family=Gabriela" rel="stylesheet" type="text/css">
  14.     <link href='https://fonts.googleapis.com/css?family=Roboto+Slab:400,100,300,700|Lato:400,100,300,700,900' rel='stylesheet' type='text/css'>
  15.     <link rel="stylesheet" href="css/animate.css" type="text/css">
  16. </head>
  17. <body>
  18.     <div id="wrapper">
  19.         <div id="header">
  20.             <div id="logo">
  21.                 Мій сайт
  22.             </div>
  23.  
  24.             <div id="language">
  25.                 <ul>
  26.                     <li><a href="#">ua</a></li>
  27.  
  28.                     <li><a href="#">en</a></li>
  29.                 </ul>
  30.             </div>
  31.         </div>
  32.  
  33.         <div id="menubar">
  34.             <div id="menu">
  35.                 <ul>
  36.                     <li><a href="#">Новини</a></li>
  37.  
  38.                     <li><a href="#">Адмінпанель</a></li>
  39.  
  40.                     <li><a href="#">Гостьова книга</a></li>
  41.  
  42.                     <li><a href="#">Контакти</a></li>
  43.                 </ul>
  44.             </div>
  45.             <div id="avtorization">
  46.                 <ul>
  47. <?PHP if (empty($_SESSION['login'])){
  48.         echo "<li><a href=\"index.php?auth\">Увійти</a></li>
  49.        <li> / </li>
  50.        <li><a href=\"index.php?reg\">Реєстрація</a></li>";
  51.         include "php/avtorization.php";
  52.       }
  53.       else {
  54.         echo ("<li><a href=\"index.php?exit=1\"> Вийти </a></li>
  55.        <li><a href=\"#\">Ви зайшли як <span class=\"userhead\">".$_SESSION['login']."</span></a></li>");
  56.         include "php/avtorization.php";
  57.       }
  58. ?>
  59.                  </ul>
  60.             </div>
  61.         </div>
  62.         <div id="content">
  63.             <div    id="news">          
  64.                 Каждый веб-разработчик знает, что такое текст-«рыба». Текст этот, несмотря на название, не имеет никакого отношения к обитателям водоемов. Используется он веб-дизайнерами для вставки на интернет-страницы и демонстрации внешнего вида контента, просмотра шрифтов, абзацев, отступов и т.д. Так как цель применения такого текста исключительно демонстрационная, то и смысловую нагрузку ему нести совсем необязательно. Более того, нечитабельность текста сыграет на руку при оценке качества восприятия макета. Самым известным «рыбным» текстом является знаменитый Lorem ipsum. Считается, что впервые его применили в книгопечатании еще в XVI веке. Своим появлением Lorem ipsum обязан древнеримскому философу Цицерону, ведь именно из его трактата «О пределах добра и зла» средневековый книгопечатник вырвал отдельные фразы и слова, получив текст-«рыбу», широко используемый и по сей день. Конечно, возникают некоторые вопросы, связанные с использованием Lorem ipsum на сайтах и проектах,
  65.                 ориентированных на кириллический контент – написание символов на латыни и на кириллице значительно различается. И даже с языками, использующими латинский алфавит, могут возникнуть небольшие проблемы: в различных языках те или иные буквы встречаются с разной частотой, имеется разница в длине наиболее распространенных слов. Отсюда напрашивается вывод, что все же лучше использовать в качестве «рыбы» текст на том языке, который планируется использовать при запуске проекта. Сегодня существует несколько вариантов Lorem ipsum, кроме того, есть специальные генераторы, создающие собственные варианты текста на основе оригинального трактата, благодаря чему появляется возможность получить более длинный неповторяющийся набор слов.
  66.        </div>
  67.         </div>
  68.         <div id="footer">
  69.              -= 2017 =-
  70.         </div>
  71.     </div>
  72. </body>        
  73. </html>
  74.  


avtorization.php
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.             if (isset($_GET['auth'])&&(!isset($_SESSION['login']))){
  3.             require_once("php/loginbox.php");
  4.             exit();
  5.             }
  6.  
  7.             if (isset($_GET["exit"])) {
  8.                     unset($_SESSION['login']);
  9.                     session_destroy();
  10.                     setcookie("id", '', time()-3600);
  11.                     setcookie("hash", '', time()-3600);
  12.                     header ('Location: index.php');
  13.                     exit;
  14.             }
  15.                    
  16.  
  17.            
  18.         if (isset($_POST['username'])&&isset($_POST['password'])) {
  19.                 $login=$_POST['username'];
  20.                 $password=$_POST['password'];
  21.                 login($login, $password);
  22.         //return;
  23.         }
  24.         else {
  25.         exit();
  26.         }
  27.  
  28.  
  29.  
  30.         // AUTORIZATION PDO
  31.         function login($login, $password){
  32.         $db_server="localhost";
  33.         $db_name="BAZA";
  34.         $db_user="root";
  35.         $db_password="777";
  36.         $dsn = "mysql:host=$db_server;dbname=$db_name;charset=utf8";
  37.                 $opt = array(
  38.     PDO::ATTR_ERRMODE  => PDO::ERRMODE_EXCEPTION,
  39.     PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
  40. );
  41.                 try { $pdo = new PDO($dsn, $db_user, $db_password, $opt);
  42. }
  43. catch (PDOException $e) {
  44.         die('Подключение не удалось: ' . $e->getMessage());
  45. }
  46.         $login = $pdo->quote($login);
  47.         $password = md5($password);
  48.         //print $mail.' '.$password;
  49.         $sql = "SELECT id, password FROM users WHERE login=$login";
  50.         if(!$stmt = $pdo->query($sql)){
  51.                 return false;
  52.             } else {
  53.                 $row = $stmt->fetch(PDO::FETCH_ASSOC);
  54.                 if(!$row){
  55.                                         $result="Невірний логін або пароль !";
  56.                                         //session_start();
  57.                                                 $_SESSION['result'] = $result;
  58.                                                
  59.                     return false; // якщо нема такого логіна в базі
  60.                                 } else {
  61.                     $db_password = $row['password'];
  62.                     $db_id = $row['id'];
  63.                     //echo md5($password)."<br/>".$db_password."<br/>".$password."<br/>";
  64.                     if($password == $db_password){
  65.                         $hash = md5(rand(0, 6400000));
  66.                         $sql_update = "UPDATE users SET hash='$hash' WHERE id='$db_id'";
  67.                         if($pdo->exec($sql_update)){
  68.                             setcookie("id", $db_id, time() + 3600);
  69.                             setcookie("hash", $hash, time() + 3600);
  70.                                                         session_start();
  71.                                                         $_SESSION['login']=$_POST['username'];
  72.                                                         header ('Location: ../index.php');
  73.                             return true;
  74.                         }else{
  75.                             print 'Exception';
  76.                         }
  77.                     }
  78.                                 //      session_start();
  79.                                         $result="Невірний логін або пароль !";
  80.                                         $_SESSION['result'] = $result;
  81.                                        
  82.                     return false;
  83.                 }
  84.             }
  85.     }
  86. ?>


loginbox.php
PHP:
скопировать код в буфер обмена
  1. <html>
  2. <head>
  3.     <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  4.     <link rel="stylesheet" href="css/avtoriz.css" type="text/css">
  5.     <title></title>
  6. </head>
  7.  
  8. <body>
  9.     <div class="login-box animated fadeInUp">
  10.         <div class="box-header">
  11.             <h2>Авторизуйтесь</h2>
  12.         </div>
  13.  
  14.         <form method="post" action="php/avtorization.php">
  15.             <label for="username">Логін</label><br>
  16.             <input type="text" name="username" id="username"><br>
  17.             <label for="password">Пароль</label><br>
  18.             <input type="password" name="password" id="password"><br>
  19.             <button type="submit">Увійти</button><br>
  20.             <a href="#"></a>
  21.  
  22.             <p class="small">Забули пароль?</p><br>
  23.             <hr>
  24.             <span class="result" style="color:#ff0000">
  25.             </span>
  26.             <a href="registr.php"></a>
  27.             <p class="small">Зареєструватись</p><br>
  28.             <hr>
  29.             <a href='index.php'>Повернутися на головну сторінку</a>
  30.         </form>
  31.     </div>
  32.    
  33. </body>
  34. </html>
  35.  
 
 Top
Строитель Модератор
Отправлено: 17 Мая, 2017 - 21:13:39
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 917
Дата рег-ции: Февр. 2014  


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




DoctorMED, а ошибку вы видите в браузере? Если нет текста ошибки - включите их отображение, обновите страницу в браузере, скопируйте текст ошибки и опубликуйте в этой теме.
 
 Top
DoctorMED
Отправлено: 17 Мая, 2017 - 23:24:25
Post Id


Новичок


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


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




Строитель пишет:
DoctorMED, а ошибку вы видите в браузере? Если нет текста ошибки - включите их отображение, обновите страницу в браузере, скопируйте текст ошибки и опубликуйте в этой теме.

Ошибки как таковой нет. Просто после скрипта php, html уже не обрабатывается почему-то.
 
 Top
Строитель Модератор
Отправлено: 17 Мая, 2017 - 23:34:04
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 917
Дата рег-ции: Февр. 2014  


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




DoctorMED пишет:
Ошибки как таковой нет
А вы их в скрипте включили? (я про отображение ошибок)
 
 Top
DoctorMED
Отправлено: 18 Мая, 2017 - 21:47:38
Post Id


Новичок


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


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




Ошибки у меня в php.ini включены.
Дело не в этом. Я так себе думаю, что в скрипте идут POST и GET запросы, переброс на всплывающую страницу авторизации, и выходит что в результате html-код начальной страницы, после require, не подгружается, так как POST и GET вроде этот вывод обрывает.
Я правильно думаю?

И еще один вопрос новичка, немножко не по теме, но все же... Улыбка
Я работаю с Комодо под Убунту. Установил XDebug. Он, если я правильно понял, позволяет дебажить написаный код, задавая вручную значения переменных и т.п. .
Меня интересует можно ли дебажить код параллельно с выводом сайта в браузере, вроде как в реальном времени, с данными, введенными в браузере?
Что-то похожее на то, как реализовано в 1С. Там можно поставить точку останова в дебаггере, запустить программу, и она на этой точке останавливается и дальше можно пошагово ее вести, видеть параллельно код, данные в переменных, и окно самой программы.

Спасибо
 
 Top
Строитель Модератор
Отправлено: 18 Мая, 2017 - 22:54:11
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 917
Дата рег-ции: Февр. 2014  


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




DoctorMED пишет:
Я так себе думаю, что в скрипте идут POST и GET запросы, переброс на всплывающую страницу авторизации, и выходит что в результате html-код начальной страницы, после require, не подгружается, так как POST и GET вроде этот вывод обрывает.
Я правильно думаю?
Вероятно - нет. Я так понимаю, что выполнение в скрипте прерывается на вызове функции login(...) ? Нужно посмотреть, что эта функция возвращает в результате своей работы. Для этого передайте её вызов на вход var_dump() и посмотрите в браузере, что вернётся. Я предполагаю, вы увидите false.
Спойлер (Отобразить)
 
 Top
DoctorMED
Отправлено: 18 Мая, 2017 - 23:47:21
Post Id


Новичок


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


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




Она возвращает содержимое $result
Я эту функцию даже закомментировал, все-равно контент не выводиться
(Добавление)
УРРА!!!
Докопался до истины! Улыбка

Всему виной exit();
Он прекращает выполнение кода.
Поменял на return; и заработало Улыбка
 
 Top
Строитель Модератор
Отправлено: 19 Мая, 2017 - 00:06:24
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 917
Дата рег-ции: Февр. 2014  


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




DoctorMED пишет:
Она возвращает содержимое $result
Куда это она возвращает? Я в return'ах не вижу ничего кроме true и false. Так вот и нужно посмотреть, что именно она возвращает - true или false. И ещё надо закомментировать все перенаправления (я про header ('Location: ...)). Ну а так, как у вас false может возвращаться целых три раза, то не помешало бы обозначить строки константами __LINE__ после каждого return'a - тогда станет понятно, в каком блоке функции выполнилась программа. Т.е., все return false; и return true; записать так: return __LINE__; В браузере вместо __LINE__ вы увидете номер строки, на которой эта константа написана. Ну а дальше уже проверяйте логику вашего скрипта -- верно ли сработала функция. Если нет -- ищите причину. Если да -- посмотрите, верно ли прописаны редиректы (header(...)) .
(Добавление)
Пока написал пост, вы самостоятельно разобрались Радость
 
 Top
DoctorMED
Отправлено: 19 Мая, 2017 - 01:08:00
Post Id


Новичок


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


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




Большой респект за __LINE__ ;)
Не знал такого Улыбка Прикольная штука
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Вопросы новичков »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB