こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

PHP + MySQLを使用して詳細画面を開く

いま下記のソースで一覧画面が表示されます!
氏名をクリックしたら別ウインドウで詳細画面を表示させたいのですがやり方がわかりません
参考までに教えてください

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>一覧画面</title>
</head>
<body>
<BLOCKQUOTE>
<BR>一覧画面<BR><BR>
<?php
$con=mysqli_connect("localhost","root","password","db_test");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}


$result = mysqli_query($con,"SELECT * FROM tbl_test");

echo "<table border='1'>
<tr>
<th>番号</th>
<th>氏名</th>
<th>住所</th>
</tr>";

while($row = mysqli_fetch_array($result))
{
echo "<tr>";
echo "<td>" . $row['番号'] . "</td>";
echo "<td>" . $row['氏名'] . "</td>";
echo "<td>" . $row['住所'] . "</td>";

echo "</tr>";
}
echo "</table>";


mysqli_close($con);
?>

<BR><BR><BR> <A HREF="http://localhost/regist.php">
<INPUT TYPE = "SUBMIT" VALUE = "新規登録"></A>

</BLOCKQUOTE>
</body>
</html>

投稿日時 - 2014-04-14 11:57:20

QNo.8554035

すぐに回答ほしいです

質問者が選んだベストアンサー

こうなるとおそらくもう釣りだと思うんだけど一応かいときます
もし釣りじゃなければ何か参考書でもかって基礎から学習したほうがいいと思います。

<table border='1'>
<tr>
<th>番号</th>
<th>氏名</th>
<th>住所</th>
</tr>
<?PHP
$id=(isset($_GET["id"]))?((int) $_GET["id"]):0;
$con=mysqli_connect("localhost","root","password","db_test");
$result = mysqli_query($con,"SELECT `番号`,`氏名`,`住所` FROM tbl_test where `番号`={$id}");
while($row = mysqli_fetch_array($result,MYSLQI_ASSOC)){
print "<tr>";
print "<td>".htmlspecialchars($row["番号"])."</td>";
print "<td>".htmlspecialchars($row["氏名"])."</td>";
print "<td>".htmlspecialchars($row["住所"])."</td>";
print "</tr>";
eof;
}
?>
</table>

前回は<tr>の位置がまちがってました。
ちなみに、削除するときは
DELETE FROM tbl_test where `番号`={$id}
で削除することになります

投稿日時 - 2014-04-15 12:36:51

お礼

つりじゃないです
ありがとうございます。表示できました。
その画面からデータの編集を行いたいのですが、番号はそのままで氏名と住所だけ入力できるようにしたいのですがどこにどんな命令をいればいいと思いますか?

何度もすいません

投稿日時 - 2014-04-15 13:12:39

ANo.8

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(8)

ANo.7

なんか噛み合ってないね
詳細がみたいんでしょ?
だったら要素名と値を表示するんじゃないの?

<table border='1'>
<tr>
<th>要素名</th>
<th>値</th>
</tr>
<?PHP
$id=(isset($_GET["id"]))?((int) $_GET["id"]):0;
$con=mysqli_connect("localhost","root","password","db_test");
$result = mysqli_query($con,"SELECT * FROM tbl_test where `番号`={$id}");
while($row = mysqli_fetch_array($result,MYSLQI_ASSOC)){
print "<tr>";
foreach($row as $key=>$val){
print "<td>".htmlspecialchars($key)."</td>";
print "<td>".htmlspecialchars($val)."</td>";
}
print "</tr>";
}
?>
</table>


そもそもテーブルの要素は「番号」と「氏名」と「住所」しかないの?
だったら元ページで一覧表示しているんだから、わざわざ詳細出す意味ないでしょ?

投稿日時 - 2014-04-14 17:29:07

補足


番号 氏名 住所
番号 10  氏名 あ  住所 い

こんな感じに出ます

投稿日時 - 2014-04-15 10:02:13

お礼

ありがとうございます。
詳細を1件ずつ出してその画面からデータの更新や削除を行いたいので

番号、氏名、住所しかないです

投稿日時 - 2014-04-15 09:39:59

ANo.6

http://www.php.net/manual/ja/mysqli-result.fetch-array.php

MYSQLI_ASSOCを指定してみてください

while($row = mysqli_fetch_array($result))

while($row = mysqli_fetch_array($result,MYSQLI_ASSOC))

投稿日時 - 2014-04-14 16:51:46

お礼

ありがとうございます
<html>
<body>
<table border='1'>
<tr>
<th>番号</th>
<th>氏名</th>
<th>住所</th>
</tr>
<tr><td>番号</td><td>1</td><td>氏名</td><td>米倉 隆諭</td><td>住所</td><td>福井県鯖江市大倉町92丁目268-6495</td></tr></table></body>
</html>

まだ番号、氏名、住所がひとつずつずれています

tableにはできないのでしょうか

投稿日時 - 2014-04-14 17:13:11

ANo.5

> htmspecialchars()

それは失礼しました、typoです
該当関数名を htmlspecialchars() に書きなおしてみてください

投稿日時 - 2014-04-14 15:59:42

補足

すいません!自分も気がつきませんでした。
できました。
出来たのですが表示がおかしいです
番号や氏名や住所が二回表示されます

画面のソースをコピーしました
<html>
<body>
<table border='1'>
<tr>
<th>番号</th>
<th>氏名</th>
<th>住所</th>
</tr>
<tr><td>0</td><td>4</td><td>番号</td><td>4</td><td>1</td><td>渡川 幹知</td><td>氏名</td><td>渡川 幹知</td><td>2</td><td>岩手県奥州市前沢区長根52丁目295-315</td><td>住所</td><td>岩手県奥州市前沢区長根52丁目295-315</td></tr></table></body>
</html>

投稿日時 - 2014-04-14 16:09:51

ANo.4

>ここでエラーがおき先に進めません

で、どういうエラー?

投稿日時 - 2014-04-14 15:32:57

補足

Call to undefined function htmspecialchars() in C:\WWW\test\htdoes\exit.php on line 17

これです

投稿日時 - 2014-04-14 15:37:42

お礼

ソ-スは

<html>
<body>
<table border='1'>
<tr>
<th>番号</th>
<th>氏名</th>
<th>住所</th>
</tr>
<?php
$id=(isset($_GET["id"]))?((int) $_GET["id"]):0;
$con=mysqli_connect("localhost","root","admin","db_test");
$result = mysqli_query($con,"SELECT * FROM tbl_test where `番号`={$id}");
while($row = mysqli_fetch_array($result))
{
print "<tr>";
foreach($row as $key=>$val)
{
print "<td>".htmspecialchars($key)."</td>";
print "<td>".htmspecialchars($val)."</td>";
}
print "</tr>";
}
print "</table>";

?>
</body>
</html>

投稿日時 - 2014-04-14 15:41:21

ANo.3

もはや何がわからないのかわからないわ・・・

//shousai.php
<html>
<body>
<table border='1'>
<tr>
<th>要素名</th>
<th>値</th>
</tr>
<?PHP
$id=(isset($_GET["id"]))?((int) $_GET["id"]):0;
$con=mysqli_connect("localhost","root","password","db_test");
$result = mysqli_query($con,"SELECT * FROM tbl_test where `番号`={$id}");
while($row = mysqli_fetch_array($result)){
print "<tr>";
foreach($row as $key=>$val){
print "<td>".htmspecialchars($key)."</td>";
print "<td>".htmspecialchars($val)."</td>";
}
print "</tr>";
}
print "</table>";
}
?>
</body>
</html>

的なこと・・・前回例示したつもりだったんですが
手抜きで書いてあるので環境に合わせてこまかいバグがあるかもしれないので
うまく調整してください

投稿日時 - 2014-04-14 14:54:00

お礼

ありがとうございます

foreach($row as $key=>$val){
print "<td>".htmspecialchars($key)."</td>";
print "<td>".htmspecialchars($val)."</td>";
}
ここでエラーがおき先に進めません

投稿日時 - 2014-04-14 15:11:57

ANo.2

あれ?わからなかったですか?

echo "<table border='1'>
<tr>
<th>詳細</th>
<th>番号</th>
<th>氏名</th>
<th>住所</th>
</tr>";

while($row = mysqli_fetch_array($result))
{
echo "<tr>";
echo "<td><a href=\"shousai.php?id=" . $row['番号'] . "\">詳細</a></td>";
echo "<td>" . $row['番号'] . "</td>";
echo "<td>" . $row['氏名'] . "</td>";
echo "<td>" . $row['住所'] . "</td>";

echo "</tr>";
}
echo "</table>";

のような処理です。
なお$rowを表示する際はhtmlspecialchars()を入れた方がいいかもしれません。
あとは詳細表示するプログラム側で
SELECT * FROM tbl_test where 番号=○○
となるようなSQL文を発行します
○○の部分は$_GETの値を参照しますがインジェクション対策で
プリペアド処理などを入れたり、バリデートする必要があるかもしれません。

最終的に
print "<table>";
while($row = mysqli_fetch_array($result))
{
print "<tr>";
foreach($row as $key=>$val){
print "<td>".htmspecialchars($key)."</td>";
print "<td>".htmspecialchars($val)."</td>";
}
print "</tr>";

}
print "</table>";

のような処理で一覧を表示させます

投稿日時 - 2014-04-14 13:00:10

補足

クリックしたデータを表示されるにはどうしたらいいですか?

投稿日時 - 2014-04-14 13:34:45

お礼

ありがとうございます。
何度もすいません
shousai.phpは何って書けばいいですか?
参考までにおしえてください

投稿日時 - 2014-04-14 13:13:16

ANo.1

仕様がまったくわからないので、なんとなくこんな感じかと予想しつつ・・・

tbl_testのプライマリキーないしユニークなidを拾って
レコードを表示する際に
<a href="shousai.php?id=○○">詳細</a>

でリンクを表示し、shousai.php側でidを元に詳細データを
表示する仕組みをつくる

投稿日時 - 2014-04-14 12:10:40

お礼

すいません

番号 int プライマリーキー
氏名 varchar
住所 varchar

登録画面のソース
<HTML>
<HEAD><TITLE>新規登録</TITLE></HEAD>
<BODY>
<BLOCKQUOTE>
<FORM ACTION = "insert.php" METHOD = "POST">
<BR><BR>登録画面<BR><BR>
番号 <INPUT TYPE="NAMBER" NAME = "ID"><BR><BR>
氏名 <INPUT TYPE="TEXT" NAME = "NAME"><BR><BR>
住所 <INPUT TYPE="TEXT" NAME = "ADDR"><BR><BR>
<A HREF="http://localhost/top.php">
<INPUT TYPE = "SUBMIT" VALUE = "登録する"></A>
<A HREF="http://localhost/top.php">一覧に戻る</A>

</BODY>
</BLOCKQUOTE>
</FORM>
</BODY>
</HTML>

投稿日時 - 2014-04-14 12:20:13

あなたにオススメの質問