2017-02-05 7 views
-1

Я видел много таких вопросов здесь, но, похоже, ничто из этого не помогает. Я только начал изучать PHP в этом семестре и официально начал работать на стороне сервера в последнюю неделю января (согласно инструкциям инструктора).Заголовок не работает, остается в журнале на странице

Я хочу, чтобы пользователь мог войти в систему и получить перенаправлены на страницу приветствия, но всякий раз, когда он пытается войти, он остается на той же странице с ничего не происходит

<?php 
ob_start(); 
$dbhost = "localhost"; 
$dbuser = "root"; 
$dbpass = ""; 
$dbname = "dbadmin"; 

$dbcon = new mysqli($dbhost, $dbuser, $dbpass, $dbname); 

if (isset($_POST["submit"])) { 
    if (!empty($_POST['loginUsername']) && (!empty($_POST['loginPassword']))) { 
     $username = $_POST['loginUsername']; 
     $password = $_POST['loginPassword']; 

     $query = mysqli_query($dbconn, "SELECT * FROM userstable WHERE username= '$username' AND userPassword = '$password'"); 
     $numrows = mysqli_num_rows($query); 
     if ($numrows !=0) { 
      while ($row = mysqli_fetch_assoc($query)) { 
       $dbusername = $row['loginUsername']; 
       $dbpassword = $row['loginPassword']; 

      } 
      if ($username == $dbusername && $password == $dbpassword) { 
       session_start(); 
       $_SESSION['sess_user']=$user; 
       header('Location: home.php'); 
      } else { 
       echo "Invalid Username or Password"; 
      } 
     } 
    } 
} 

?> 

я добавил ob_start(); потому что, поскольку я исследовал здесь, он работает большую часть времени, но не в моем коде.

Edit: Вот HTML код:

<html> 
<head> 
    <title>DYLAN EVERYWHERE</title> 
    <link rel="stylesheet" type="text/css" href="style.css"> 
</head> 
<body> 
    <div class="fullContainer"> 
     <div class="header"> 
      <h1>DYLAN'S WEBSITE BRAH</h1> 
     </div> 
     <div class="subtext"> 
      <h4>DYLAN'S NAME EVERYWHERE BRAH</h4> 
     </div> 
     <div class="loginBox"> 
      <form class="login"> 
       <h3>LOG ON TO DYLAN'S SITE BRAH</h3> 
       <input type="text" name="loginUsername" placeholder="DYLAN USERNAME BRAH"><br> 
       <input type="password" name="loginPassword" placeholder="DYLAN PASSWORD BRAH"> <br> 
       <input class="loginButton" type="submit" name="submit" value="Log In"> 
      </form> 
      <br> 
      <div class="registerText"> 
       <span style="color: black;"> 
        DONT HAVE AN ACCOUNT? DONT WORRY BRAH, SIGN UP <span class="here"><a href="register.php">HERE</a> BECAUSE DYLAN WEBSITE BRAH</span> 
       </span> 
      </div> 
     </div>  
    </div> 
</body> 
</html> 
+3

