2015-07-11 4 views
1

Я изучаю pHp. Я сделал страницу входа. Проблема, с которой я столкнулся, заключается в том, что, когда пользователь нажимает кнопку входа &, если запись найдена, то он переводится на другую страницу, на которой отображается ссылка для переадресации, пользователь должен нажать на нее, чтобы перейти на следующую страницу. Теперь, что я хочу, когда пользователь нажимает кнопку «Добавить», детали должны быть перекрестно проверены в базе данных, если запись найдена, то пользователь должен быть перенаправлен непосредственно на следующую страницу. Ошибка должна отображаться. Это мой HTML-страница:Невозможно перенаправить с страницы входа на домашнюю страницу

<!DOCTYPE html> 
<html> 
    <head> 
     <title>OpenMoz</title> 
     <meta charset="utf-8"/> 
     <meta name="viewport" content="width=device-width, initial-scale=1"> 
     <link rel="stylesheet" type="text/css" href="index.css"/> 
     </head> 
    <body style="height:650px;"> 
    <h1 align="center" ><b><i>City Login</i></b></h1> 
     <div class="login"> 
     <form action="login.php" method="post"> 
      <input type="text" placeholder="Username" name="username" autocorrect=off autocapitalize=words required> <br> 
      <input type="password" placeholder="password" name="password" autocorrect=off autocapitalize=words required> <br> 
      <a href="home.php"><input type="submit" name="submit" value="Sign In"></a> 
     </form> 

     <a href="signup.php"><input type="submit" name="submit" value="Sign Up"></a> 
     <div> 
    </body> 
</html> 

Это login.php скрипт для проверки деталей:

<?php 
$username = $_POST["username"]; 
$password = $_POST["password"]; 

if($username && $password) 
{ 
    $connect = mysql_connect("localhost","root","password") or die("Couldn't connect"); 
    mysql_select_db("phplogin")or die("Couldn't connect"); 
    $query = mysql_query("SELECT * FROM users WHERE username='$username'"); 
    $numrows = mysql_num_rows($query); 
    if($numrows!=0) 
    { 
     while($row = mysql_fetch_assoc($query)) 
     { 
      $dbusername = $row['username']; 
      $dbpassword = $row['password']; 
     } 
     if($username==$dbusername && $password==$dbpassword) 
     { 
      echo ("<center><a href='home.php'>Redirect</a></center>"); 
      $_SESSION['username'] = $username; 
     } 
     else 
     { 
      echo ("Incorrect Password !"); 
     } 
    } 
    else 
     die("The user doesn't exist"); 

} 
else 
    echo ("Please enter username & password"); 

?> 

я был бы очень благодарен, если моя проблема становится решена.

ответ

2

Пока вы ничего не выводили в браузер, вы можете перенаправить заголовок. Это достигнет вашей цели.

Изменить это:

echo ("<center><a href='home.php'>Redirect</a></center>"); 
$_SESSION['username'] = $username; 

Для этого:

$_SESSION['username'] = $username; 
header("Location: /some-new-page.php"); 
exit; 

Всегда exit; после местоположения редиректа.

О да, и ЧИСТЫЕ ваши входы .. ..Вы широко открыты для SQL-инъекций.

$username = mysql_real_escape_string($_POST["username"]); 
$password = mysql_real_escape_string($_POST["password"]); 

О да, и .. mysql_ * устарел. Использовать mysqli_ *

+0

Большое вам спасибо и сэр, и да, я быстро узнаю о SQL-инъекции. – Harsh

0

использовать заголовок ("Location: home.php"); его лучший способ перенаправить страницу в PHP

0
header("Location:whaeverpage.php"); 
exit(); 

ли перед отправкой каких-либо данных в браузере или вы получите заголовок Allready ошибку сена

или на JavaScript:

If($connected ==='yes'){//your connection statement 
    ?> 
     <script>window.location.replace("whatever_page");</script> 
    <? 
} 
0

WOWOW NONONO HALT! DO NOT УЗНАТЬ mysql_ API ДЛЯ НОВОГО РАЗВИТИЯ. Это устаревший/неподдерживаемый, древний, подверженный ошибкам. научиться использовать mysqli_ или еще лучше, PDO, и вот отличный учебник http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers

также здесь: $ query = mysql_query ("SELECT * FROM users WHERE username = '$ username'");

код уязвим для атаки SQL-инъекции хакерами. должен использовать mysql_real_escape_string.

Кроме того, вы не должны использовать *, для большинства случаев, быть конкретным. Кроме того, вы не должны хранить пароли в текстовом виде (как ваша система входа в систему), вы должны использовать его. кроме этого, проверьте, что Крис Мэгг уже сказал, что я хотел бы https://stackoverflow.com/a/31355969/1067003