2012-06-22 4 views
0

Хорошо, это определенно простой вопрос и глупый, но поскольку я развивался на локальном хостинге, я даже не осознавал, что это проблема. Заголовок для перенаправления на страницу участников в loginscript не работает, потому что он установлен неправильно. Это не вызывало проблемы с wamp, а на реальном сервере. Сценарий включен в html-файл по причинам, которые слишком долго говорят здесь. В сценарии ничего не повторяется, пока что-то не пойдет не так, но затем сценарий остановлен. Где я должен разместить заголовок перенаправления?Куда поместить функцию заголовка

Вот Войти сценарий:

<?php 

// Connects to your Database 

include ("database.php"); 


//Checks if there is a login cookie 

if(isset($_SESSION['username'])) 


//if there is, it logs you in and directes you to the members page 

{ 
    echo '<div id="probwarn"><t1><b>You are already logged in! You do not need to do it again.</b></t1></div>'; 

} 


//if the login form is submitted 

if (isset($_POST['submit'])) { // if form has been submitted 

$flag = 0; // Safety net, if this gets to 1 at any point in the process, we don't upload. 

// makes sure they filled it in 

if(!$_POST['username'] | !$_POST['pass']) { 

    echo('<div id="probwarn"><t1>You did not fill in a required field.</t1></div>'); 
$flag = $flag + 1; 
    } 

// checks it against the database 





    $pass = htmlspecialchars(mysql_real_escape_string($_POST['pass'])); 
    $username = htmlspecialchars(mysql_real_escape_string($_POST['username'])); 




    $check = mysql_query("SELECT * FROM members WHERE username = '".$username."'")or die(mysql_error()); 



//Gives error if user dosen't exist 

$check2 = mysql_num_rows($check); 

if ($check2 == 0) { 
if($flag == 0) { 
    echo('<div id="probwarn"><t1>You must <a href="register.html"> <b>register</b></a> first.</t1></div>') ; 


      } 
    $flag = $flag + 1; 
    }   

$check = mysql_query("SELECT * FROM members WHERE username = '".$username."'")or  die(mysql_error()); 
$pass = htmlspecialchars(mysql_real_escape_string($_POST['pass'])); 
    $username = htmlspecialchars(mysql_real_escape_string($_POST['username'])); 

while($info = mysql_fetch_array($check))  

{ 

$_POST['pass'] = stripslashes($_POST['pass']); 

$info['password'] = stripslashes($info['password']); 

$_POST['pass'] = md5($_POST['pass']); 



//gives error if the password is wrong 

if ($_POST['pass'] != $info['password']) { 
if($flag == 0) { 
    echo('<div id="probwarn"><t1>Incorrect password, please try again.</t1> </div>'); 
$flag ++; 
    } } 

    }   





// if login is ok then we add a cookie 
if($flag == 0) { 
$pass = htmlspecialchars(mysql_real_escape_string($_POST['pass'])); 
$username = htmlspecialchars(mysql_real_escape_string($_POST['username'])); 



$_SESSION['username']=$username; 
$_SESSION['password']=$pass; 

//then redirect them to the members area 
//THIS IS THE HEADER 
header("Location: ../members.html"); 





} 

} 

else 





// if they are not logged in 

?> 
LOGIN FORM IS USUALLY HERE 
+4

Пожалуйста, не используйте функции 'mysql_ *' для нового кода. Они больше не поддерживаются, и сообщество начало процесс [устаревания] (http://goo.gl/KJveJ). См. [** красное поле **] (http://goo.gl/GPmFd)? Вместо этого вы должны узнать о [подготовленных утверждениях] (http://goo.gl/vn8zQ) и использовать либо [PDO] (http://php.net/pdo), либо [MySQLi] (http://php.net/ MySQLi). Если вы не можете решить, [эта статья] (http://goo.gl/3gqF9) поможет выбрать. Если вы хотите узнать, [это хороший учебник PDO] (http://goo.gl/vFWnC). –

+0

@Truth большое спасибо, я получу обучение –

+0

@Truth: В то время как полезный комментарий, было бы еще более полезно, если бы он подсказал легкость использования над положительными побочными эффектами безопасности. Не стоит лгать о гипотетической «усталости», когда руководство просто говорит [«обескуражен»] (http://php.net/mysql_query) пока. Избыточное сокращение URL-адресов является избыточным. – mario

ответ

3

Вы забыли exit после установки заголовка Местоположение. Если вы точно не знаете, что делаете, вы должны ВСЕГДА положить exit (или die()) после заголовка местоположения.

+0

'die (header (" Location: ... "));' и, вероятно, некоторый перехват ошибки, потому что вывод выводит заголовки бессмысленными. –

+1

Ну, это один из способов сделать это. Не то, как я это сделаю, лично, так как это немного запутанно. Я бы просто положил 'die()' сразу после вызова 'header()'. –

+0

Да, я случайно попал. : P –

0

вы можете использовать заголовок ('Location: address') всюду вашего кода, но лучше использовать функцию exit() после заголовка, если перенаправление не выполнено, другие коды не выполняются.

+0

Я использовал функцию выхода. Пробовал умереть также, но что jsut убивает остальную часть скрипта после входа в систему. Не выполняется перенаправление –

+0

Если это не работает, используйте перенаправление javascript:

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