今日はとみに暑いですねえ。この「とみ」って何だろう?
どうも、新顔のマッチーです。
さて、昨日も言ったようにPHPの勉強をしているわけなんですが、とりあえずブログのようなものを作ってみればPHPやMYSQLの基本、DBの使い方なんかが多少なりとも身に着くだろうということで、デザイン無視の機能だけに焦点を絞ったブログシステムを現在作成中です。
●IDとパスワードを入力するログイン画面がある
●記事が投稿できる(確認画面あり)
●投降した記事の一覧が見れる(タイトルだけ表示して本文は表示されない)
●投降した記事の編集や削除が行える
●コメント機能がある
大雑把にいうと、こんな感じのシステムでしょうか。
投稿画面やら確認画面やら投稿された記事の表示画面やら、単体ごとに作るだけなら、まあ今の僕にもたいして難しくはない。しかしPHPやMYSQLでこれらに連動した動きを持たせるとなると、もうどうしていいやら・・・。
今日つまったところでは個別記事の編集や削除を行うというところ。
例えば、こんな感じで投降した記事の一覧が表示されているとする。一覧といっても2件しかないけど。
右側に編集や削除のボタンがあるのが分かると思うんですけど(ちっちゃくて見えないかもしれないけど)、最初はどの記事の編集ボタンを押しても同じ記事(最新の記事)が表示されるようになってました。
一応、投稿した記事にはDBに格納する際に個別のidがついているので、formのアクションの際にそのidの値を取得してやれば何とかなった。
<form method="post" action="<?php echo WEB_ROOT ?>admin/admin.php">
<input type="hidden" name="rep_id" value="<?php echo $info3['rep_id'] ?>">
<tr>
<td class="under"><input type="checkbox" name="catalogue" <?php echo $check ?>></td>
<td class="under" width="250"><a href="<?php WEB_ROOT ?>/body/mbs.php?id=<?php echo $info3['rep_id'] ?>"><?php echo $info3['title'] ?></a></td>
<td class="under" width="100"><?php echo $info3['edit_date'] ?></td>
<td class="under" width="100" align="center">
<input type="submit" name="edit" value="編集">
<input type="submit" name="edit" value="削除">
</td>
</tr>
</form>
これが右側の記事の一覧を表示しているHTML。rep_idってのがDB内で記事に各個に割り振っているid(Auto incrementで一意な値にしてある)
今回の解決に至ったのは2行目のhiddenのところ。これにより編集ボタンや削除ボタンが押されると、rep_idの値が飛ばされる(飛ばされるって表現でいいのか?)ので、$_POSTで受け取れるようになる。あとはDBからそのidの記事をSELECTしてやればよい。
できるようになってみれば、こんなことで良かったのかと思えるのだけど、考え込んでいるうちは「こんなの今の俺の知識でクリアできんのかよ?」と切に思ったりした。hiddenのことなんて全く浮かばず、こんなことをしたりもした。
<input type="submit" name="<?php echo $info3['rep_id'] ?> value="編集">
if($_POST[$info3['rep_id'] == "編集") {
編集画面に移行
}
if文は別ファイルなので、formで何の値も送ってやらなければ、当然$_POST[]の中身は空だ。そのことをすっかり忘れていたからしばらくはどんなに頑張っても編集画面にいけなかったのだけど、hiddenで値を送ってやればいいんじゃんと気づいたら、巡り巡った末にsubmitのname属性にあんなことをする必要もないと分かり、
if($_POST["edit"] == "編集") {
$id = $_POST["rep_id"];
$query = "SELECT * FROM contribute WHERE rep_id = $id";
$result = mysql_query($query, $db);
$info = mysql_fetch_array($result);
編集画面に移行
}
最終的にこんな感じになった。
要はrep_idの値を受け取ってそのidの記事をDBから引っ張り出してくればそれで解決なんですよね。
言葉にすると簡単なのに、このソースにたどり着くまでに何時間もかかってしまうのが、ビギナーの証か・・・。
明日はパスについてちょこっと語りたいと思います。
LIGはWebサイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。