** Опасность **: ** Вы уязвимы для атак [инъекций SQL] (http://bobby-tables.com/) * * что вам нужно [защищать] (http://stackoverflow.com/questions/60174/best-way-to-prevent-sql-injection-in-php) от себя. – Quentin

+0

Вы прочитали руководство? http://php.net/manual/en/function.header.php - примеры там покажут вам, чего вам не хватает. –

+0

'$ dbcon = new mysqli ($ dbhost, $ dbuser, $ dbpass, $ dbname);' - Simple: вы использовали неверную переменную здесь '$ query = mysqli_query ($ dbconn' <<< и отчет об ошибках сказал бы вам о неопределенной переменной –

ответ

-1

UPDATE: жаль, что это решение не действует, я не видел его запрос. Ответ на этот вопрос, если он просто сделать SELECT * FROM userstable

Этот код должен быть внутри while петли

if ($username == $dbusername && $password == $dbpassword) { 
    session_start(); 
    $_SESSION['sess_user']=$user; 
    header('Location: home.php'); 
} else { 
    echo "Invalid Username or Password"; 
} 

Как это:

if ($numrows !=0) { 
    while ($row = mysqli_fetch_assoc($query)) { 
     $dbusername = $row['loginUsername']; 
     $dbpassword = $row['loginPassword']; 

     if ($username == $dbusername && $password == $dbpassword) { 
      session_start(); 
      $_SESSION['sess_user']=$user; 
      header('Location: home.php'); 
     } else { 
      echo "Invalid Username or Password"; 
     } 

    } 
} 

Ваш заголовок не удалось, потому что, когда код цикла, переменная $dbusername и $dbpassword были заменены во время цикла. Итак, когда цикл закончен и начните выполнение инструкции if, чтобы проверить, совпадает ли логин, оператор if содержит только последние данные в вашей таблице, следовательно, не удалось войти в систему.

Но, конечно, вам нужно обработать ошибку «Неверное имя пользователя или пароль», используя другой способ, потому что, если теперь, ваша страница будет отображать сообщение об ошибке при циклическом перемещении данных, пока не достигнет действительной детали входа.

Я предлагаю вам сохранить сообщение в переменную так:

$error = "Invalid Username or Password"; 

Тогда вы можете просто проверить if($error != "") из положить сообщение $ ошибке.

+0

Спасибо, но я попробовал, и он все еще не работает –

+0

О, мой плохой, я сделал не видите ваш запрос, вы уже выполнили запрос для поиска записи, которая соответствует имени пользователя и паролю '' 'SELECT * FROM userstable WHERE username = '$ username' AND userPassword = '$ password'" '' '. Мой ответ: если вы просто сделайте '' 'SELECT * FROM userstable''' –

-1

Это хорошее начало. Вот моя версия:

<?php 
ob_start(); 
$dbhost = "localhost"; 
$dbuser = "root"; 
$dbpass = ""; 
$dbname = "dbadmin"; 

$dbcon = new mysqli($dbhost, $dbuser, $dbpass, $dbname); 

if (isset($_POST["submit"])) { 
    if (!empty($_POST['loginUsername']) && (!empty($_POST['loginPassword']))) { 
     $username = $_POST['loginUsername']; 
     $password = $_POST['loginPassword']; 

     $query = mysqli_query($dbcon, "SELECT * FROM userstable WHERE username= '$username' AND userPassword = '$password'"); 
     $numrows = mysqli_num_rows($query); 
     if ($numrows != 0) { 
      $results = mysqli_fetch_assoc($query); 
      $dbusername = $results['loginUsername']; 
      $dbpassword = $results['loginPassword']; 

      if ($username == $dbusername && $password == $dbpassword) { 
       session_start(); 
       $_SESSION['sess_user']=$username; 
       header('Location: home.php'); 
      } else { 
       echo "Invalid Username or Password"; 
      } 
     } 
    } 
} 

?> 

Вам не нужно использовать while() цикл, как вы получаете данные, используя условие, не должно быть больше, то 1 результат с именем пользователя, как $username и пароль как $password.

Вы также установили $_SESSION['sess_user'] в $user (который не существует), поэтому я предполагаю, что вы имели в виду $username или $dbusername.

Также опечатка использует соединение с базой данных для вашего запроса. $dbconn вместо $dbcon.

EDIT: method="POST" в вашей HTML-форме. Это связано с тем, что метод по умолчанию формы - это запрос GET.

<form class="login" action="file.php" method="POST"> 
    .... 

Установите атрибут действия на свое имя scrips и пути

+0

Я пробовал этот, но он все еще остается на странице входа. Он не перенаправляется на home.php –

+0

Вы видите сообщение« Неверное имя пользователя или пароль », когда представляя форму? – ScottSmudger

+0

нет, текст не отображается. ld, если я размещаю HTML-код? –