За последние 24 часа нас посетили 68508 программистов и 10345 роботов. Сейчас ищут 2918 программистов ...

Ошибка в области переменной или неправильный if

Тема в разделе "PHP для новичков", создана пользователем novamap, 1 окт 2016.

  1. novamap

    novamap Новичок

    С нами с:
    1 окт 2016
    Сообщения:
    4
    Симпатии:
    0
    Добрый вечер. Использую последнюю версию XAMPP c версией PHP 7.0.9

    Делаю сайт с валидацией формы по уроку на ютубе:
    Код (Text):
    1.  
    2. https://youtu.be/Epej2kWxH8M?list=PLB8wmVoWIIx5vDttXncH_WXF_JjC7PIjc
    На 20 минуте этого видео идет проверка валидации формы - у меня же выводит ошибку
    Notice: Undefined variable: Module in C:\xampp\htdocs\form\account.php on line 3

    1) Как я понимаю это либо переменная $Module не видима в файле account.php хотя include('form/account.php'); присутствует в файле index.php и переменная $Module должна быть видимой в файле account.php

    2) Либо не корректная проверка if ($Module == 'register' and $_POST['enter'])

    Прошу помощи - как убрать ошибку. Причем когда убираю из if - $Module == 'register' and то валидация успешно работает. Понимаю, что урок старый, аж 2014 года и код корявый может быть - но все же прошу у знатоков помощи.

    Архивы с готовым кодом (Урок 4) находится на Яндекс-ДИСКЕ


    Коды файлов:

    index.php где идет определение URL

    PHP:
    1. <?php
    2.  
    3. // Подключаем файл setting.php
    4.  
    5. include_once 'setting.php';
    6. // Стартуем сессии
    7.  
    8. // В переменную $CONNECT вносим подключение к нашей БД
    9. $CONNECT = mysqli_connect(HOST, USER, PASSWORD, DATABASE);
    10.  
    11. // Код определяет какую страницу подгружать пользователю
    12. // Переменная $_SERVER['REQUEST_URI'] - это глобальная переменная
    13. // Переменная $Page - это имя страницы
    14. // Переменная $Module - это имя модуля
    15. // Переменная $URL_Path разбивает адрес url на части
    16. // Переменная $URL_Parts
    17.  
    18. if ($_SERVER['REQUEST_URI'] == '/') {
    19.     $Page = 'index';
    20.     $Module = 'index';
    21. }
    22. else
    23. {
    24.     $URL_Path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
    25.     $URL_Parts = explode('/', trim($URL_Path, ' /'));
    26.     $Page = array_shift($URL_Parts);
    27.  
    28.     if (!empty($Module)) {
    29.             $Param = array();
    30.             for ($i = 0; $i < count($URL_Parts); $i++) {
    31.                 $Param[$URL_Parts[$i]] = $URL_Parts[++$i];
    32.             }
    33.     }
    34. }
    35.  
    36.     if ($Page == 'index') include('page/index.php');
    37.         else if ($Page == 'login') include('page/login.php');
    38.         else if ($Page == 'register') include('page/register.php');
    39.         else if ($Page == 'account') include('form/account.php');
    40.  
    41.  
    42. function FormChars($p1) {
    43.     return nl2br(htmlspecialchars(trim($p1), ENT_QUOTES), false);
    44. }  
    45.    
    46. function Head($p1) {
    47. echo '<!DOCTYPE html><html><head><meta charset="utf-8" /><title>'.$p1.'</title><meta name="keywords" content="" /><meta name="description" content="" /><link href="http://localhost/resource/style.css" rel="stylesheet"></head>';
    48. }
    49.  
    50.  
    51. function Menu () {
    52. echo '<div class="MenuHead"><a href="/"><div class="Menu">Главная</div></a><a href="/register"><div class="Menu">Регистрация</div></a><a href="/login"><div class="Menu">Вход</div></a></div>';
    53. }
    54.  
    55. function Footer () {
    56. echo '<footer class="footer">Mr.Shift - <a href="https://www.youtube.com/channel/UCpEWlcj5rkU1H9vkIf9Lb5g" target="blank">Мой канал на You Tube</a> - Пишем свой движок на PHP</footer>';
    57. }
    58.  
    59. ?>
    Файл register.php где вводят данные чтобы зарегистрироваться на сайте.
    PHP:
    1. <?php Head('Главная страница') ?>
    2. <body>
    3. <div class="wrapper">
    4. <div class="header"></div>
    5. <div class="content">
    6. <?php Menu() ?>
    7. <div class="Page">
    8. <h3>Заполните форму:</h3>
    9.  
    10. <form method="POST" action="/account/register">
    11.  
    12.     <br><input type="text" name="login"  placeholder="Логин">
    13.     <br><input type="email" name="email" required placeholder="E-mail">
    14.     <br><input type="password" name="password" required placeholder="Пароль">
    15.     <br><input type="text" name="name" required placeholder="Имя"><br>
    16.     <br><select size="1" name="country">
    17.         <option value="0">Не скажу</option>
    18.         <option value="1">Украина</option>
    19.         <option value="2">Россия</option>
    20.         <option value="3">США</option>
    21.         <option value="4">Канада</option>
    22.     </select><br>
    23.     <br><input type="file" name="avatar"><br>
    24.     <br><input type="submit" name="enter" value='Регистрация'> <input type="reset" value='Очистить'>
    25. </form>
    26. </div>
    27. </div>
    28. <?php Footer() ?>
    29. </div>
    30. </body>
    31. </html>
    Файл aсcount.php где идет проверка, валидация форм введенных в register.php
    PHP:
    1. <?php
    2.  
    3.     if ($Module == 'register' and $_POST['enter']) {
    4.         $_POST['login'] = FormChars($_POST['login']);
    5.         $_POST['email'] = FormChars($_POST['email']);
    6.         $_POST['password'] = FormChars($_POST['password']);
    7.         $_POST['name'] = FormChars($_POST['name']);
    8.         $_POST['country'] = FormChars($_POST['country']);
    9.         $_POST['avatar'] = FormChars($_POST['avatar']);
    10.  
    11.         if (!$_POST['login'] or !$_POST['email'] or !$_POST['password'] or !$_POST['name']) {
    12.             exit('Ошибка валидации формы.');
    13.         }
    14.         else echo 'Валидация формы прошла успешно!';
    15.            
    16.     }
    17.  
    18. ?>
    Спасибо всем за поддержку!
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.843
    Симпатии:
    1.338
    Адрес:
    Лень
    место include используйте require и в полноценном скрипте не надо ставить уж закрывалку ?>
     
  3. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    Может я не прав, но по ходу, если $_SERVER['REQUEST_URI']!='/', то $Module не будет инициализирована, поскольку в строках 24-35 нету присвоения ей значения. Урок не смотрел - лень, глянул только ваш код. Мне кажется, дело в этом
     
  4. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.843
    Симпатии:
    1.338
    Адрес:
    Лень
    + у вас переменная не обьявляется $Module
    если не дефолт страница
    PHP:
    1. if (!empty($Module)) {
    2.             $Param = array();
    3.             for ($i = 0; $i < count($URL_Parts); $i++) {
    4.                 $Param[$URL_Parts[$i]] = $URL_Parts[++$i];
    5.             }
    6.     }
    Но заметим что есть другая переменка отвечающая за это $Page, Следовательно - можно в аккаунт.пхп заменить название $Module на $Page
    --- Добавлено ---
    да и книга не грамотная, код "тяп-ляп"
    уже ясно:
    Код (Text):
    1. $Row = mysqli_fetch_assoc(mysqli_query($CONNECT, "SELECT `login` FROM `users` WHERE `login` = '$_POST[login]'"));
     
  5. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.843
    Симпатии:
    1.338
    Адрес:
    Лень
    а да ты в index забыл:
    PHP:
    1. $URL_Path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
    2. $URL_Parts = explode('/', trim($URL_Path, ' /'));
    3. $Page = array_shift($URL_Parts);
    4. $Module = array_shift($URL_Parts);
    :D
    --- Добавлено ---
    хотя можно было так замутить:
    $Module = $Page = array_shift($URL_Parts);
     
  6. novamap

    novamap Новичок

    С нами с:
    1 окт 2016
    Сообщения:
    4
    Симпатии:
    0
    но в 21 строке присвоение есть $Module='index';
     
  7. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.843
    Симпатии:
    1.338
    Адрес:
    Лень
     
  8. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    строка 21 выполняется только при запросе главной страницы, там же if стоит
     
  9. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.843
    Симпатии:
    1.338
    Адрес:
    Лень
    читайте по внимательнее. Книгу смените. Автор Говнокодер
    --- Добавлено ---
    ты издеваешься? глотая все предыдущие посты, нечем больше тебе помочь. Удачи
    --- Добавлено ---
    @mkramer сорь, на автора не посмотрел :D
     
  10. novamap

    novamap Новичок

    С нами с:
    1 окт 2016
    Сообщения:
    4
    Симпатии:
    0
    Спасибо !!! ошибка перестала появляться )) но самое удивительное что просто белый экран и все ))) как быть ?
     
  11. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.213
    Симпатии:
    1.711
    Адрес:
    Молдова, г.Кишинёв
  12. novamap

    novamap Новичок

    С нами с:
    1 окт 2016
    Сообщения:
    4
    Симпатии:
    0