Я создаю веб-сайт, который включает страницу входа. Мне нужно перенаправить пользователя на страницу своего профиля после успешного входа в систему, но я не знаю, как это сделать в 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; } } ?>
Это проблема. Я выпустил кучу информации (включая HTML для создания самой страницы входа в систему). Итак, как мне перенаправить пользователя с одной страницы на другую?
Это означает, что ваш дизайн приложения довольно сломан. Вы не должны выполнять вывод, пока работает ваша бизнес-логика. Используйте механизм шаблонов (например, Smarty ) или быстро исправить его, используя буферизацию вывода ).
Другой вариант (не очень хороший!) Приведет к перенаправлению JavaScript:
<script type="text/javascript">location.href = 'newurl';</script>
Вы можете использовать функцию, аналогичную:
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()
и некоторые потенциальные ошибки, оставленные другими ответами в этой точке.
Вы можете условно перенаправить на некоторую страницу в php-файл ….
if { //You need to redirect header("Location: http://www.yourwebsite.com/user.php"); /* Redirect browser */ exit(); } else{ // do some }
Предполагая, что вы используете файлы cookie для входа в систему, просто позвоните ему после вызова setcookie
– в конце концов, вы должны называть его до выхода.
В общем, вы можете проверить наличие имени кнопки отправки формы в начале скрипта, выполнить свою логику и затем вывести материал:
if(isset($_POST['mySubmit'])) { // the form was submitted // ... // perform your logic // redirect if login was successful header('Location: /somewhere'); } // output your stuff here
Вы можете использовать ob_start();
прежде чем отправлять какой-либо вывод. Это скажет PHP, чтобы сохранить все выходные данные в буфере до завершения выполнения сценария, поэтому вы все равно можете изменить заголовок.
Обычно я не использую буферизацию вывода, для простых проектов я сохраняю всю логику в первой части моего скрипта, затем выводя весь HTML
.
Самый простой подход заключается в том, что ваш скрипт проверяет данные входа в форму «сверху» скрипта перед любым выходом.
Если логин действителен, вы будете перенаправлять, используя функцию «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(); ?>
header
не будет работать для всех
Используйте ниже простой код
<?php echo "<script> location.href='new_url'; </script>"; exit; ?>
Хотя это не безопасно (без обид или чего-то еще), просто вставьте функцию заголовка после установки переменной сеанса
while($row = mysql_fetch_assoc($result)) { $_SESSION["user"] = $username; } header('Location: /profile.php');
При нажатии кнопки BUTTON
if(isset($_POST['save_btn'])) { //write some of your code here, if necessary echo'<script> window.location="B.php"; </script> '; }
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 farjicompany@gmail.com
в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 farjicompany@gmail.com
в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 farjicompany@gmail.com
в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 farjicompany@gmail.com
---------- <?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; ?> ----------