Сценарий входа в систему php отображается неправильно

Итак, я создал страницу user_login.php (состоящую из html, формы входа), форма:

<form method="post" action="scripts/login.php">

<p>Username: <input type="text" name="Username" /></p>

<p>Password: <input type="password" name="Password" /></p>

<p><input type="submit" value="Sign In" /></p>

</form>

Кроме того, у меня есть скрипт login.php (см. ниже)

<?php
   include "scripts/connection.php";
   session_start();

   if($_SERVER["REQUEST_METHOD"] == "POST") {
      // username and password sent from form 

      $myusername = mysqli_real_escape_string($link,$_POST['Username']);
      $mypassword = mysqli_real_escape_string($link,$_POST['Password']); 

      $sql = "SELECT * FROM Customer WHERE Customer_Username = '$myusername' and Customer_Password = '$mypassword'";
      $result = mysqli_query($link,$sql);
      $row = mysqli_fetch_array($result,MYSQLI_ASSOC);
      $active = $row['active'];

      $count = mysqli_num_rows($result);

      // If result matched $myusername and $mypassword, table row must be 1 row

      if($count == 1) {
         $_SESSION['Username'] = $myusername;

         header("location: Welcome.php");
      }else {
         $error = "Your Username or Password is invalid";
      }
   }
?>

Теперь я знаю, что мой connection.php работает, так как я использую его в другом месте на своем сайте.

Моя проблема в том, что когда я просматриваю страницу user_login.php в своем браузере, когда я нажимаю кнопку «Войти», я перехожу к файлу www.website.com/login.php, но вся страница пуста (белая ). Это происходит независимо от того, ввожу ли я что-то в поля имени пользователя и пароля или оставляю их пустыми.

Очевидно, что мне нужно, если поля пусты или не соответствуют записям в БД, отображается сообщение об ошибке. Если логины совпадают, они перенаправляются в файл Welcome.php.

Не 100%, если в сценарии login.php чего-то не хватает, поэтому любая помощь будет очень признательна.

ОБНОВЛЕНИЕ

После добавления:

session_start();
error_reporting(E_ALL);
ini_set('display_errors', 1);
include "scripts/connection.php";  

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

Предупреждение: include(scripts/connection.php): не удалось открыть поток: нет такого файла или каталога в scripts/login.php в строке 5

Предупреждение: include(): не удалось открыть 'scripts/connection.php' для включения (include_path='.:/usr/share/php:/usr/share/pear') в scripts/login.php в строке 5

Примечание: Неопределенная переменная: ссылка в scripts/login.php в строке 10.

Предупреждение: mysqli_real_escape_string() ожидает, что параметр 1 будет mysqli, значение null указано в /scripts/login.php в строке 10.

Примечание: Неопределенная переменная: ссылка в /scripts/login.php в строке 11

Предупреждение: mysqli_real_escape_string() ожидает, что параметр 1 будет mysqli, ноль указан в /scripts/login.php в строке 11.

Примечание: Неопределенная переменная: ссылка в /scripts/login.php в строке 14.

Предупреждение: mysqli_query() ожидает, что параметр 1 будет mysqli, ноль указан в /scripts/login.php в строке 14.

Предупреждение: mysqli_fetch_array() ожидает, что параметр 1 будет mysqli_result, значение null указано в /scripts/login.php в строке 15.

Предупреждение: mysqli_num_rows() ожидает, что параметр 1 будет mysqli_result, ноль указан в /scripts/login.php в строке 18.


