2011-02-02 3 views
16

Я создаю сайт, который включает страницу входа. Мне нужно перенаправить пользователя на страницу своего профиля после успешного входа в систему, но я не знаю, как это сделать в 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; 
    } 
} 
?> 
+0

im немного запутано здесь, в основном, функция заголовка - это то, что вы ищете, но я думаю, что вы используете его неправильно здесь, поэтому страница html - это страница входа в систему, и есть форма для входа в журнал когда вы нажимаете кнопку «Отправить» или авторизуетесь или что-то еще, что происходит, куда вы направляетесь? – mcbeav

+0

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

+0

Кстати, вы писали сценарий для входа в систему или используете ли вы готовый? это важно. – mcbeav

ответ

12

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

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

Другой вариант будет выводить JavaScript для перенаправления:

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

То, что я сделал, выводит весь мой HTML для создания страницы входа в систему, после чего моя логика запускается впоследствии. Это просто форма, которую я создал с полем имени пользователя и пароля. Пользователь вводит его и нажимает логин, и у меня есть сообщение обратно в тот же файл login.php, где я запускаю логику, чтобы узнать, действительно ли это пользователь. а затем перенаправить их в свой профиль. Если это не так, как я должен его структурировать, то в чем лучшая практика? – jasonaburton

+0

вот некоторый псевдокод: if (форма отправлена) {обрабатывать данные и перенаправлять + выходить в случае успеха} показать форму; если он был отправлен, заполнить его с представленными значениями – ThiefMaster

+0

Как мне перенаправить? Поскольку форма отражается на той же странице, я не могу использовать header() – jasonaburton

2

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

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

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

    // ... 
    // perform your logic 

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

// output your stuff here 
2

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

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

+1

Как сказал ThiefMaster, лучше всего ничего не выводить до тех пор, пока не будет очень поздно (и только если это действительно необходимо), но буферизация вывода по-прежнему хороша, чтобы гарантировать, что на самом деле ничего не отправлено до того, как все заголовки отсутствуют. Вы можете даже отбросить весь выходной буферный контент, если позже обнаружите какую-либо проблему при генерации вывода с помощью 'ob_clean()'/'ob_end_clean()'. – Archimedix

+0

Буферизация вывода была моей второй попыткой, но это было выяснено. Спасибо за помощь, тем не менее! – jasonaburton

0

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

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

это должно работать, оно должно перенаправляться только при выполнении запроса. – mcbeav

+0

Не приняты. Я новичок в этом. Это опыт обучения для меня. – jasonaburton

+0

Я попытался поместить его после сеанса, но функция заголовка не будет работать после того, как я что-то запустил на странице (HTML). – jasonaburton

1

Самый простой подход заключается в том, что ваш скрипт проверяет форму отправленный логин данные «на вершине "сценария перед любым выходом.

Если логин действителен, вы будете перенаправлять, используя функцию «заголовок».

Даже если вы используете «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(); 
?> 
0

На КНОПКА нажмите действия

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

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

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

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

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

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

+1

Обновлено с помощью контекста. –

0
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] 
7

можно условно перенаправлять на какой странице в файле PHP ....

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

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

Использование ниже простого кода

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

---------- 
 

 

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

 
?> 
 

 

 
----------

Смежные вопросы