Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我的PHP脚本中存在未定义的变量错误_Php_Mysql_Sql - Fatal编程技术网

我的PHP脚本中存在未定义的变量错误

我的PHP脚本中存在未定义的变量错误,php,mysql,sql,Php,Mysql,Sql,以下代码有什么问题?请帮帮我 我想匹配数据库中的管理员id和密码以及普通用户的登录id和密码,并进一步想将控件转移到相应的表单中 运行此代码时,会出现以下错误: 注意:第25行的C:\xampp\htdocs\xampp\Test\HRMS\extract.php中的未定义变量:userstatus 注意:未定义的变量:第30行C:\xampp\htdocs\xampp\Test\HRMS\extract.php中的usertype 有人能帮我找到问题吗?您的代码有很多问题,您收到错误的主要原因

以下代码有什么问题?请帮帮我

我想匹配数据库中的管理员id和密码以及普通用户的登录id和密码,并进一步想将控件转移到相应的表单中

运行此代码时,会出现以下错误:

注意:第25行的C:\xampp\htdocs\xampp\Test\HRMS\extract.php中的未定义变量:userstatus

注意:未定义的变量:第30行C:\xampp\htdocs\xampp\Test\HRMS\extract.php中的usertype


有人能帮我找到问题吗?

您的代码有很多问题,您收到错误的主要原因是
$usertype
$userstatus
未预定义且未验证。
但在我看来,这不是代码的主要问题

我想问你几个问题:

  • 如果需要获取一行,为什么要创建两个循环
  • 如果您已经知道答案,为什么还要查询数据库两次
  • 是否使用方法对坏字符转义
    $username
    $password
下面是此代码的示例:

$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";
}
更新

正如所建议的,删除了第三级
如果
嵌套并替换为三元比较

您忽略了范围规则(因为您没有显示完整的代码)

}//关闭第二个while循环

这里$usertype和$userstatus在内部while循环{}中声明。 也就是说,他们的范围是{}。一旦代码出来,$userstatus和$usertype就会消失,因此无法进一步访问


您必须首先在全局区域的ut端声明这些变量。

php通知不是错误。你的问题在别处。不管OP代码中的其他问题如何,注意事项确实很重要,需要解决。今天的通知是明天的噩梦。为什么
if
s的三级深嵌套?最内层可以与其“父级”合并以生成
if…elseif…else
。(在我看来,当你真的想要一个
bool
的时候,也可以选择
int
,这很难看,但那只是我的问题。)非常感谢你的快速关注。实际上,管理员已经显式地设置了usertype,对于admin为1,对于普通用户为0。用户状态是指登录状态,登录状态在用户登录时更新,注销时再次更新为正常状态。谢谢...@nikc.org我知道它不是一个完全最小化的代码,可以进一步优化,比如使用三元比较来避免嵌套,但是我留下了一个更简单的代码来分离逻辑。@Nazary:如果我不创建2个while循环,那么表信息将不会存储在数组中。我想检查试图登录的人是普通用户还是管理员。如果他是普通用户,则必须与0(用户类型)或1(管理员类型)匹配。我在一开始就检查用户状态,只是想知道他是否已经在其他地方登录了。但这个代码仍然不起作用。您是否有其他方法,或者我们是否可以相应地修改相同的代码?提前谢谢。@ShashiRoy如果用户登录到其他地方,您的意思是什么?提供的代码具有与您的相同的功能,但最小化了。
$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";
}
while($record=mysql_fetch_assoc($fetched))
{
    while(each($record))
    { 
        $usertype=$record["user_type"];
        $userstatus=$record["user_staus"];
    }//closing of 1st while loop