В чем проблема с следующим кодом? Пожалуйста, помогите мне.
Я хочу сопоставить 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 стороной в глобальной области.