0

回答への参照をたどろうとしていますが、どのように書くべきかわかりません:

empty() は '0' を空とみなすので、 $p_student = empty($_POST["student"])?'':$_POST["student"]; のようになります。$p_student は、$_POST["student"] が '0' の場合に true です...結果として、以下の場合は常に 'default' になるため、empty() および大丈夫だと思います... (もちろん、$p_student と $p_question の両方についてです...)

上記の例に一致するようにケースステートメントを設定しましたが、私の質問は、上記の例に応じて $p_student をどのように記述すればよいですか?

私の試み:

// Check whether a specific student was selected
    $p_student = empty($_POST["student"])?'0':$_POST["student"];

    switch($p_student){
    case -1:
        //dont' add where filters
        break;
    default:
        $where[] = 'sa.StudentId = ?';
        $parameters[] .= $_POST["student"];
        $parameterTypes .= 'i';
    }

アップデート:

私がやろうとしていたのは、Allオプションの場合はケース -1 を実行し、それ以外の場合はデフォルトを実行することです。これが、ドロップダウン値でこの質問をしている理由です。

学生:

<select name="student" id="studentsDrop">
<option value="-1">All</option>
<option value="39">Luke Mcfadzen</option>
<option value="40">Chris Tucker</option>
</select>

質問:

<select name="question" id="questionsDrop">
<option value="-1">All</option>
<option value="72">1</option>
<option value="73">2</option>
</select>

ユーザーがすべての学生を選択するか、個々の学生を選択するか、すべての質問を選択するか、個々の質問を選択するかどうかに応じて、動的なwhere句が試みられています。個人の場合は、where句を使用して学生を検索し、質問についても同じです。すべての学生の場合、where条件は必要ありません特定の学生を探しているわけではないため、これは質問に対しても同じように機能します。クエリには、必須の WHERE 条件チェックがあります。q.SessionId = ?

次のようなエラーが表示されます。

$selectedstudentanswerqry = "
    SELECT
    sa.StudentId, StudentAlias, StudentForename, ...
    FROM Student st
    ...
    ";

    // Initially empty
    $where[] = "q.SessionId = ?";
    $parameters[] = $_POST["session"];
    $parameterTypes = 'i';


    //check if POST is empty

    // Check whether a specific student was selected
//LINE 345 ERROR
$student_id = (isset($_POST['student'])) ? $mysqli->real_escape_string(trim($_POST['student'])) : null ;


if (is_numeric($student_id)){ //If student ID is a numeric value
  $where[] = "sa.StudentId = ?" ;
  $parameters[] = ((int)$student_id == -1) ? "sa.StudentId" : $student_id  ;
  $parameterTypes .= "i" ;
}

    // Check whether a specific question was selected

$question_id = (isset($_POST['question'])) ? $mysqli->real_escape_string(trim($_POST['question'])) : null ;

if (is_numeric($question_id)){ //If student ID is a numeric value
  $where[] = "q.QuestionId = ?" ;
  $parameters[] = ((int)$question_id == -1) ? "q.QuestionId" : $question_id  ;
  $parameterTypes .= "i" ;
}

    // If we added to $where in any of the conditionals, we need a WHERE clause in
    // our query
    if(!empty($where)) {
        $selectedstudentanswerqry .= ' WHERE ' . implode(' AND ', $where);
        global $mysqli;
        $selectedstudentanswerstmt=$mysqli->prepare($selectedstudentanswerqry);
        // You only need to call bind_param once

        if (count($where) == 1) {
        $selectedstudentanswerstmt->bind_param($parameterTypes, $parameters[0]);
    }
    else if (count($where) == 2) {
        $selectedstudentanswerstmt->bind_param($parameterTypes, $parameters[0], $parameters[1]);
    }
    else if (count($where) == 3) {
        $selectedstudentanswerstmt->bind_param($parameterTypes, $parameters[0], $parameters[1], $parameters[2]);
    }

    }

    $selectedstudentanswerqry .= "
      GROUP BY sa.StudentId, q.QuestionId
      ORDER BY StudentAlias, q.SessionId, QuestionNo
    ";

// get result and assign variables (prefix with db)
$selectedstudentanswerstmt->execute(); 
$selectedstudentanswerstmt->bind_result(...);   

$selectedstudentanswerstmt->store_result();
$selectedstudentanswernum = $selectedstudentanswerstmt->num_rows(); 
4

2 に答える 2

1
$p_student = -1;
if(isset($_POST["student"]) && filter_var($_POST["student"], FILTER_VALIDATE_INT) !== FALSE && trim($_POST["student"]) >= 0 ) {
    $p_student = $_POST["student"];
}

....
于 2013-02-18T00:06:06.330 に答える
0

$_POST['student'] が時々あると思われる場合:

  • 0 int
  • "" または "0" を文字列として
  • 空の配列

使用禁止empty() ;

これをチェックしてください(Updated)

$student_id = (isset($_POST['student'])) ? mysqli_real_escape_string($mysqli, trim($_POST['student'])) : null ;

if (is_numeric($student_id)){ //If student ID is a numeric value
  $where[] = "sa.StudentId = ?" ;
  $parameters[] = ((int)$student_id == -1) ? "sa.Student_id" : $student_id  ;
  $parameterTypes .= "i" ;
}
于 2013-02-18T00:10:15.270 に答える