Php SQL if field.value ='?'包括page.php else

时间:2012-08-09 12:24:02

标签: php mysql

有谁能看到我在这里做错了什么? 我试图根据数据库中字段的值包含某个页面。

我有两张表要检查,

如果用户名出现在table.1中,而field.units = days inlcude days.php

如果用户名出现在table.1中,则field.units = hours inlcude hours.php

如果用户名出现在table.2中,而field.units = days inlcude days.php

如果用户名出现在table.2中,则field.units = hours inlcude hours.php

   $username = $USER->firstname.' '.$USER->lastname;

    echo $username;

    $is_academic_result = mysql_query('SELECT * from holiday_entitlement_academic where employee = '.$username.'');
    $is_business_result = mysql_query('SELECT * from holiday_entitlement_business_manual where employee = '.$username.'');

    if(mysql_num_rows($is_academic_result) > 0){
    while($is_academic = mysql_fetch_array($is_academic_result)) {
    if ($is_academic['units'] == 'days'){include('days.php');}
    else if ($is_academic['units'] == 'hours'){include('hours.php');}
    }
    }

    else if(mysql_num_rows($is_business_result) > 0){
    while($is_business = mysql_fetch_array($is_business_result)) {
    if ($is_business['units'] == 'days'){include('days.php');}
    else if ($is_business['units'] == 'hours'){include('hours.php');}
    }
    }

2 个答案:

答案 0 :(得分:1)

如果您的用户名确实包含 (这似乎是一个糟糕的设计),那么您在查询中的$username周围会丢失引号。正如你现在所做的那样,有一些语法问题,你在最后留下一个单引号,而不是引用$username

// Use double quotes on the string, and single around $username
$is_academic_result = mysql_query("SELECT * from holiday_entitlement_academic where employee = '$username'");
// Same thing...
$is_business_result = mysql_query("SELECT * from holiday_entitlement_business_manual where employee = '$username'");

如果您对结果资源进行了一些错误检查,则会显示这些问题:

if (!$is_academic_result) {
  // Query problem
  echo mysql_error();
}
// Same for the other query...

答案 1 :(得分:1)

首先,您不需要在while循环中执行任何这些操作,因为只返回一个或零结果(您正在检查主键,对吧?)。

其次,您的查询设置不正确 - 您使用单引号但从不转义它们。

因此,考虑到这一点,我们会做以下事情:

$is_academic_result = mysql_query('SELECT * from holiday_entitlement_academic where employee = \'' . $username . '\'');
$is_business_result = mysql_query('SELECT * from holiday_entitlement_business_manual where employee = \'' . $username . '\'');

if($is_academic = mysql_fetch_array($is_academic_result)) {
    switch($is_academic['units']) {
        case 'days':
            include_once('days.php');
            break;
        case 'hours':
            include_once('hours.php');
            break;
        default:
            break;
    }
} else if ($is_business = mysql_fetch_array($is_business_result)) {
    switch($is_business['units']) {
        case 'days':
            include_once('days.php');
            break;
        case 'hours':
            include_once('hours.php');
            break;
        default:
            break;
    }
}

请注意您应该停止使用mysql_*功能。他们被弃用了。而是使用PDO(从PHP 5.1开始支持)或mysqli(从PHP 4.1开始支持)。如果您不确定使用哪一个,read this SO article

编辑如果您不确定问题出在哪里,您可以随时echo查询,以确保您传递的是您认为传递给数据库的内容(更多内容)通常情况下,当查询不起作用时,它就是这个,或者你的逻辑是坏的。)