参考書の演習問題の解答がなく、プログラムの書き方に詰まってしまったので、質問させていただきます
PHP
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" 2 "http://www.w3.org/TR/html4/strict.dtd"> 3<html> 4<head> 5 <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/> 6 <title>Webシステム(データベースの利用例)</title> 7</head> 8<body> 9 <h1>Webシステム</h1> 10 <p>データベースを利用するPHPプログラムの例</p> 11 <?php 12 $link = mysqli_init(); 13 // MySQLに接続する。ユーザ名とパスワードは,自分がサーバに用意したものを書く 14 // 使用するデータベースを選択する 15 $db = mysqli_real_connect( 16 $link, 'localhost:8889', 'aaa', 'aaa', 'support_db', 8889); 17 if (! $db) { 18 exit ('MySQLには接続できません.'); 19 } 20 mysqli_set_charset($link, 'utf8'); 21 22 // フォームに入力されているかどうか 23 $snum = ""; 24 if(isset($_GET['snum'])) { 25 // 入力フォームの内容を取得する 26 $snum = @trim($_GET['snum']); 27 // selectコマンドを実行する 28 $query="SELECT * FROM gakusei_t where snumber='$snum'"; 29 //$query="SELECT * FROM gakusei_t"; 30 $result = mysqli_query($link, $query); 31 if (! $result) { 32 exit ('コマンドを実行できません.'); 33 } 34 } 35 ?> 36 37 <form action="" method="GET"> 38 <p>学籍番号:<input type="text" name="snum" value=" 39 <?php 40echo $snum; 41 ?> 42"/> <input type="submit" value="送信する"/> 43 </p></form> 44 <p> 45 <?php 46 if (isset($snum) != "" && is_numeric($snum) && mysqli_num_rows($result) == 1) { 47 $row = mysqli_fetch_array($result); 48 echo "<table border = \"1\">\n"; 49 echo "<tr>\n"; 50 echo "<th>学籍番号</th>\n"; 51 echo "<th>氏名</th>\n"; 52 echo "<th>出身</th>\n"; 53 echo "<th>クラス</th>\n"; 54 echo "</tr>\n"; 55 echo "<tr>\n"; 56 echo "<td align='right'>" . $row['snumber'] . "</td>\n"; 57 echo "<td>" . $row['sname'] . "</td>\n"; 58 echo "<td>" . $row['syusshin'] . "</td>\n"; 59 echo "<td align='right'>" . $row['class'] . "</td>\n"; 60 echo "</tr>\n"; 61 echo "</table>\n"; 62 } else { 63 //echo ":" . $snum . ":" . isset($snum) . ":" . is_numeric($snum) . ":" . mysql_num_rows($result); 64 } 65 ?> 66 </p> 67</body> 68</html>
こちらのPHPプログラムを
選択ボックスで学籍番号を選択すると、その学籍番号の学生テーブルと履修テーブルの内容を表示するPHPプログラムに変えたいです
今は
$query="SELECT * FROM gakusei_t where snumber='$snum'";
のところを
$query="SELECT * FROM gakusei_t NATURAL JOIN risyu_t WHERE gakusei_t.snumber='$snum' AND risyu_t.snumber='$snum'";
に変えて、
テーブルを表示する部分を
<?php if (isset($snum) != "" && is_numeric($snum) && mysqli_num_rows($result) == 1) { $row = mysqli_fetch_array($result); echo "<table border = \"1\">\n"; echo "<tr>\n"; echo "<th>学籍番号</th>\n"; echo "<th>氏名</th>\n"; echo "<th>出身</th>\n"; echo "<th>クラス</th>\n"; echo "<th>履修科目</th>\n"; echo "</tr>\n"; echo "<tr>\n"; echo "<td align='right'>" . $row['snumber'] . "</td>\n"; echo "<td>" . $row['sname'] . "</td>\n"; echo "<td>" . $row['syusshin'] . "</td>\n"; echo "<td align='right'>" . $row['class'] . "</td>\n"; echo "<td>\n"; foreach($row['risyu'] as $risyu){ echo $risyu['kamoku'] . "(" . $risyu['hyouka'] . ") <br\>\n"; } echo "</td>\n"; echo "</tr>\n"; echo "</table>\n"; } else { //echo ":" . $snum . ":" . isset($snum) . ":" . is_numeric($snum) . ":" . mysql_num_rows($result); } ?>
このように変えて学籍番号を入力したときに履修テーブルの内容を持ってくることができるか試したのですが、テーブルが出てきませんでした。
先程のsqlで$snumの場所に1212001と指定し、検索したものを下に載せます
このように出るので、sql自体は間違っていないと思うのですが、表示の仕方がわかりません。
回答3件
あなたの回答
tips
プレビュー