質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

1回答

3911閲覧

編集機能で差し替えをしたいです。

kaity

総合スコア19

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2018/12/03 12:33

編集2022/01/12 10:55

php

<html> <head> <meta charset="utf-8"> <title>○○</title> </head> <body> <?php $name=$_POST["name"];//コメントフォーム $namae=$_POST["namae"];//名前フォーム $sakuzyo=$_POST["sakuzyo"];//削除フォーム $edit=$_POST["edit"];//編集機能フォーム $number=$_POST["number"];//編集番号フォーム $date=date('Y年m月d日 H時i分');//日付 $filename="●●.txt";//テキストファイル //投稿機能開始 if(empty($namae)==false&&empty($name)==false&&!empty($number)==false){//もし$namaeと$nameが空っぽじゃなくて$numberが空っぽなら $ret_array=file($filename);//テキストファイルを読み込み $d=$ret_array === false ? 1 : count($ret_array)+1;//2-1の要素の数を数える $a=$d."<>".$namae."<>".$name."<>".$date;//投稿番号、名前、コメント、日付 $fp=fopen($filename,'a+');//読み込みと追加書き込みをする fwrite($fp,$a.PHP_EOL);//書き込み処理 fclose($fp); } //投稿機能終了 //削除機能開始 if(empty($sakuzyo)==false){//空っぽじゃなかったら $ret_array=file($filename);//テキストファイルを読み込み $kakikomi=fopen($filename,'w');//上書き書き込みする $kakikomi=fopen($filename,"a");//追加書き込み for($i=0; $i<count($ret_array);$i++){//ループ処理 $ex=explode("<>",$ret_array[$i]); if($ex[0]==$sakuzyo){//削除番号と投稿番号一致したら continue;//スキップ } fwrite($kakikomi,$ret_array[$i]);//書き込み処理 } fclose($kakikomi); } //削除機能終了 //編集選択始まり if(empty($edit)==false){//$editが空っぽじゃなかったら $ret_array=file($filename);//ファイル読み込み for($i=0; $i<count($ret_array);$i++){//ループ処理 $ex=explode("<>",$ret_array[$i]); if($edit==$ex[0]){//投稿番号と編集番号が一致したら $editbango=$ex[0]; $editnamae=$ex[1]; $editname=$ex[2]; } } } //編集選択終わり //編集機能始まり if(empty($number)==false&&empty($namae)==false&&empty($name)==false){//編集機能番号とコメントと名前が空っぽじゃなかったら $editel=file($filename);//ファイル読み込み $kakikomi=fopen($filename,'w');//上書き書き込み $kakikomi=fopen($filename,'a');//追加書き込み for($i=0; $i<count($editel);$i++){//ループ処理 $plode=explode("<>",$editel); if($number==$plode[0]){//編集選択フォームと投稿番号が一致したら fwrite($kakikomi,$number."<>".$namae."<>".$name."<>".$date);//差し替え }//if($number==$ex[0])閉じ else{//一致しなかったら fwrite($kakikomi, $editel[$i]);//新規投稿 }//else閉じ }//ループ処理閉じ fclose($kakikomi); }//if(empty($sakuzyo)==false&&empty($namae)==false&&empty($name)==false)閉じ //編集機能終わり ?> <form method="POST" action="○○.php"> <input type="text" name="namae" placeholder="名前" value="<?php echo $editnamae;?>"><br>
<input type="text" name="name" placeholder="コメント" value="<?php echo $editname;?>"><br> <input type="text" name="number" value="<?php echo $editbango;?>"> <input type="submit" value="送信"><br> <input type="text" name="sakuzyo" placeholder="削除対象番号"> <input type="submit" value="削除"><br> <input type="text" name="edit" placeholder="編集対象番号"> <input type="submit" value="編集"> </form>
<?php //表示機能 $ret_array=file($filename);//テキストファイルを読み込み for($i=0; $i<count($ret_array);$i++){//ループ処理 $ex=explode("<>",$ret_array[$i]);//投稿番号取得、それを読み込んだファイル echo $ex[0].$ex[1].$ex[2].$ex[3]."<br>";//分解して投稿番号を取得、表示 } ?> </body> </html>
簡易掲示板において編集機能をつけていますが、名前 コメント 投稿番号をフォームに表示させた後 編集して差し替えたいのですが 反映されず差し替えができない状態です。よかったらコードミス教えていただけませんか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/12/03 12:43 編集

