#for文の多重ループがうまくできません
初めまして。
phpでwebサイトを作っています。
プログラミングは、まだまだ初心者で、昨日、こちらのteratailの中で、アドバイスをいただき、for文について少し学んだ程度です。いろいろ調べながらサイトを作っています。
さて、ただいまクイズのサイトを作っています。
10問あるクイズの内、8問正解すると、
以下のテーブルにデータがINSERTされるようにしています。
※user_idは、ユーザー名。ユーザーによって変わります。
※subject_idは、クイズの種類。クイズの種類によって1から10まであります。
※starは、8問正解を何回達成したかを示す数値です。
#やりたいこと
このテーブルのsubject_idカラムの値(数値)を入れた変数$starを作り、
その中に、starカラムの値を格納したいです。
例えば、
1行目のレコードは、subject_idが2で、starが3ですが、この場合は、
$star2 = 3; となるようにしたいです。
3行目のレコードは、subject_idが5で、starが1ですが、この場合は、
$star5 = 1; となるようにしたいです。
上記をfor文を使ってしたいです。
ユーザーによって、subject_idとstarカラムはバラバラです。レコード数が何件かもユーザーごとに違います。
以下が記述したスクリプトです。
テーブルのsubject_idカラムは、2、3、5、7と値があるので、
html箇所の
$star2
$star3
$star5
$star7
に、starカラムの値、3、1、1、1が表示されると思ったのですが、
何も表示されません。
for文の多重ループのところで、間違いがありますでしょうか?
php
1<?php 2 3session_start(); 4$user_id = $_SESSION['user_id']; 5 6$star1=""; 7$star2=""; 8$star3=""; 9$star4=""; 10$star5=""; 11$star6=""; 12$star7=""; 13 14require_once('config.php'); 15$dsn = 'mysql:host=' . $config['host'] . '; dbname=' . $config['database'] . '; charset=utf8'; 16$user = $config['user']; 17$password = $config['password']; 18 19//①user_idを条件にして starテーブルを読み込む 20//②指定したユーザーのレコードを複数取得する 21try{ 22 $dbh = new PDO($dsn, $user, $password); 23 $sql = " SELECT * FROM star WHERE user_id = :user_id"; 24 $stmt = $dbh->prepare($sql); 25 $stmt->bindValue(':user_id', $user_id); 26 $res = $stmt->execute(); 27 $data = $stmt->fetchAll();//③fetchAllで複数レコードの値を全て取得する 28 29 if(isset($data)){ //④もし、データがあれば 30 for($n = 0; $n <= 3; $n++){ //⑤for文で、$nに0から3を入れて繰り返す 31 for($i = 1; $i <= 7; $i++){ //⑥for文で、$iに1から7を入れて繰り返す 32 if($data[$n]['subject_id'] === $i){ 33 //⑦もし、$dataの配列の要素[$n]のsubject_idカラムの値が、$iの値と一致したら、 34 ${'star'.$i} = $data[$n]['star']; 35 //⑧$dataの配列の要素[$n]のstarカラムの値を、$star[$i]に格納する 36 } 37 } 38 } 39 } 40 41}catch(PDOException $e){ 42 echo $e->getMessage(); 43 exit; 44} 45 46 ?> 47 48 49 50<!DOCTYPE html> 51<html lang="ja"> 52<head> 53 <meta charset="UTF-8"> 54 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 55 <meta http-equiv="X-UA-Compatible" content="ie=edge"> 56 <title>サンプル</title> 57 58 <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous"> 59 60</head> 61<body> 62 63 <table> 64 65 <tr> 66 <td> 67 <small>クイズ1</small> 68 </td> 69 <td> 70 <?php echo $star1; ?> 71 </td> 72 </tr> 73 74 <tr> 75 <td> 76 <small>クイズ2</small> 77 </td> 78 <td> 79 <?php echo $star2; ?> 80 </td> 81 </tr> 82 83 <tr> 84 <td> 85 <small>クイズ3</small> 86 </td> 87 <td> 88 <?php echo $star3; ?> 89 </td> 90 </tr> 91 92 <tr> 93 <td> 94 <small>クイズ4</small> 95 </td> 96 <td> 97 <?php echo $star4; ?> 98 </td> 99 </tr> 100 101 <tr> 102 <td> 103 <small>クイズ5</small> 104 </td> 105 <td> 106 <?php echo $star5; ?> 107 </td> 108 </tr> 109 110 <tr> 111 <td> 112 <small>クイズ6</small> 113 </td> 114 <td> 115 <?php echo $star6; ?> 116 </td> 117 </tr> 118 119 <tr> 120 <td> 121 <small>クイズ7</small> 122 </td> 123 <td> 124 <?php echo $star7; ?> 125 </td> 126 </tr> 127 128 129 130 </table> 131</body> 132</html> 133 134
回答2件
あなたの回答
tips
プレビュー