第15回 スケジューラーを作ろう(6) - 削除処理、ユーザー定義関数 - - PHP基礎講座

PHPセキュリティ

Saity先生のPHP基礎講座

Lecutures on PHP

第15回 スケジューラーを作ろう(6) - 削除処理、ユーザー定義関数 - (その1)

 このエントリーをはてなブックマークに追加
  • さてさて、Saity先生の講座15回を始めるにしよう!
  • もうすっかり寒くなってきましたねぇ
  • そうだね。もうすぐクリスマスだし☆ゆきちゃんはクリスマス、どうするんだい?
  • (ぎくっ)暇っていえば暇だし、忙しいっていえば忙しい、ってトコロかな?
  • ん?暇なの?
  • (うっ)いや、暇じゃないと言えば暇じゃないし、忙しくないといえば忙しくない、ってトコロかしら?
  • (ふむ)じゃ、クリスマスは一緒に遊ぶかい?
  • (えっ?)空いてるんですか?あ、実は忙しかったんだけど、Saity先生が暇と言うなら、時間を割いて一緒に遊んであげてもいいですよ??(そわそわ)
  • おっと、そりゃ嬉しいねぇ。ただ、遊ぶといってもPHPのプログラミングだよ☆クリスマスは仕事仲間とコーディング大会をするんだ♪
  • (げっ)あ、そういえば別の都合を思い出しちゃった!Saity先生、2人で遊べるときに、遊びましょうよ☆
  • うん、2人で?そうだね。じゃ、この講座が256回までいった時に、くまちゃんを誘って打ち上げでもしようか♪
  • うぅー、そうしましょう(いつになるのやら)。

スケジュールの削除画面を作ろう

  • さて、下手なコントは置いておいて、まずはスケジュールの削除画面を作ろうか☆
  • 下手なコント・・・。えっと、前回編集画面を作った感じからしたら、削除画面は難しくなさそうですね。
  • その通り。実は前回のスケジュール編集画面をちょっと修正するだけで、スケジュールの削除画面ができちゃうんだ。この前の編集ではどんな処理をしていたか、覚えているかな?
  • 確か、変更したスケジュールをファイルに書き込む際、行番号をもとにして、編集したスケジュールと同じ番号であれば新しいスケジュールを、そうでなければ以前のものを書き込んでいたわね。
  • そうだったね。削除というのは、要するに特定の行のスケジュールを外す、つまり書き込まないようにする、ということだ。行を特定するためには、前回と同じで行番号を見たらいいわけさ。
  • なるほどー。よっしゃ、いっちょ書いてやろうじゃないの(こりこり)。こんな感じになったわよ。
$schedule_list = file($filename);
$fp = fopen($filename, "w");
foreach ($schedule_list as $lineno => $original_line) {
  if ($lineno == $_GET["lineno"]) {
    
// 何も書き込まない→この行を削除したと同一
  } else {
    fwrite($fp, $original_line);
  }
}
fclose($fp);
  • 完璧!簡単だった?
  • そうね。私も進歩したかしら?
  • うんうん。している気がする。じゃ、このコードを実装しよう!
  • ファイルはどうしたらいいの?
  • 今回もschedule_edit.phpを使おう。
  • はーい。じゃあ、まず一覧画面は以下のようになるわね。
<?php
$filename 
"C:\\Program Files\\xampp\\htdocs\\samplefile.txt";
$schedule_list file($filename);
foreach (
$schedule_list as $lineno => $line) {    
    list(
$schedule_date$title$body) = explode("|"$line);    
    print(
"日付:$schedule_date タイトル:$title 内容:$body");    
    print(
"<a href=\"schedule_edit.php?lineno=$lineno&
        mode=edit\">編集する</a>"
);    
    
print("<a href=\"schedule_edit.php?lineno=$lineno&
        mode=delete\">削除する</a>");
    
    print(
"<br>");
}
?>
  • お、引数に「mode」を追加してるねぇ。このテクニック、どうやって見つけたんだい?
  • えへっ。schedule_edit.phpに渡す情報は、これまで行番号だけで良かった訳ですよね。ただ、今回は「登録」なのか「編集」なのか「削除」なのかを明確にしないといけないと思って。
  • その通り、よく気づいたね。要するに、以下のような動きにしようって事だよね。
  line_no mode
登録時 指定しない 指定しない
編集時 編集したいスケジュールの行番号 edit
削除時 削除したいスケジュールの行番号 delete
  • そうですね。そうしたら、分かりやすくなるかなーって。
  • よし、じゃあschedule_edit.phpを修正しよう!
  • (しょこしょこ)はい、いっちょ上がり~☆

※長くなるので、抜粋しています

if (isset($_POST["regist"])) {
  
/**
   * ボタンが押された後の、登録・更新処理
   * 中身は省略します
   */
} elseif (isset($_GET["mode"]) && $_GET["mode"] == "delete") {
  
// 削除処理
  
$schedule_list file($filename);
  
$fp fopen($filename"w");
  foreach (
$schedule_list as $lineno => $original_line) {
    if (
$lineno == $_GET["lineno"]) {
      
// 何も書き込まない→この行を削除したと同一
    
} else {
      
fwrite($fp$original_line);
    }
  }
  
fclose($fp);
  
header("Location: http://localhost/schedule_list.php");  
  exit;
} else {
  
/**
   * 初回読み込み時の、初期化処理
   * 中身は省略します
   */
}
  • うん。よろしい。
  • だんだんと、自分の力で作れるようになってきました!
  • そろそろ一通り、満足したものを作れるようになってきたみたいだね。じゃ、この「スケジュールを作ろう」の後半では、もう少し難しい話をしていこう。
  • よっしゃ~!がんばるぞ~!
  • 1
  • 2

  



Pick Up Q&A

Q
動的なURLを静的に見せる方法
 このエントリーをはてなブックマークに追加 
A
普通に考えて、mod_rewrite でしょうね。 http://www.nishishi.com/blog/2006/01/mod_rewrite_url.html...

>>続きを読む

GETのままでは検索エンジンのロボットが拾ってくれなかったためにSEO対策として有効だと言われていますね。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)