Как перенаправить на другую страницу с помощью PHP

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

Я искал в Интернете и мне сказали, что функция header() должна делать трюк, но она будет работать, только если я не вывел никакой информации перед ее использованием.

Это проблема. Я выпустил кучу информации (включая HTML для создания самой страницы входа в систему).

Итак, как мне перенаправить пользователя с одной страницы на другую?

Какие у меня есть варианты? Также, какова наилучшая практика в этих случаях?


EDIT: Здесь моя вся страница login.php

<?php 

session_start(); 

echo "<!DOCTYPE html> 
  <html> 
     <head> 
        <meta charset='utf-8'> 
        <title>Sprout</title>
    <link rel='stylesheet' href='stylesheet.css' type='text/css'>
     </head>
 <body>
    <div class='box'>
    <form action='login.php' method='post'>
       Name<br /> <input type='text' name='username' class='form'/><br />
       Password<br /> <input type='password' name='password' class='form'/>
       <input type='submit' value='Login' class='button' />
    </form>
    </div>
 </body>
  </html>";

if ($_SERVER['REQUEST_METHOD'] == 'POST') 
{
    $username = $_POST["username"];
    $password = $_POST["password"];

    $dbhost = "localhost";
    $dbuser = "root";
    $dbpass = "root";

    $conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ("Error connecting to database");

    $dbname = "database";

    mysql_select_db($dbname);

    $query = "SELECT username FROM users WHERE username = '$username' AND password = '$password'";

    $result = mysql_query($query) or die ("Failed Query of " . $query);


    while($row = mysql_fetch_assoc($result))
    {
            $_SESSION["user"] = $username;
    }
}
?>

Ответ 1

Это проблема. Я выпустил кучу информации (включая HTML для создания самой страницы входа в систему). Итак, как мне перенаправить пользователя с одной страницы на другую?

Это означает, что ваш дизайн приложения довольно сломан. Вы не должны выполнять вывод, пока работает ваша бизнес-логика. Используйте механизм шаблонов (например, Smarty) или ускорите его с помощью буферизации вывода).

Другая опция (не очень хорошая!) будет выводить JavaScript для перенаправления:

<script type="text/javascript">location.href = 'newurl';</script>

Ответ 2

Вы можете использовать функцию, похожую на:

function redirect($url) {
    ob_start();
    header('Location: '.$url);
    ob_end_flush();
    die();
}

Следует отметить, что вы всегда должны использовать либо ob_flush(), либо ob_start() в начале ваших функций header('location: ...');, и вы всегда должны следовать им с помощью функции die() или exit(), чтобы предотвратить дальнейшее выполнение кода.

Здесь приведено более подробное руководство, чем любые другие ответы: http://www.exchangecore.com/blog/how-redirect-using-php/

В этом руководстве приводятся причины использования функций die()/exit() в ваших перенаправлениях, а также когда использовать ob_flush() vs ob_start() и некоторые потенциальные ошибки, оставленные другими ответами в этой точке.

Ответ 3

Вы можете условно перенаправить на некоторую страницу в php файл....

if (/*Condition to redirect*/){
  //You need to redirect
  header("Location: http://www.yourwebsite.com/user.php"); /* Redirect browser */
  exit();
 }
else{
  // do some
}

Ответ 4

header не будет работать для всех

Используйте ниже простой код

<?php
        echo "<script> location.href='new_url'; </script>";
        exit;
?>

Ответ 5

Предполагая, что вы используете файлы cookie для входа в систему, просто вызовите его после вашего вызова setcookie - в конце концов, вы должны вызывать его перед любым выходом.

В любом случае, вы можете проверить наличие имени кнопки отправки формы в начале script, выполнить свою логику и затем вывести материал:

if(isset($_POST['mySubmit'])) {
    // the form was submitted

    // ...
    // perform your logic

    // redirect if login was successful
    header('Location: /somewhere');
}

// output your stuff here

Ответ 6

Вы можете использовать ob_start();, прежде чем отправлять какой-либо вывод. Это скажет PHP, чтобы сохранить все выходные данные в буфере до окончания выполнения script, поэтому вы все равно можете изменить заголовок.

Обычно я не использую буферизацию вывода, для простых проектов я сохраняю всю логику в первой части моего script, затем выводя все HTML.