``` ←これを書くときは、これのすぐ後ろにコードを書かずに改行してください。まだ余計な記号「> 」が前後についている気がします。
kaity

2018/12/03 12:39

了解しましたすみません。
m.ts10806

2018/12/03 14:14

投稿前にリアルタイムプレビュー確認してください。
guest

回答1

0

1)

$name=$_POST["name"];//コメントフォーム $namae=$_POST["namae"];//名前フォーム $sakuzyo=$_POST["sakuzyo"];//削除フォーム $edit=$_POST["edit"];//編集機能フォーム $number=$_POST["number"];//編集番号フォーム

$name$namaeって入力ミスを誘発しやすいから間違えないようネーミングを変えるべき。

2)
PHP: filter_input - Manual関数を使った方が、POSTやGETで受け取ったフォームデータの検証や不正データのフィルターができて便利。
$_GET, $_POST じゃなくて filter_input 使えとのこと - Qiita

3)
いろんな処理の判定のきっかけ、
私ならどのsubmitボタンを押したのかをまず先に判定したいところかな。
編集番号を入力して削除ボタンをクリックしたとき、
編集番号があるからと行って編集の動作をするのが正しいのか、
それとも削除ボタンをクリックしているのに削除番号の入力がないから入力エラとみなすか、
仕様をしっかり決めてほしいところ。

$submit = filter_input(INPUT_POST, 'submit'); switch ($submit) { case '送信' : ~ break; case '編集' : ~ break; case '削除' : ~ break; default: // どのボタンでもない場合 ~ }

とか。

4)
$ret_array=file($filename);とか$editel=file($filename);とかあるけど、
PHP: file - Manual
にあるように「file(ファイル名)」ってだけだと、
改行コードで一つ一つの投稿データを分離かけているんなら
配列変数に格納したときに改行コードもついたまま格納されるね。
なのに、
編集機能のところで
fwrite($kakikomi,$number."<>".$namae."<>".$name."<>".$date);//差し替え
って改行コードを補うことをしていない。
ちなみに、日付データに改行コードがつきっぱなしで処理が進むようだが、
htmlコード上で改行コードは無視されるけども
ほんとにそれで大丈夫なのか?
データを区切る記号は必要に応じて適切に省くべきだと思うけども。

5)

$kakikomi=fopen($filename,'w');//上書き書き込み $kakikomi=fopen($filename,'a');//追加書き込み

これ、2つ書く意味あるの?
配列変数に一端格納しているのなら、特に編集機能であれば
ここで追加書き込みはないよね。

6)
explode()が関わる箇所で、変数名を重複させまいと$exをつかったり$plodeを使っているけど、
あとで意味がわからなくなるからちゃんと命名したほうがいい。
そもそも、変数のスコープを理解できていれば、
ブロックの内側で宣言している変数はブロック外に影響することはないので、
実は同じ名前を使っても大丈夫だったりする。
PHP: 変数のスコープ - Manual

読みにくいコードをざっと読んで気づいたところ6点指摘させていただきました。

投稿2018/12/03 13:08

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kaity

2018/12/03 13:24

読みづらいコード申し訳ありませんでした、、。 これら原因で差し替えなどの不作動が起きてるのでしょうか。
退会済みユーザー

退会済みユーザー

2018/12/04 01:27

webブラウザだけ見ずに、apacheのaccess_logやerror_logの点検、 データファイルの変化にも気を配ってください。 とくにデータファイルの編集に失敗するとデータ管理の根幹が崩れるので、 4)と5)に関して改善を図らないと先に進めないものと思われます。 テストするときはテストする前提になる条件にも気を配ります。 編集機能や削除機能を試す前のデータファイルをバックアップをとっておき、 ボタンクリック後にどうなったか、前後比較します。
退会済みユーザー

退会済みユーザー

2018/12/05 01:14

ところで、今は何が障害になっていますか? 解決に近づけていますか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問