【PHP+SQLite3】 ping-t라이크인 페이지 2(단 처치)~마법의 hidden 속성~
1. 마지막 연속 (개요)
마지막 기사 계속
【PHP+SQLite3】ping-t의 커맨드 문제 라이크인 페이지 1 --버튼 표시 전환에 난문이! ! -
(1) 카테고리와 문제 수 선택
(2) 문제를 무작위로 표시합니다. ---> 여기에서 시작
(3)입력 후, 대답 맞출 때는 확정 버튼(linux_command_test3.php로 천이)을,
응답하지 않고 돌아가려면 "뒤로"버튼을 누릅니다 (linux_command_test.php로 전환).
(4) 확정 버튼을 누르면 입력 값과 데이터베이스에 등록 된 답변을 확인하고,
문제에 대한 결과를 표시합니다. (있으면 〇, 잘못되면 ×)
또한 전체 문제 수에 대한 정답 수를 표시합니다.
2.hidden 속성
버튼을 눌렀을 때나 텍스트 박스의 입력치(응답:\$textN(N=1,2...)) 이외에도,
다른 페이지에서 이용하고 싶은 데이터가 있다.
이번 경우에 말하면,
「문제의 내용」(\$ar_quiz2N)이거나, 「총 문제수」($tcnt)가 거기에 해당한다.
그럴 때 텍스트 상자나 버튼 이름 등 앞에
등이라고 쓰면 보낼 수 있다.
3. 코드 (문제 및 답변 열 표시)
linux_command_test2.php
<!DOCTYPE html>
<html lang="ja">
<meta charset="utf-8">
<title>linuxコマンドテスト</title>
<?php
$l_cate0=isset($_POST["l_category"])?htmlspecialchars($_POST["l_category"]):null;
$q_num0=isset($_POST["l_num"])?htmlspecialchars($_POST["l_num"]):null;
echo "<h1>linuxコマンドテスト(".$l_cate0.")</h1>";
$ar_quiz=[];
$db_name='linux_quiz3.db';
$ext=file_exists($db_name);
$db1 = new PDO('sqlite:'.$db_name);
$query_all="SELECT * FROM tbl_linux WHERE category0 = ?";
function getQAarray($ar_temp,$num0){
array_splice($ar_temp,$num0,1);
return $ar_temp;
}
$ar_quiz2=[];
$db1 = new PDO('sqlite:'.$db_name);
$result_a=$db1->prepare($query_all);
//パラメータに$l_cate0をセット
$result_a->bindparam(1,$l_cate0);
//実行
$result_a->execute();
//検索結果を配列に格納する
while($select_data=$result_a->fetch(PDO::FETCH_ASSOC)){
array_push($ar_quiz,$select_data['sans0']);
}
$tcnt=count($ar_quiz);
//クイズの部分
if($tcnt>$q_num0){
$tcnt=$q_num0;
}
for($i=0;$i<$tcnt;$i++){
//ランダムにクイズを出す
$num0=rand(0,count($ar_quiz)-1);
array_push($ar_quiz2,$ar_quiz[$num0]);
$ar_quiz=getQAarray($ar_quiz,$num0);
}
?>
<form action="linux_command_test3.php" method="post">
<table>
<!-- クイズと回答欄を作成する。
さらにクイズ部分もhidden属性で送る -->
<?php for($i=0;$i<$tcnt;$i++){ ?>
<tr>
<th align="left"><?=$ar_quiz2[$i]?></th>
<input type="hidden" name="q<?=$i?>" value="<?=$ar_quiz2[$i]?>">
<td><input type="text" name="text<?=$i?>" size=70 maxlength=200></td>
</tr>
<?php } ?>
</table>
<input type="hidden" name="btn2" value="<?=$tcnt?>">
<input type="submit" value="確定">
</form>
<form action="linux_command_test.php" method="post">
<input type="submit" value="戻る">
</form>
</html>
4. 문제 및 답변 열 표시 (실행 결과)
화면운동의 문제로는 정말 어색하다.
하지만 일단 목적은 과연 있다.
수험 공부에서도 그랬지만,
추악해졌지만, 합격했기 때문에 그것이 좋다(실화)]라고 하는 것과 같을지도 모른다.
(혼자 생활의 스트레스로 단번에 마른 했지만)
5. 코드 (테스트 결과 표시 화면)
linux_command_test3.php
<!DOCTYPE html>
<html lang="ja">
<meta charset="utf-8">
<title>linuxコマンドテスト(結果)</title>
<h1>linuxコマンドテスト(結果)</h1>
<?php
$db_name='linux_quiz3.db';
$ext=file_exists($db_name);
$db1 = new PDO('sqlite:'.$db_name);
$query_sans="SELECT * FROM tbl_linux WHERE sans0 = ?";
//$qstr:問題 $astr:入力値 入力値と回答が等しいかチェックする関数
function CheckAns($db0,$qry0,$qstr,$astr)
{
$retOKNG="";
$result3=$db0->prepare($qry0);
//パラメータをセット
$result3->bindparam(1,$qstr);
$result3->execute();
//検索結果(回答)を配列に格納する
$select_data=$result3->fetch();
$cmd_str=$select_data['exam0']." ".$select_data['opt0'];
if($cmd_str == $astr){
$retOKNG="○";
}else{
$retOKNG="×";
}
return $retOKNG;
}
if(isset($_POST['btn2'])){
//ボタンの持つ値として総問題数を保持
$cnt0=$_POST['btn2'];
$okcnt=0;
for($i=0;$i<$cnt0;$i++){
$ret0=CheckAns($db1,$query_sans,$_POST["q".$i],$_POST["text".$i]);
if($ret0 == "○"){
$okcnt++;
}
echo $_POST["q".$i].":";
echo $_POST["text".$i].":".$ret0."</br></br>";
}
echo "</br></br>".$cnt0."中".$okcnt."が正解</br></br>";
}
?>
<form action="linux_command_test.php" method="post">
<input type="submit" value="戻る">
</form>
</html>
6. 테스트 결과 표시 화면 확인
※붉은 펜은 상기를 실행해도 표시되지 않습니다.
단지, 결과가 표시되고 있는 것을 강조하고 싶었을 뿐.
실은 이 결과 표시의 아래 부분에 「뒤로」버튼이 표시되어 있다.
Reference
이 문제에 관하여(【PHP+SQLite3】 ping-t라이크인 페이지 2(단 처치)~마법의 hidden 속성~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/knowledge87sun/items/7e86990101bfa8e418af텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)