開発環境
- OS X Lion - Apple(OS)
- Apache (Web Server)
- PHP (サーバーサイドプログラミング言語、スクリプト言語)
- BBEdit - Bare Bones Software, Inc.(Text Editor)
『初めてのPHP5』 (David Sklar 著、 桑村 潤 翻訳、 廣川 類 翻訳、 オライリー・ジャパン、2005年、ISBN978-4-87311-257-2)の11章(XMLのパースと生成)11.4(演習問題)2を解いてみる。
2.
HTML、PHPのソースコード(BBEdit)
<?php
require 'formhelpers.php';
if(array_key_exists('_submit_check', $_POST)){
if($errors=validate_form()){
show_form($errors);
} else {
process_form();
}
} else {
show_form();
}
function show_form($errors=''){
if($errors){
print 'エラー<ul><li>';
print implode('</li><li>', $errors);
print '</li></ul>';
}
$defaults = array();
if(array_key_exists('_submit_check', $_POST)){
$defaults = $_POST;
}
print '<form method="POST" action="' . $_SERVER['PHP_SELF'] . '" >';
print 'RSSアイテムを入力';
print '<br />タイトル: ';
input_text('feed_title', $_POST);
print '<br />リンク: ';
input_text('feed_link', $_POST);
print '<br />説明文<br />';
input_textarea('feed_description', $_POST);
print '<br />';
input_submit('submit', 'submit');
print '<input type="hidden" name="_submit_check" value="1" />';
print '</form>';
}
function validate_form(){
$errors = array();
if(!strlen(trim($_POST['feed_title']))){
$errors[] = "タイトルを入力してください";
}
if(!strlen(trim($_POST['feed_link']))){
$errors[] = "リンクを入力してください";
} elseif(substr(trim($_POST['feed_link']), 0, 7) != 'http://' &&
substr(trim($_POST['feed_link']), 0, 8) != 'https://') {
$errors[] = 'リンクが「http://」または「https://」で始まっているかを確認してください';
$errors[] = substr(trim($_POST['feed_link']), 0, 8);
}
if(!strlen(trim($_POST['feed_description']))){
$errors[] = "説明文を入力してください";
}
return $errors;
}
function process_form(){
header('Content-Type: text/xml');
print <<<_XML_
<rss version="0.91">
<channel>
<title>Kamimura's blog</title>
<link>http://sitekamimura.blogspot.com/</link>
<description>
C, C++, C#, F#, JavaScript, Perl, Python, Ruby, PHP, SQL, R, Haske
</description>
_XML_;
print '<item>';
print '<title>' . htmlentities($_POST['feed_title']) . '</title>';
print '<link>' . htmlentities($_POST['feed_link']) . '</link>';
print '<description>' . htmlentities($_POST['feed_description']) . '</description>';
print '</item>';
print '</channel></rss>';
}
?>
ちなみにJavaScriptの場合。(といっても値を取得して出力してるだけ。)
コード(BBEdit)
var title = $('#feed_title').val();
var link = $('#feed_link').val();
var description = $('#feed_description').val();
var result = "<head>\n" +
'<meta http-equiv="Content-Type" content="text/xml; charset=utf-8" />\n' +
'</head>\n' +
'<rss version="0.91">\n<channel>\n' +
'<title>Kamimura\'s blog</title>\n' +
'<link>http://sitekamimura.blogspot.com/</link>\n' +
'<description>C, C++, C#, F#, JavaScript, Perl, Python, Ruby, PHP, SQL, R, Haske</description>\n' +
'<item>\n' +
'<title>' + title + '</title>\n' +
'<link>' + link + '</link>\n' +
'<description>' + description + '</description>\n' +
'</item>\n</channel>\n</rss>';
$('#pre0').text(result);
RSSアイテムを入力タイトル:
リンク:
説明文
0 コメント:
コメントを投稿