簡単なお知らせを表示する(5)
やっと週末がきた。続き続き。今回は「リンクを入れる」っていう機能を考えてみます。とりあえずリンクを指定できる項目を1つ作って、値が入ってたら「>>詳細はこちら」っていうテキストリンクを本文の下に追加するっていう形を作ってみる。
先日、今まで書いてたソースにアドバイス頂いたので、修正したソースを元に作っていきますね。
考えた流れ
- 入力ページ(index.html)にURLを入力するためのinputタグを追加。
- 処理・表示をするページ(news.php)で受け取ったURLを変数に入れる。
- URLは入らない場合もあるかもしれないので必須項目にはしない。
- 受け取った値をエスケープ処理する。
- 配列をタブ区切りで結合するところにURLの分を追加。
- タブ区切りで分解する部分にもURLの分を追加。
- HTML表示させる部分にもしURLの変数に値が入ってたら「詳細はこちら」のリンクを加える。
URLを入力するためのinputタグ追加。
例のごとくサラっとindex.htmlに追加。
<form method="post" action="news.php">
<dl>
<dt>タイトル</dt>
<dd><input type="text" name="subject" /></dd>
<dt>本文</dt>
<dd><textarea name="body" cols="50" rows="6"></textarea></dd>
<dt>リンク先</dt>
<dd><input type="text" name="url" /></dd>
</dl>
<p>パスワード:<input type="password" name="password" /> <input type="submit" name="submit" value="送信する" /></p>
</form>
受け取ったURLを変数に入れる。
受け取った値をエスケープ処理する。
ここからはまた処理・表示側のnews.phpのお話。まずは受け取った値を変数$urlに入れる。
$url = isset($_POST["url"]) ? $_POST["url"] : NULL;
んで、エスケープ処理。
$url = htmlspecialchars($url, ENT_QUOTES);
配列をタブ区切りで結合するところにURLの分を追加。
タブ区切りで分解する部分にもURLの分を追加。
パパっと今回追加した変数を加えた。
$news = implode("\t",array($subject,$body,$url,$time));
list($subject2,$body2,$url2,$time2) = explode("\t",$news_list[$i]);
もしURLの変数に値が入ってたらリンクを挿入
本文の下に「詳細はこちら」を入れたいので「echo "<p>$body2</p>\n";」の下にこれを挿入。
if($url2){echo "<p><a href=\"$url2\">>>詳細はこちら</a></p>\n";}
後でコレも調べるメモ
こういう時ってURLが正しい形かどうかチェックして正しい形じゃなかったらエラーを出すっていうのも追加するのかなぁ?と思った。
自分の正規表現の知識レベルはこちらのサイト、サルにもわかる正規表現入門を拝読して「おお。そういうものなんだな。」っていう概要とかメタ文字入門を理解した程度。実務で使ってるPHPのソースの中に正規表現が使われてても今まで関数だけ見て「あー正規表現でチェックしてるんだな」程度にしか考えてなくて中身までちゃんと見てなかった。
今軽くググったらなんか同じ事を調べるにしてもいろいろパターンが細かくあるんだねぇ。後でURLについて調べて正しい形かどうかのチェック機能を付けれたら追加してみる。
今回のURL関連を追加したソース全文
だんだん行数が増えてきたから前回までに書いてたコメントは消しました。あとアドバイス頂いたfile_put_contents関数の部分はPHP5からということで、PHP4で使う場合のソースもコメントにして一応残してみました。
あまり表示には影響ない部分だけど、前回までのソースだと更新日時の$time2後の改行コードでPの閉じタグが改行されてしまってたのが自分の好みではなかったので、explodeで分割して$time2に入れたあとに改行コードを置換したものも追加しました。$timeを入れればPタグの改行はないんだけどせっかく$time2を作ったので無視したら可哀想とか思ってしまった。
<< 簡単なお知らせ ソースのアドバイス頂いた! | 「お知らせ」が「更新情報」に派生した >>
トラックバック
このエントリーのトラックバックURL:
http://redline.hippy.jp/cgi/mt/mt-tb.cgi/214
コメント (2)
$news = implode("\t",array($subject,$body,$url,$time));
↑この部分って、
$news = "{$subject}\t{$body}\t{$url}\t{$time}";
これでもいい気がしたPHP3年目の素人。
投稿者: m.hayashi | 2009年01月31日 21:47
>m.hayashiさん
コメントありがとうございます。
こんな書き方もできるんですね。そっか。なるほどー。「連結させたい=implode」ってコレしか頭になかったです。勉強になりました。この括弧({})は文字列の中の変数部分を{}で括って明示するってやつですよね?(違ってたら超恥ずかしい。あまりよく分かってなくてごめんなさい><)
投稿者: Red | 2009年01月31日 22:37