• 締切済み

PHPのプログラミングの事について質問です。

一行掲示板に投稿者のみが行える投稿削除機能(パスワード付き)を出力させたいのですが、プログラミング初心者なので、下記のテキストに何を入力すればいいのかわからないので教えてください。 お願いします。 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>一行掲示板</title> </head> <body> <form id="x1" name="x1" method="post" action=""> <input type="text" id="naiyou" name="naiyou" size="20"> <input type="submit" value="書き込む"> </form> <hr> <?php //データファイルのファイル名 $filename='data.txt'; if(!empty($_POST['naiyou'])){ $data=file_get_contents($filename); $body=$_POST['naiyou']; $date=date('Y/m/d H:i:s'); $body="$body ($date)\n".$data; $fp=@fopen($filename,'w'); flock($fp,LOCK_EX); fputs($fp,$body); fclose($fp); } $data=file($filename); $line=count($data); for($i=0; $i<$line; $i++){ $no=$line-$i-1; echo "$no. $data[$i]<hr>\n"; } ?> </body> </html>

  • PHP
  • 回答数9
  • ありがとう数19

みんなの回答

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.9

>data.txtのファイルの中身を確認しましたが、何も記述されておりませんでした。 そうなると、こちらで確認したものと全然違う動作ですね(こちらでは確実に追加されていきましたので)。 というか「何も記述されていない」のに「1行だけ表示される」という時点で滅茶苦茶です。スクリプト内のファイル名とチェックしているファイル名が違っているとしか思えません。 >尚、data.txtは.txtの拡張子で保存しています。 その表現だと、data.txt.txt みたいに思えます。ファイル名「data.txt」だけでいいです。WinPCで「登録されている拡張子を非表示」の環境なら、「data」としか表示されていないかもしれませんが・・・ #プログラミングするなら「拡張子非表示」はやめるべき。間違いの元です。

ohayouarigatou
質問者

お礼

ご返答ありがとうございます。 新しくdata.txtファイルを作成し、行ってみたのですが 01:こんばんは(2014/08/04 13:15:51) 新しく書き込んでも02、03とはいかずに01だけが上書きされる形になります。 data.txtファイルを開いて確認しても書き込んだ内容が記述されていませんでした。 何か仕様が違うという事なのでしょうか?

ohayouarigatou
質問者

補足

無事出力することができました。 ただ、内容のの部分を新しく入力すると過去の掲示板から内容だけ削除されます。 01:テスト(2014/08/04 15:28:26) 02:(2014/08/04 15:26:32) このような場合はどうしたらよいでしょうか?

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.8

>一行だけしか表示されないのですが、何行も続けて表示させるにはどうしたらいいでしょうか? fgetcsvでファイルを最後まで読み込んでforeachで全行処理するように書いています。少なくともこちらの環境ではそういう動作をします。 何行も書き込んでみて ・データファイルに追加されていない ・データファイルには追加されているが表示されない のどちらになっているかを確認してください(こちらでは再現できないので調べられない)。 なお、data.txtはテキストモードで落としてから確認してください。LF改行なので「そのまま」をメモ帳で開いて改行されていないなどと勘違いされても困りますので(普通は大丈夫だろうと思うのですが、今までのやりとりからデバッグのための基本的なスキルが期待できそうにないので)。

ohayouarigatou
質問者

お礼

ご返答ありがとうございます。 data.txtのファイルの中身を確認しましたが、何も記述されておりませんでした。 尚、data.txtは.txtの拡張子で保存しています。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.7

>PHPのバージョンはPHP 5.1.6になっていました。 ずいぶん古いバージョンぽいですね さすがに使えない機能が増えてきているので どこかでアップグレードを検討した方がいいかもしれません とりあえずforeach構文のところは一度変数に受ければいけるはず #3さんのコードでいう >foreach ($arr as list($naiyou, $time, $pass)) { printf('%02d:%s(%s)<br>', $no++, htmlspecialchars($naiyou, ENT_QUOTES), date('Y/m/d H:i:s', $time)); } のところを foreach ($arr as $arr2) { list($naiyou, $time, $pass)=$arr2; printf('%02d:%s(%s)<br>', $no++, htmlspecialchars($naiyou, ENT_QUOTES), date('Y/m/d H:i:s', $time)); } 的な対処でどうでしょう?

ohayouarigatou
質問者

お礼

ご返答ありがとうございます。 出力することができました。 ありがとうございます。 ただ、一行だけしか表示されないのですが、何行も続けて表示させるにはどうしたらいいでしょうか? ご教授頂ければ幸いです。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.6

横やりで申し訳ない foreachでas listを指定できるのはPHP5.5以降だったはずなので バージョンに依存しているのでは?

ohayouarigatou
質問者

お礼

ご返答ありがとうございます。 PHPのバージョンはPHP 5.1.6になっていました。

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.5

>コピーではなく新しく書き直したほうがいいという事でしょうか? 私の環境ではコピペしたものが問題なく動きます。コピペするときに何か間違っていませんかね・・・ #なので「どういうエラーになっているか」が大事なんですが(汗 phpのバージョンがわかりませんがバージョンに依存する関数は使っていません(fputcsvも5.1.0以降なら使える)し、データファイルを自動生成するように書き替えたソースならデータファイルの状態にも左右されません(前のデータが残っているなんて馬鹿げたミスはないですよね)。

ohayouarigatou
質問者

お礼

ご返答ありがとうございます。 夜分遅くにすみません。 php.iniを編集してdisplay_errors = Onにした後、アパッチの再起動をしたのですが、真っ白のままです。 どうしたらいいでしょうか?

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.4

>真っ白で何も映りませんでした。 単純なtypoの可能性もありますが、「エラーメッセージを表示する」設定になっていますか(error_reportingとかdisplay_errorsとか)。デバッグ時には必ずエラーを表示するようにしてください。

ohayouarigatou
質問者

お礼

ご返答ありがとうございます。 設定はした覚えがないので、設定してみます。 コピーではなく新しく書き直したほうがいいという事でしょうか?

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.3

>何度も質問して申し訳ないのですが、r+の拡張子は何にすればよろしいでしょか? r+ はfopenの第二引数です。拡張子なんかありません。 http://www.php.net/manual/ja/function.fopen.php 質問者さんのソースでも、$fp=@fopen($filename,'w'); となっていますよね。 以下は蛇足ですが、 ・最初にデータファイルを(存在しなかったら)作成する ・追加データを先頭に挿入 ・内容/日時/パスワードのmd5値のフォーマットで保存 にしたものです。 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>一行掲示板</title> </head> <body> <?php //データファイルのファイル名 $filename='data.txt'; // なかったら作成 if (!is_file($filename)) { touch($filename); } // データ読込み $fp = fopen($filename, 'r+'); flock($fp, LOCK_EX); $arr = array(); while ($buf = fgetcsv($fp)) { $arr[] = $buf; } $upd = false; // 削除 if (isset($_POST['no'])) { $no = intval($_POST['no']) - 1; list($naiyou, $time, $pass) = $arr[$no]; if ($pass === md5($_POST['pass'])) { unset($arr[$no]); $upd = true; } else { print '<div style="color:red">password error</div>'; } } // 追記 if(isset($_POST['naiyou'])) { array_unshift($arr, array($_POST['naiyou'], time(), md5($_POST['pass']))); $upd = true; } // 削除or追記があったらファイルを更新 if ($upd) { ftruncate($fp, 0); rewind($fp); foreach ($arr as $dat) { fputcsv($fp, $dat); } } fclose($fp); ?> <form method="post" action=""> 内容:<input type="text" name="naiyou" size="20"> pass:<input type="password" name="pass"> <input type="submit" value="書き込む"> </form> <hr> <?php // データを表示 $no = 1; foreach ($arr as list($naiyou, $time, $pass)) { printf('%02d:%s(%s)<br>', $no++, htmlspecialchars($naiyou, ENT_QUOTES), date('Y/m/d H:i:s', $time)); } ?> <hr> 削除用 <form method="post" action=""> No<input type="text" name="no"> pass:<input type="password" name="pass"> <input type="submit" value="削除"> </form> </body> </html>

ohayouarigatou
質問者

お礼

ご返答ありがとうございます。 詳しく書いて頂きありがとうございます。 先程、data.txtを別で作成し、agunuzさんが作成して頂いたテキストをphpの拡張子に保存し、アップしてみたのですが真っ白で何も映りませんでした。 何か原因があれば、ご教授お願いします。

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.2

> このサンプルをそのままエディタで写せば出力されるのでしょうか? 動作確認済みです。データファイルは(r+ で開いているので)サイズ 0 でもいいので存在する必要がありますがそれ以外は動かしてみればわかると思いますが・・・ 新しい書き込みを最後に追加するようにしていますが、先頭に入れたければarray_unshiftで先頭に挿入してから書き込めばいいです。また日時の記録も端折っています。 なお、問題は動く・動かないではなく、質問者さんの最初のソースと「どう違うのか」を追ってください。最初のソースではロックが不適切なため破綻する怖れがあります。書き込む直前にロックしたって、その前に読込んでいた内容を書き込むんだからその間に他から書き込まれていても「なかったこと」になってしまいます。 また「内容+パスワード」を保存するのでfputcsvで書き込んでいます。当然削除のときはパスワードの一致チェックがあります。

ohayouarigatou
質問者

補足

ご返答りがとうございます。 何度も質問して申し訳ないのですが、r+の拡張子は何にすればよろしいでしょか?

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.1

いろいろ問題も多いのですが、全部指摘して説明する余裕がないのでサンプルだけ書いておきます。 (例) <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>一行掲示板</title> </head> <body> <?php //データファイルのファイル名 $filename='data.txt'; $fp = fopen($filename, 'r+'); flock($fp, LOCK_EX); $arr = array(); while ($buf = fgetcsv($fp)) { $arr[] = $buf; } // 削除 if (isset($_POST['no'])) { $no = intval($_POST['no']) - 1; list($naiyou, $pass) = $arr[$no]; if ($pass === $_POST['pass']) { unset($arr[$no]); ftruncate($fp, 0); rewind($fp); foreach ($arr as $dat) { fputcsv($fp, $dat); } fclose($fp); } else { print '<div style="color:red">password error</div>'; } } // 追記 if(isset($_POST['naiyou'])) { ftruncate($fp, 0); rewind($fp); $arr[] = array($_POST['naiyou'], $_POST['pass']); foreach ($arr as $dat) { fputcsv($fp, $dat); } fclose($fp); } ?> <form method="post" action=""> 内容:<input type="text" name="naiyou" size="20"> pass:<input type="password" name="pass"> <input type="submit" value="書き込む"> </form> <hr> <?php $no = 1; foreach ($arr as list($naiyou, $pass)) { printf('%02d:%s<br>', $no++, htmlspecialchars($naiyou, ENT_QUOTES)); } ?> <hr> 削除用 <form method="post" action=""> No<input type="text" name="no"> pass:<input type="password" name="pass"> <input type="submit" value="削除"> </form> </body> </html>

ohayouarigatou
質問者

お礼

ご返答ありがとうございます。 このサンプルをそのままエディタで写せば出力されるのでしょうか?

関連するQ&A

  • phpでfopen()やfputs()が使えない

    CGIを使ってやりたいことがあり、PHPを独学で学び、レンタルサーバーで実験をしているのですが、fopen()やfputs()をつかうとエラーのようになります。 これがそれです。 http://pgc.sub.jp/form.php サーバーはlolipopというところを使っているのですが、こちらのほうが許可していないということでしょうか。 ソースは以下のようになります。 <html> <head> <title>実験掲示板</title> </head> <body> <h1>実験掲示板</h1> 書き込む内容を入力してください。<hr> <form name="form" action="./sample01.php" method="POST"> <input name="body" type="text" size="40"> <input type="submit" value="書込"><hr> </form> <?php $data = file("./data.txt"); for($i=0; $i<sizeof($data); $i++){ print "記事NO.${i}:${data[$i]}<br>\n<hr>"; } ?> </body> </html> <?php $body = $_REQUEST["body"]; $body = $body."\n"; ?><html> <head> <title>Sample01</title> </head> <body> <?php $fp = fopen("./data.txt","a"); fputs($fp,$body); fclose($fp); echo "書き込み完了<br>", "<a href=\"./form.php\">戻る</a>"; ?> </body> </html> プラス空のdata.txtファイル また、大学のPCを使用しているのですが、 http://localhost/ をすると 「Connection Failed」となってしまい、localhostでの実験ができません。これは大学側が禁止しているためでしょうか?研究室のものですので、IPアドレスはそれぞれに割り当てられているのですが。

    • ベストアンサー
    • PHP
  • phpの掲示板で新しい順に表示したい

    php初心者です。 phpで掲示板を作っています。 新しい順に表示したいのですが、やり方がわかりません。 古い順に表示するやり方はわかるのですが、どうやったらよいでしょうか。 古い順のソースです <html> <head> <title>一行掲示板</title> </head> <body> <h2>一行掲示板</h2> 書き込む内容を入力してください。<hr color="black"> <form name="form" action="./sample01.php" method="POST"> タイトル      <input type=text name="title" action="./sample01.php" size="30" method="POST"><br><br> 名前          <input type=text name="namae" action="./sample01.php" size="30" method="POST"><br><br> メッセージ  <textarea name="body" rows="5" cols="50"></textarea> <input name="write" type="submit" value="書込"> <input name="write" type="reset" value="リセット"><hr> </form> <?php $data = file("../php/test1.txt"); for($i=0; $i<sizeof($data); $i++){ print "タイトル.${i}:<br>\n名前.${i}:<br>\n記事NO.${i}:${data[$i]}<br>\n<hr>"; } ?> <br> <a href="../phpcollect/index.html">トップページへ</a> </body> </html> どうかわかる方おりましたらご教授お願いします。

    • 締切済み
    • PHP
  • 掲示板のTEXTARERについて

    過去に同じような質問もありましたが、いろいろ検索してこちらの過去ログを拝見しても解決できなかったので質問させてください。 phpで掲示板をつくったのですが、textarerで改行すると表示が改行されてしまいます。 1回の書込みで1つの表示にするにはどうしたらようでしょうか。 下が問題のソースです。 <?php $body = $_REQUEST["body"]; $body = $body."\n"; if($_REQUEST["write"] != ""){ $fp = fopen("../php/test1.txt","a"); fputs($fp,$body); fclose($fp); } ?> <html> <head> <title>一行掲示板2</title> </head> <body> <b>一行掲示板</b><br><br> 書き込む内容を入力してください。<br><hr> <form name="form" action="<?php print $_SERVER['PHP_SELF']; ?>" method="POST"> <textarea name="body" rows="5" cols="50"></textarea> <input name="write" type="submit" value="書込"><hr> <?php $data = file("../php/test1.txt"); for($i=0; $i<sizeof($data); $i++){ print "記事NO.${i}:${data[$i]}<br>\n<hr>"; } ?> </form> </body> </html> わかる方おりましたらご教授お願いします。

    • ベストアンサー
    • PHP
  • PHP 画像添付フォームに関しての質問です。

    PHP 画像添付フォームに関しての質問です。 http://okwave.jp/qa/q4891926.html 以前質問させて頂いた内容でフォームを作成しています。 申込html→finish.php の場合はうまくいきます。 申込html→確認→finish.php にするとうまくいきません。 可能であれば、確認画面でアップした画像を表示できればと思っております。 何かアドバイスして頂けると助かります。 申込html <form method="post" action="kakunin.php" enctype="multipart/form-data"> <input type="hidden" name="max_file_size" value="1000000"> <input type="hidden" name="upfile" value="%%upfile%%"> <input name="upfile" id="upfile" type="file" size="50" value="%%upfile%%"> 確認html <form method="post" action="finish.php"> <td class="border5px-fff">%%upfile%%<input type="hidden" name="upfile" value=""></td> finish.php $updir = "./photo/"; $filename = $_FILES['upfile']['name']; //form の「upfile」の値 //ファイルを指定 $id_file = "id.dat"; //ファイルを開く $fp = fopen($id_file,"r"); $id = fgets($fp); fclose($fp); //ファイルの数字に1を足します。 $id = $id + 1; $fp = fopen($id_file,"w"); //保存します。 fputs($fp, $id); fclose($fp); //名前の前に番号を追記します。 //$filename = 'ID_'.$id.'_'.$filename; //番号のみ $filename = $id.'.jpg'; move_uploaded_file($_FILES['upfile']['tmp_name'], $updir.$filename);

    • ベストアンサー
    • PHP
  • phpのプログラミング

    phpの事について質問があります。 画像をアップロードしてデーターベースに画像のパスを入れるプログラミングに挑戦中なのですが、 うまくいかないので詳しい方アドバイスお願い致します 作っているプログラミングの流れは 1の画面で画像選択とコメントの入力 2の画面で画像の確認とコメントの確認 3の画面で『登録しました』の文言の表示とサーバへの書き込み (今回は3の画面では確認の為echo文で飛んでいるかどうかの確認のみ行っております) ちなみにアップロードはうまくいっており、uploadsというディレクトリーを作ってそこに画像をUPしております を考えているのですが、 2画面でinput typeのhiddenを使ってコメントと画像のパスを3の画面に飛ばそうと思っているのですが、 コメントは3の画面に飛んでいるのに、画像のパスが3の画面に飛んでないみたいです、画像のパスはinput typeのhidden で飛ばす事は出来ないのでしょうか? プログラミング以下のような感じです 2の画面 confirm.php <!DOCTYPE html> <html> <head> <meta charset=UTF-8" /> <title>確認画面</title> </head> <body> <h3>以下の内容で登録しますか?</h3> <?php $message=$_POST['message']; ?> <form action="entry.php" method="POST" enctype="multipart/form-data"> <input type="hidden" name="message" value="<?php echo $message; ?>"> <input type="hidden" name="upload_name" value="<?php echo $upload_name; ?>"> メッセージ <?php echo $message;?><br /> 画像 <?php $file_name = $_FILES['filename']['name']; $file_type = $_FILES['filename']['type']; $temp_name = $_FILES['filename']['tmp_name']; $dir ='uploads/'; $upload_name = $dir.$file_name; $result = move_uploaded_file($temp_name,$upload_name); ?> <br /> <?php if($result){ echo'■アップロード成功'; $image_size =getimagesize($upload_name); } else{ echo'■アップロード失敗'; } ?> <?php echo $upload_name;?> <input type="submit" value="登録する"> </form> </body> </html> 3の画面 entry.php <!DOCTYPE html"> <html> <head> <meta charset=UTF-8> <title>登録画面</title> </head> <body> <?php echo $_POST['message']; ?> <?php echo $_POST['upload_name']; ?> </body> </html>

    • ベストアンサー
    • PHP
  • PHPのファイル操作

    テキストボックスの値をPOSTで送信し、日時とユーザが入力した値を1行ずつファイル(review.txt)に保存し、ページ下部にファイル内容を1行ずつ表示するプログラムを作成しましたが、ブラウザに発言履歴が残りません。どの部分を修正すればいいですか? <?php //ブラウザに履歴がのこらないです $filename = './review.txt'; $comment = ''; $date = date('m/d H:i:s'); if ($_SERVER['REQUEST_METHOD'] === 'POST') { if (isset($_POST['comment']) === TRUE) { $comment = $_POST['comment']; } if (($fp = fopen($filename, 'a')) !== FALSE) { $result = fwrite($fp, $comment . '-' . $date . "\n"); if ($result === FALSE) { print 'ファイル書き込み失敗: ' . $filename; } fclose($fp); } } $work = []; if (is_readable($filename) === TRUE) { print "\n"; if(($fp=fopen($filename,'a')) !== FALSE) { print "\n";} while(($tmp = fgets($fp)) !==FALSE) { print "\n"; $work[] = htmlspecialchars($tmp,ENT_QUOTES,'UTF-8'); } fclose($fp); } else { print "\n"; $work[] = 'ファイルがありません'; } ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> </head> <body> <h1>ファイル操作</h1> <form method="post" > <label><p>発言:<input type="text" name="comment"><input type="submit" value="送信"></p></label> </form> <p>発言一覧</p> <?php foreach ($work as $value){?> <p><?php print $date; $value?></p> <?php } ?> </body> </html>

    • ベストアンサー
    • PHP
  • PHPでファイルアップロードがうまくいきません

    PHP初心者なんで宜しくお願い致します。 ファイルアップロードのシステムを作っているんですが どうもうまくいきません。 <form action="<? $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data"> 写真:<input type="file" name="file" size="40" /> <input type="submit" name="new_write" value=" 登録 "> </form> <? if(isset($_POST['new_write'])){ $filename = $_FILES['file']['name']; $updir = "./image/".$filename; if(move_uploaded_file($_FILES['file']['tmp_name'], $updir)){ print "OK"; }else{ print "NG"; } } ?> 上記の記述をしています。 そしてphpinfo()で情報を確認しても file_uploadsはONになっています。 そしてPHPのバージョンは4.4.2です。 単純なことかもしれませんが、宜しくお願い致します。

    • ベストアンサー
    • PHP
  • 掲示板で確認画面からデータを送るには

    過去に同じような質問もありましたが、いろいろ検索してこちらの過去ログを拝見しても解決できなかったので質問させてください。 掲示板で確認画面から掲示板へ書込みのデータを送りたいのですが、なかなかうまくいきません。 以下が掲示板のソースと確認画面のソースです。 「掲示板のページ」 <?php if ($_POST["write"] == "書込") { $log = $title . "\t" . $namae . "\t" . $body . "\n"; $fp = fopen("../php/test1.txt","a"); fwrite($fp,$log); fclose($fp); } $data = file("../php/test1.txt"); for($i=sizeof($data)-1;$i>=0;$i--){ list($title, $namae, $body) = explode("\t", $data[$i]); print <<<eof タイトル:{$title}<br><br> 名前:{$namae}<br><br> 記事NO.${i}:{$body}<br> <hr> eof; } ?> 「確認のページ」 <form name="form" action="./form.php" method="POST"> <input type="hidden" VALUE="$title,$namae,$body" > <input name="write" type="submit" value="書込"> </form> おわかりの方いましたらご教授お願いします。

    • 締切済み
    • PHP
  • PHPで作る掲示板について

    これを実行するとページは表示されるのですが、名前や題名、本文に日本語を入力すると 例えば名前に「山田」と入れ送信すると投稿者のところに何も出ません どうすれば解決できますか?環境はWin7でサーバは用意されたものを使用しているので 設定等の必要はありません。 画像は上が送信前、下が送信後です <?php $lines = file('bbs2.txt'); if ($_POST['write']) { $items = explode("\t", $lines[0]); $no = $items[0] + 1; $name = htmlspecialchars($_POST['name']); if (!$name) $name = "名無しさん"; $mail = htmlspecialchars($_POST['mail']); $title = htmlspecialchars($_POST['title']); if (!$title) $title = "無題"; $contents = htmlspecialchars($_POST['contents']); $contents = str_replace("\r\n", "<br>", $contents); $contents = str_replace("\r", "<br>", $contents); $contents = str_replace("\n", "<br>", $contents); $delkey = htmlspecialchars($_POST['delkey']); $time = date("Y/m/d H:i:s"); $expire = time() + 3600 * 24 * 30; setcookie("name", $name, $expire); setcookie("mail", $mail, $expire); setcookie("delkey", $delkey, $expire); $data = "$no\t$name\t$mail\t$title\t$contents\t$delkey\t$time\n"; array_unshift($lines, $data); } else { $name = $_COOKIE['name']; $mail = $_COOKIE['mail']; $delkey = $_COOKIE['delkey']; } if ($_POST['delete']) { for ($i = 0; $i < count($lines); $i++) { $items = explode("\t", $lines[$i]); if ($items[0] == $_POST['delno'] && $items[5] == $_POST['delkey2']) { array_splice($lines, $i, 1); } } } if ($_POST['write'] || $_POST['delete']) { $fp = fopen('bbs2.txt', 'w'); foreach($lines as $line) fputs($fp, $line); fclose($fp); } ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>掲示板2</title> </head> <body> <form method="post" action="bbs2.php"> お名前:<input type="text" name="name" value="<?php print $name ?>"><br> メール:<input type="text" name="mail" value="<?php print $mail ?>"><br> 題 名:<input type="text" name="title"><br> 削除キー:<input type="password" name="delkey" value="<?php print $delkey ?>"><br> <textarea name="contents" cols="60" rows="5"></textarea><br> <input type="submit" name="write" value="送信"> <hr> 記事番号:<input type="text" name="delno">  削除キー: <input type="password" name="delkey2">  <input type="submit" name="delete" value="記事削除"> </form> <hr> <?php foreach($lines as $line) { $line = rtrim($line); $items = explode("\t", $line); print "No.{$items[0]} "; print "<b>{$items[3]}</b> 投稿者:"; if ($items[2]) print "<a href='mailto:{$items[2]}'>"; print $items[1]; if ($items[2]) print "</a>"; print " 投稿時間:{$items[6]}"; print "<p>{$items[4]}</p><hr>\n"; } ?> </body> </html>

    • 締切済み
    • PHP
  • テキストデータから指定行の削除

    phpでサイトを作っています。 テキストデータを一行ずつ表示させ、指定した行を削除したいのですが、どうすればいいのでしょうか? -- data.txt -- aaa,data1, bbb,data1, ccc,data1, ddd,data1, -- php -- <?php $del=$_POST['del_no']; if($del!=""){ $data_all = file("data.txt"); for($i=0;$i<count($data_all);$i++){ $data_array = explode(",",$data_all[$i]); if($data_array[0]!=$del){//削除データ以外を再書き込み $txt="$data_array[0],$data_array[1],\n"; $fp = fopen("data.txt", "w"); flock($fp,1); foreach ($txt as $line) {// 1行ずつファイルへ書き込み? fwrite($fp, $line); } fclose($fp); break; } } } ?> <b>data list</b> <? $data_all = file("data.txt"); for($i=0;$i<count($data_all);$i++){ $data_array = explode(",",$data_all[$i]); echo "$data_array [0]<br />"; echo "<form method=\"post\">"; <input type=\"hidden\"name=\"del_no\" value=\"$data_array[0]\" />";//削除するデータをPOST echo "<input type=\"submit\" value=\"削除\" />"; echo "</form>"; } ?> こうすると、テキストデータが白紙になってしまいます。 よろしくお願いします。

    • ベストアンサー
    • PHP