プロが教える店舗&オフィスのセキュリティ対策術

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

<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>

A 回答 (8件)

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



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

でリンクを表示し、shousai.php側でidを元に詳細データを
表示する仕組みをつくる
    • good
    • 0
この回答へのお礼

すいません

番号 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

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



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:34
    • good
    • 0
この回答へのお礼

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

お礼日時:2014/04/14 13:13

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



//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>

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

ありがとうございます

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

お礼日時:2014/04/14 15:11

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



で、どういうエラー?

この回答への補足

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

これです

補足日時:2014/04/14 15:37
    • good
    • 0
この回答へのお礼

ソ-スは

<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

> htmspecialchars()



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

この回答への補足

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

画面のソースをコピーしました
<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
    • good
    • 0

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

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

while($row = mysqli_fetch_array($result))

while($row = mysqli_fetch_array($result,MYSQLI_ASSOC))
    • good
    • 0
この回答へのお礼

ありがとうございます
<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

なんか噛み合ってないね


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

<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>


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

この回答への補足


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

こんな感じに出ます

補足日時:2014/04/15 10:02
    • good
    • 0
この回答へのお礼

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

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

お礼日時:2014/04/15 09:39

こうなるとおそらくもう釣りだと思うんだけど一応かいときます


もし釣りじゃなければ何か参考書でもかって基礎から学習したほうがいいと思います。

<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}
で削除することになります
    • good
    • 0
この回答へのお礼

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

何度もすいません

お礼日時:2014/04/15 13:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!