1

ここで私が間違っていることを誰かが見ることができますか? データベースのフィールドの値に応じて特定のページを含めようとしています。

確認するテーブルが 2 つあります。

ユーザー名が 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');}
    }
    }
4

2 に答える 2

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...
于 2012-08-09T12:27:51.627 に答える
1

まず第一に、これらの操作をループで実行する必要はありません。これは、while返される結果が 1 つまたは 0 つだけであるためです (主キーをチェックしていますよね?)。

次に、クエリが正しく設定されていません。単一引用符を使用していますが、エスケープしていません。

そこで、それを踏まえて次のことを行います。

$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 以降でサポート) を使用してください。どちらを使用すればよいかわからない場合は、この SO 記事 をお読みください

編集問題がどこにあるかわからない場合は、いつでもechoクエリを実行して、データベースに渡していると思われるものを確実に渡すことができます(多くの場合、クエリが機能しない場合、これは次のいずれかです、またはあなたの論理が悪い)。

于 2012-08-09T12:30:00.020 に答える