Неопределенная ошибка переменной в моем PHP-скрипте - PullRequest
0 голосов
/ 12 января 2012

В чем проблема со следующим кодом? Пожалуйста, помогите мне.

Я хочу сопоставить admin-id и пароль из базы данных вместе с login-id и паролем обычных пользователей и далее хочу перенести управление в соответствующие формы.

Когда я запускаю этот код, он выдает следующие ошибки:

Примечание: неопределенная переменная: userstatus в C: \ xampp \ htdocs \ xampp \ Test \ HRMS \ extract.php в строке 25

Примечание: неопределенная переменная: usertype в C: \ xampp \ htdocs \ xampp \ Test \ HRMS \ extract.php в строке 30

$query1="select user_type,user_staus from `user_info` where name='$username' and  
password='$password'";
$fetched=mysql_query($query1);

while($record=mysql_fetch_assoc($fetched))
{
    while(each($record))
    { 
        $usertype=$record["user_type"];
        $userstatus=$record["user_staus"];
    }//closing of 1st while loop
}//closing of 2nd while loop

if($userstatus==1) //if is logged in already
{
    echo "Please login after some time";
    exit();
}

if($usertype == 0) // if user is not an admin
{
    $query1="select * from `user_info` where name='$username' and  password='$password'";
    $result = mysql_query($query1);
    if(mysql_num_rows($result) == 1) 
    {
        header("Location: user_form.php");
    }
}
else if($usertype == 1) //if the user is a normal user
{
    header("Location: admin_form.php");
}
else 
{
    echo "please register to login";
}   

Может кто-нибудь помочь мне найти проблему?

Ответы [ 2 ]

1 голос
/ 12 января 2012

Есть много проблем с вашим кодом, основная причина, по которой вы получаете ошибку, заключается в том, что $usertype и $userstatus не определены заранее и не проверены.
Но, на мой взгляд, это не главная проблема с вашим кодом.

Я хотел бы задать вам несколько вопросов:

  • Зачем создавать два цикла, если вам нужно выбрать одну строку?
  • Зачем запрашивать базу данных дважды, если вы уже знаете ответ?
  • Вы избегаете $username и $password для плохих символов, используя метод mysql_real_escape_string?

Вот пример того, как должен выглядеть этот код:

$query1 = "SELECT user_type,user_staus FROM `user_info` WHERE name='{$username}' AND password='{$password}' LIMIT 1";

$fetched = mysql_query($query1);

//check if record exists otherwise you would receive another notice that can 
//break redirect functionality
if (mysql_num_rows($fetched))
{
    $record = mysql_fetch_assoc($fetched);

    // make sure that value is integer
    if ((int)$record["user_staus"])
    {
        exit("Please login after some time");
    }
    else
    {
        $url = (bool)$record["user_type"] ? 'admin_form.php' : 'user_form.php';

        header("Location: {$url}");

        exit(0);
    }

}
else
{
    echo "please register to login";
}

ОБНОВЛЕНИЕ
Как предложено nikc.org ,убран 3-й уровень if, вложен и заменен троичным сравнением

0 голосов
/ 12 января 2012

вы пропустили правила области (поскольку вы не показали полный код)

while($record=mysql_fetch_assoc($fetched))
{
    while(each($record))
    { 
        $usertype=$record["user_type"];
        $userstatus=$record["user_staus"];
    }//closing of 1st while loop

} // закрытие 2-го цикла while

Здесь $ usertype и $ userstatus объявлены внутри цикла while {}. т. е. их область действия обращается к этому {}. как только из него выйдет код, $ userstatus и $ usertype умрут, и дальнейший доступ к ним невозможен.

вы должны сначала объявить переменные ut side в глобальной области.

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