Ответ 7

Самый простой способ заключается в том, что ваш script проверяет данные входа в форму, расположенные сверху, script перед любым выходом.

Если логин действителен, вы будете перенаправлять с помощью функции "header".

Даже если вы используете "ob_start()", иногда бывает, что вы пропускаете одно пробельное пространство, которое приводит к выходу. Но вы увидите инструкцию в своих журналах ошибок.

<?php
ob_start();
if (FORMPOST) {
    if (POSTED_DATA_VALID) {
        header("Location: https://www.yoursite.com/profile/");
        ob_end_flush();
        exit;
    }
}
/** YOUR LOGINBOX OUTPUT, ERROR MESSAGES ... **/
ob_end_flush();
?>

Ответ 8

Несмотря на то, что он не защищен, (без обид или чего-либо еще), просто вставьте функцию заголовка после установки переменной сеанса

 while($row = mysql_fetch_assoc($result))
    {
            $_SESSION["user"] = $username;
    }
header('Location: /profile.php');

Ответ 9

Действие клика BUTTON

   if(isset($_POST['save_btn']))
    {
        //write some of your code here, if necessary
        echo'<script> window.location="B.php"; </script> ';
     }

Ответ 10

firstly create index.php page and just copy paste below code :-

<form name="frmUser" class="well login-form" id="form" method="post" action="login_check.php" onSubmit="return FormValidation()">
    <legend>
        <icon class="icon-circles"></icon>Restricted Area<icon class="icon-circles-reverse"></icon>
    </legend>
    <div class="control-group">
        <label class="control-label" for="inputPassword">Username</label>
        <div class="controls">
            <div class="input-prepend">
                <span class="add-on"><icon class="icon-user icon-cream"></icon> </span>
                <input class="input" type="text" name="username" id="username" placeholder="Username" />
            </div>
        </div>
    </div>
    <div class="control-group">
        <label class="control-label" for="inputPassword">Password</label>
        <div class="controls">
            <div class="input-prepend">
                <span class="add-on"><icon class="icon-password icon-cream"></icon>
                </span> <input class="input" type="password" name="password" id="password" value="" placeholder="Password" />
            </div>
        </div>
    </div>
    <div class="control-group signin">
        <div class="controls ">
            <input type="submit" class="btn btn-block" value="Submit" />
            <div class="clearfix">
                <span class="icon-forgot"></span><a href="#">forgot password</a>
            </div>
        </div>
    </div>
</form>



/*------------------after that ----------------------*/

create a login_check.php and just copy paste this below code :-

<?php
session_start();
include('conn.php');

<?php
/* Redirect browser */
header("location:index.php");

/* Make sure that code below does not get executed when we redirect. */
exit;
?>


<?php

if(count($_POST)>0)
{   

    $result = mysql_query("SELECT * FROM admin WHERE username='".$_POST["username"]."' and password = '".$_POST["password"]."'");
    $row  = mysql_fetch_array($result);

if(is_array($row)) 
{
    $_SESSION["user_id"] = $row[user_id];
    $_SESSION["username"] = $row[username];

    $session_register["user_id"] = $row[user_id];
    $session_register["username"] = $row[username];
} 
else 
{
   $_SESSION['msg']="Invalid Username or Password";
   header("location:index.php");
}
}

if(isset($_SESSION["user_id"]))
{
    header("Location:dashboard.php");
}

?>




/*-----------------------after that ----------------------*/


create a dashboard.php and copy paste this code in starting of dashboard.php



<?php
session_start();
include('conn.php');
include('check_session.php');
?>




/*-----------------------after that-----------------*/ 



create a check_session.php which check your session and copy paste this code :- 


<?php
    if($_SESSION["user_name"]) 
    {
?>
    Welcome <?php echo $_SESSION["user_name"]; ?>. Click here to <a href="logout.php" tite="Logout">Logout.</a>
<?php
    }
    else
    {
     header("location:index.php");
    }
?>





if you have any query so let me know on my mail id [email protected]

Ответ 11

----------


<?php
echo '<div style="text-align:center;padding-top:200px;">Go New Page</div>'; 
		$gourl='http://stackoverflow.com';
		echo '<META HTTP-EQUIV="Refresh" Content="2; URL='.$gourl.'">';    
		exit;

?>


----------