1 回答

TA貢獻(xiàn)1802條經(jīng)驗 獲得超6個贊
首先,您的代碼很危險,因為可以通過 sql 注入攻擊。您始終應(yīng)該使用參數(shù)綁定。
最簡單的方法是傳遞存儲在 mst_question 中的問題的 id,并通過 WHERE 子句(如 test_id)選擇一個。
//...
$test_id=$_POST["test_id"];
$questionId = filter_var($_POST['question_id'],FILTER_VALIDATE_INT);
if (!$questionId){
die('done');
}
$stmt= mysqli_prepare($con,"select * from mst_question where test_id='$test_id' AND id=?");
mysqli_stmt_bind_param(**$stmt**, 'd',$questionId);
mysqli_stmt_execute(**$stmt**);
// work with $stmt.
// f.e. your loop but now there will be only one execution
mysqli_stmt_close($stmt);
//...
$createTable .= '<input type="hidden" name="nextQuestionId" value="'.$nextQuestionId.'"/>';
//...
使用輸入字段,您將返回下一個問題的 ID,該 ID 可以在 JavaScript 代碼中的 url 參數(shù)中傳遞。
如果您擔(dān)心測驗作弊者,可以通過散列 nextQuestionId 來提高安全性。
//...
$stmt = mysqli_prepare($con,"select * from mst_question where test_id='$test_id' AND sha1(CONCAT('slat_',id))=?");
//...
$createTable .= '<input type="hidden" name="nextQuestionId" value="'.sha1('salt_'.$nextQuestionId).'"/>';
//...
這不是最好的解決方案,但需要對代碼進(jìn)行最少的更改。
我想建議切換到 PDO - 與數(shù)據(jù)庫交互的非常友好和強大的方式。看一個例子。
- 1 回答
- 0 關(guān)注
- 130 瀏覽
添加回答
舉報