мой логин не работает правильно.it показывает ошибку "Веб-страница имеет цикл перенаправления", как я могу это решить?

69
5

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

<?php
session_start();
$username="";

if(count($_POST)>0) {
$conn = mysql_connect("localhost","root","");
mysql_select_db("region_survey",$conn);
$result = mysql_query("SELECT * FROM survey_login WHERE username='" . $_POST["username"] . "' and password = '". $_POST["password"]."'");
$row = mysql_fetch_array($result);

if(is_array($row)) {
$_SESSION["Survey_id"] = $row[Survey_id];
$_SESSION["username"] = $row[username];
} else {
$username = "Invalid Username or Password!";
}
}

if(isset($_SESSION["Survey_id"])) {
header("Location:login.php");
}
?>

спросил(а) 2015-05-23T04:29:00+03:00 5 лет, 4 месяца назад
1
Решение
127

Изменить последний блок кода as-, если (! Isset ($ _ SESSION ["Survey_id"])) {header ("Location: login.php"); } }

Поскольку переменная сеанса не задана, перенаправляйте ее на login.php.

ответил(а) 2015-05-23T08:10:00+03:00 5 лет, 4 месяца назад
57

Я думаю, вам нужно перепроверить свою логику кода...
пользователь заполнит форму для входа с username и password и submit кнопку формы...

Значения формы приходят к form action attribute valuetarget of form

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

if true → вы сохраните пользовательский сеанс else → перенаправить пользователя на страницу входа



Насколько я понимаю из вашего кода, вы извлекаете данные пользователя из базы данных и сохраняете их в сеансе, если запрос имеет значение ressult...
Может быть, это может сработать, но это не полное решение...



Это пример:

session_start();
if( isset( $_POST['submitButtonName'] ) ) //means the form is submitted using submit button
{

$username = strip_tags( trim( $_POST['username'] ) ); //or something you need
$pass = strip_tags( trim( $_POST['password'] ) ); //or something you need

$sql = 'select * from tablename where username = ' . $username . ' and password= ' . $pass . ' limit 1';

//create a connection to your DB using PHP PDO class which is more safe and reliable
$conn = new PDO('mysql: host = localhost; dbname = databaseName;', $DBUsername, $DBPass);
$conn->exec("SET SESSION collation_connection = 'utf8_general_ci';");
$conn->exec("SET CHARACTER SET 'utf8';");
$conn->exec("set names 'utf8';");

$sendQueryUsingPDO = $conn->query( $sql );

$fetchDataFromDb = $sendQueryUsingPDO->fetchColumn();

if( $fetchDataFromDb['username'] == $username && $fetchDataFromDb['password'] == $pass )
{

//user is valid, write sessions and redirect it to your target page

}// end of if

else
{

//user is not valid and redirect it to login page and unset sessions

}//end of else

}//if user submit the form

Надеюсь, это может быть отправной точкой...



ОБНОВИТЬ :

Как вы просили в своем комментарии, он использует mysql:

$host = 'localhost';
$db = 'yourDB';
$us = 'yourDB_Username';
$ps = 'yourDB_Password';

$link = mysql_connect($host, $us, $ps);
if (!$link)
{
die('Could not connect: ' . mysql_error() );
}
else
{
echo 'Connected successfully';
}

mysql_select_db( $db, $link);

$result = mysql_query($sql);

$row = mysql_fetch_row($result);

if( $row['username'] == $username && $row['password'] == $pass )
{

// user is valid

}

else
{

//user is not valid

}

ответил(а) 2015-05-23T05:28:00+03:00 5 лет, 4 месяца назад
41

Измените следующий код

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

в

if(isset($_SESSION["Survey_id"])) {
unset($_SESSION["Survey_id"]);
header("Location:login.php");
}

ответил(а) 2015-05-23T04:43:00+03:00 5 лет, 4 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема