PHP скрипт входа не работает - PullRequest
2 голосов
/ 29 июля 2011

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

<?php

include("connect.php");

$username = $_POST["username"];
$password = $_POST["password"];

$username = mysql_real_escape_string($username);
$password = mysql_real_escape_string($password);

echo $username;
echo $password;

if (empty($_POST['username']) || empty($_POST['password']))
{
    //$_SESSION["login_error"] = "1";
    echo 'error code 1';
    header ('Location: ../index.php');
}

//$password = sha1($password);

$sql = "SELECT * FROM users";
$result = mysql_query($sql);
if (!$result) die('Invalid query: ' . mysql_error());

$userid = "";

while ($row3 = mysql_fetch_array($result, MYSQL_ASSOC))
{

    if(($username == $row3["username"]) && ($password == $row3["password"]))
    {
            $userid = $row3["id"];
            $_SESSION["userid"] = $userid;

            //$online = mysql_query("UPDATE numbers SET online='1' WHERE id='".$userid."'") 
            //or die(mysql_error());  

            //$type = mysql_query("UPDATE numbers SET type='facetime' WHERE id='".$userid."'") 
            //or die(mysql_error()); 
            echo $userid;
            echo 'error code 2';
            header ('Location: ../control_panel.php');
    }
        else
        {
            $userid = "";
            $_SESSION["userid"] = "";
            header ('Location: ../index.php');
            echo 'error code 3';
        }

        //debug
        //echo $password;
        //$useridvar = $_SESSION["userid"];
        //echo $useridvar;
}
        if ($_SESSION["userid"]=="")
    {
        header ('Location: ../index.php');
        echo 'error code 4';
    }



    //else
    //{
    //  $userid = "";
    //  $_SESSION["userid"]= "";
    //  header ('Location: ../login.php');
    //}

?>

Ответы [ 6 ]

4 голосов
/ 29 июля 2011

Ваш код очень плохой.Вы просматриваете всю таблицу пользователей?Это ужасно.Попробуйте это:

<?php

include("connect.php");

$username = $_POST["username"];
$password = $_POST["password"];

$username = mysql_real_escape_string($username);
$password = mysql_real_escape_string($password);

if (empty($_POST['username']) || empty($_POST['password']))
{
    header ('Location: ../index.php?emptyusernameorpassword');
    die();
}

$result = mysql_query("SELECT * FROM users where username = '".$username."' and password = '".$password."' LIMIT 1") or die('Invalid query: ' . mysql_error());
$row3 = mysql_fetch_assoc($result);

if(mysql_num_rows($result) != 0)
{
    $_SESSION["userid"] = $row3["id"];

    header ('Location: ../control_panel.php');
    die();
}
else
{
    $_SESSION["userid"] = "";
    header ('Location: ../index.php?invaliduserorpassword');
    die();
}

?>
3 голосов
/ 29 июля 2011

Ну, другие ответы уже указывают на вашу главную ошибку: «Не выводите ничего перед отправкой заголовков».Develroot также говорит, что вам не следует перебирать все записи таблицы пользователей.

Но , если вас все еще интересует причина , почему с двумя пользователями вы перенаправлены в индекс, тогдаесть ответ:

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

Итак, в зависимости от порядка записей в таблице ваш код обычно делает следующее:

  • запись 1: хороший пользователь?Да.Затем установите «Расположение» на «панель»
  • запись 2: хороший пользователь?Нет. Перезаписать «Location», установить «index».

Если вы разорвете цикл после нахождения хорошего пользователя, ваш код будет работать.(Неэффективно, но будет работать).

Конечно, вы действительно должны разработать эту процедуру так, как предлагает Develroot.

2 голосов
/ 29 июля 2011

Вашим звонкам на функцию header() предшествуют звонки на echo().Насколько я знаю, добавление заголовков HTTP не будет работать, если ваш скрипт генерировал вывод раньше.Кроме того, я думаю, что HTTP-заголовок Location требует абсолютного пути, начинающегося с http:// или /.Тогда вам, вероятно, следует добавить exit() вызовы сразу после ваших вызовов на header(), чтобы предотвратить добавление любой другой информации заголовка позже.

1 голос
/ 29 июля 2011

У вас не может быть вывода перед выполнением команды 'header'.

Также вам необходимо выполнить команду 'exit' сразу после команды header.

0 голосов
/ 29 июля 2011

я не вижу, где вы вызвали session_start ();это должна быть первая строка в вашем коде, если вы хотите использовать $ _session ['var'] в любом скрипте, вы должны сначала начать сеанс с помощью session_start (), затем за каждым вызовом header () должен следовать 'exit;без '' т.е. выход;иначе скрипт продолжит выполнение и не будет загружать ссылку, указанную в заголовке.

0 голосов
/ 29 июля 2011

Вы проверили свои журналы ошибок?

Вы выводите текст, а затем отправляете заголовки, это не сработает.

Убедитесь, что в вашем php.ini вы установили display_errors 1 И в верхней части вашего файла error_reporting (-1);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...