第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

mysqli_fetch_array 如何一次獲取一行?

mysqli_fetch_array 如何一次獲取一行?

PHP
拉莫斯之舞 2022-12-23 15:49:46
我的 php 代碼如下: 這是測驗的一部分,我通過 ajax jQuery 在 html 頁面中顯示一個問題和 4 個多項選擇。我知道如何運行 while 循環(huán)并一個接一個地顯示所有數(shù)據(jù),但如何一次只顯示一個問題?所以在回答完一個問題后,我想查看下一個問題。是否可以運行一個計數(shù)器并一次拉出一個結(jié)果和下一個結(jié)果等等……?<?php header("Access-Control-Allow-Origin: *");require 'db.php';// making empty variable$createTable = "";        $test_id=$_POST["test_id"];        $sql=mysqli_query($con,"select * from mst_question where test_id='$test_id' ");    $counter = 0;while($row=mysqli_fetch_array($sql))        {       $counter++;        $createTable .= '<div class="text-subhead-2 text-center" style="background-color:#42A5F5">Question ';        $createTable .= $counter;        $createTable .= ' of 25</div>';        $createTable .= '<div class="panel panel-default paper-shadow" data-z="0.5">';        $createTable .= '<div class="panel-body">';        $createTable .= '<p class="text-body-2">';        $createTable .= $row['que_desc'];        $createTable .= '</p>';       $createTable .= '</div>';        $createTable .= '</div>';        $createTable .= '<div class="text-subhead-2 text-light">Your Answer</div>';        $createTable .= '<div class="panel panel-default paper-shadow" data-z="0.5">';        $createTable .= '<div class="panel-body">';        $createTable .= '<div class="radio radio-success">';        $createTable .= '<input type="radio" name="radio';        $createTable .= $counter;        $createTable .= '" id="radio1';        $createTable .= $counter;        $createTable .= '" value="';        $createTable .= $row['ans1'];        $createTable .= '" >';        $createTable .= '<label for="radio1';        $createTable .= $counter;        $createTable .= '">';        $createTable .= $row['ans1'];        $createTable .= '</label>';        $createTable .= '</div>';   
查看完整描述

1 回答

?
呼啦一陣風(fēng)

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ù)庫交互的非常友好和強大的方式。看一個例子。


查看完整回答
反對 回復(fù) 2022-12-23
  • 1 回答
  • 0 關(guān)注
  • 130 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號