person Tipping44    schedule 17.01.2017    source источник
comment
Никогда не храните простые текстовые пароли! Используйте встроенные функции PHP для обработки безопасность пароля. Если вы используете версию PHP ниже 5.5, вы можете использовать password_hash() пакет совместимости. Убедитесь, что вы не экранируете пароли или используете любые другие механизм очистки на них перед перемешиванием. При этом изменяется пароль и возникает ненужное дополнительное кодирование.   -  person Jay Blanchard    schedule 18.01.2017
comment
Маленький Бобби говорит ваш скрипт подвержен риску атак путем внедрения кода SQL. Подробнее о подготовленные инструкции для MySQLi. Даже экранирование строки небезопасно! Не верите?   -  person Jay Blanchard    schedule 18.01.2017
comment
Добавьте отчеты об ошибках в начало файлов сразу после открывающего <?php тега error_reporting(E_ALL); ini_set('display_errors', 1);.   -  person Jay Blanchard    schedule 18.01.2017
comment
Какой у тебя $_SERVER["REQUEST_METHOD"]? Вы повторили это?   -  person Jay Blanchard    schedule 18.01.2017
comment
@JayBlanchard извините, когда вы спрашиваете, что это такое? Что ты имеешь в виду? Новичок извините....   -  person Tipping44    schedule 18.01.2017
comment
Каково значение $_SERVER["REQUEST_METHOD"]? Добавьте echo $_SERVER["REQUEST_METHOD"]; перед оператором if. Держу пари, что вы никогда не войдете в состояние if.   -  person Jay Blanchard    schedule 18.01.2017
comment
Начните с первой ошибки, и многие другие исчезнут.   -  person Jay Blanchard    schedule 18.01.2017
comment
@JayBlanchard Я явно упускаю что-то, что очевидно для более опытных пользователей, извините, вы говорите, что первая ошибка, из-за которой не удалось открыть поток, который, по вашему мнению, является дубликатом. В строке 5 в моем файле login.php указано include script/connection.php; Когда вы предлагаете его дубликат, вы имеете в виду, что я включил его, когда в этом нет необходимости?   -  person Tipping44    schedule 18.01.2017
comment
Дубликат здесь означает, что вопрос уже задавался и на него уже был дан ответ, вероятно, несколько раз. Связанный ответ, как правило, содержит информацию, необходимую для исправления кода и правильной работы.   -  person Jay Blanchard    schedule 18.01.2017
comment
Видишь ли, Джей, буквально именно по этой причине ты просто не помечаешь это как обман в середине.   -  person ATechGuy    schedule 18.01.2017
comment
@JayBlanchard Ах, ладно, я заметил другого комментатора, и вы сами упомянули о первой показанной ошибке, неправильно поняли, о чем вы говорили, сейчас я посмотрю на ваш ответ. Спасибо   -  person Tipping44    schedule 18.01.2017
comment
моя первая строка также должна помочь вам Чаевые, посмотрите, если у вас все еще есть проблемы   -  person ATechGuy    schedule 18.01.2017
comment
@keaner, не уверен, что вы видели мой ответ на ваш первый ответ, просто на всякий случай: да, соединение и login.php находятся в папке скриптов. В верхней части файла login.php я включил скрипт connection.php и ничего. иначе, в верхней части моего файла user_login.php я включил файлы подключения и login.php (пробовал удалять и добавлять только по одному, но одно и то же сообщение об ошибке), надеюсь, я не глуп и не упустил что-то очевидное?   -  person Tipping44    schedule 18.01.2017
comment
Если они находятся в одной папке, сделайте то, что сказал @keaner, и измените строку на include "connection.php";   -  person Jay Blanchard    schedule 18.01.2017
comment
@keaner #Хорошо, наконец, понял, что вы имели в виду, изменив на connection.php; Это устранило все ошибки и перенаправляет меня на мою страницу приветствия с правильной записью в БД !!! Спасибо   -  person Tipping44    schedule 18.01.2017
comment
Теперь, когда у вас есть работающий код @Tipping44, обратите внимание на первые 2 оставленных вам комментария. Оба они касаются безопасности и защиты вашего кода.   -  person Jay Blanchard    schedule 18.01.2017
comment
Если ответ решил вашу проблему, рассмотрите возможность принятия ответа. Вот как meta.stackexchange.com/ вопросов/5234/, затем вернитесь сюда и сделайте то же самое с галочкой/галочкой, пока она не станет зеленой. Это информирует сообщество, решение было найдено. В противном случае другие могут подумать, что вопрос все еще открыт, и могут захотеть опубликовать (больше) ответов. Вы будете зарабатывать очки, а другим будет предложено помочь вам. Добро пожаловать в Стек!   -  person Jay Blanchard    schedule 18.01.2017
comment
@JayBlanchard только что добавил то, что вы предложили, и все, что отображается, это POST. Возможно, вы закатываете глаза, пытаясь понять как можно лучше, извините!   -  person Tipping44    schedule 18.01.2017
comment
Я все еще пытался устранить неполадки в вашем коде после того, как вы устранили проблему с подключением. Вы можете игнорировать это сейчас и обратить внимание на комментарии, оставленные о безопасности. Кроме того, как и я, проголосуйте за ответ @keaner, а затем отметьте его как принятый, когда вам будет разрешено.   -  person Jay Blanchard    schedule 18.01.2017
comment
лол, эта тема золотая, рад, что у вас все получилось, спасибо за согласие :)   -  person ATechGuy    schedule 18.01.2017


