Неопределенная ошибка переменной в моем скрипте PHP

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

Я хочу сопоставить admin-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"; } 

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

Есть много проблем с вашим кодом, основная причина, по которой вы получаете сообщение об ошибке, состоит в том, что $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 вложен и заменен тройным сравнением

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

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

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

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

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