Ответы (1)


Если ваши скрипты/connection.php находятся в той же папке, что и ваш login.php, то включение должно быть только

include "connection.php";

во-первых, ваш session_start(); должен быть первой строкой в ​​вашем php, прежде чем включать скрипты. Это, вероятно, вызывает ошибку (которую вы не видите), поэтому страница белая и пустая.

Добавьте это после session_start(), затем перезагрузите страницу. Таким образом, полный код для вершины должен выглядеть так, как показано ниже.

session_start();
error_reporting(E_ALL);
ini_set('display_errors', 1);
include "scripts/connection.php";

ОБНОВИТЬ

для устранения неполадок удалите эту часть

if($count == 1) {
     $_SESSION['Username'] = $myusername;

     header("location: Welcome.php");
  }

и попробуй это

if($count == 1) {
     echo "It WORKS";
  }

это позволит вам увидеть, выполняется ли это условие, если да, то проблема заключается в перенаправлении

person ATechGuy    schedule 17.01.2017
comment
Спасибо за ответ, просто добавил, что в и происходит то же самое. Никакой разницы :( Извините, я только что перезагрузил страницу, и теперь мне показывают огромную ошибку, начинающуюся с предупреждения: include (scripts/connection.php): не удалось открыть поток: нет такого файла или каталога в /www/scripts/login .php в строке 5 Предупреждение: include(): Не удалось открыть 'scripts/connection.php' для включения (include_path='.:/usr/share/php:/usr/share/pear') – Tipping44 4 минуты назад изменить - person Tipping44; 18.01.2017
comment
выньте начало сеанса полностью, чтобы увидеть, отображается ли страница, тот факт, что даже не отображается ошибка, вызывает беспокойство, что-то в вашей настройке php кажется неправильным, также опубликуйте свой новый отредактированный код полностью, если вы можете - person ATechGuy; 18.01.2017
comment
header('Расположение: example.com/'); должен быть первым перед любым выводом. все это относится к ошибкам выдачи php, которые вы не видите (белая страница) - person ATechGuy; 18.01.2017
comment
Вы имеете в виду, чтобы я также переместил это в верхнюю часть моей страницы? Если это так, то как только я нажму на свою страницу user_login.php (как будто пользователь входит в систему), он сразу же перенаправит меня на welcome.php. - person Tipping44; 18.01.2017
comment
Я обновил свой ответ, посмотрите, чтобы устранить неполадки, где он умирает, попробуйте выше. Да, я имел в виду отредактировать ваш исходный вопрос и предоставить весь код в том виде, в котором он есть сейчас, если вы можете, замечание в заголовке должно было заменить заголовок, который у вас был позже в файле, в том же месте, извините за путаницу - person ATechGuy; 18.01.2017
comment
Спасибо за ваш вклад, только что попробовал заменить то, что вы предложили, и получил такое же длинное сообщение об ошибке. обновил мой исходный пост с сообщением об ошибке - person Tipping44; 18.01.2017
comment
какое длинное сообщение об ошибке? Вы сказали, что страница пуста? - person ATechGuy; 18.01.2017
comment
Вот здесь, первый комментарий @keaner Предупреждение: include(scripts/connection.php): не удалось открыть поток: Нет такого файла или каталога в /www/scripts/login.php в строке 5 Предупреждение: include() : Не удалось открыть 'scripts/connection.php' для включения (include_path='.:/usr/share/php:/usr/share/pear') - person Jay Blanchard; 18.01.2017
comment
если ваш scripts/connection.php находится в той же папке, что и ваш login.php, то включение должно быть только include connection.php; - person ATechGuy; 18.01.2017
comment
@keaner да, подключение и login.php находятся в папке сценариев. В верхней части файла login.php я включил скрипт connection.php и ничего больше. В верхней части моего файла user_login.php я включил оба подключение и файлы login.php (пробовал удалять и добавлять только по одному, но то же сообщение об ошибке) надеюсь, что я не глуп и не упустил что-то очевидное? - person Tipping44; 18.01.2017
comment
это просто обман, потому что мы исправили его другую проблему, не дай бог кому-то другому захочется увидеть цепочку событий - person ATechGuy; 18.01.2017
comment
То, что это обман, не означает, что его удалят. На самом деле, он, скорее всего, будет храниться только для того, чтобы люди могли видеть цепочку событий @keaner. Ничто личное не предназначалось для обмана или редактирования вашего ответа. - person Jay Blanchard; 18.01.2017