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

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

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

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

HTML

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

Q&A

解決済

1回答

724閲覧

編集機能を実装したいです アドバイスをいただきたいです

garchomp.

総合スコア3

PHP

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

HTML

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

0グッド

0クリップ

投稿2020/10/27 09:41

前提・実現したいこと

フォームから編集番号を受信→ファイル内の投稿番号を取得、比べて一致したらその投稿のコメント、名前を投稿フォームへ表示
投稿番号を$karabakoというテキストボックスに表示
名前、コメント、$karabakoのすべてが埋まっていたら編集として$karabakoを投稿番号として表示
$karabakoのみ空いていたら新規として投稿するプログラムを作っています

発生している問題・エラーメッセージ

形は出来上がっているのですが、どの番号を試しても新規になってしまい、編集が機能しません

該当のソースコード

PHP

1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="UTF-8"> 5 <title>mission_3-4</title> 6</head> 7<body> 8<?php 9 $filename="mission_3-4.txt"; 10 if (file_exists($filename)) { 11 $num = count(file($filename))+1; 12 } else { 13 $num = 1; 14 } 15 16 $filename="mission_3-4.txt"; 17 $namae= ($_POST["namae"]); 18 $comment = ($_POST["comment"]); 19 $date = date("Y年m月d日 H:i:s"); 20 $format = $num."<>".$namae."<>".$comment."<>".$date; 21 22 23 //削除処理 24 //削除フォームの送信の有無 25 if (isset($_POST["delete"])) { 26 $delete = $_POST["delete"]; 27 $delCon = file("mission_3-4.txt"); 28 29 $fp = fopen($filename, "w"); 30 for ($j = 0; $j < count($delCon); $j++) { 31 $delDate = explode("<>", $delCon[$j]); 32 33 if ($delDate[0] != $delete) { 34 fwrite($fp, $delCon[$j]); 35 36 } else { 37 fwrite($fp, "消去しました。\n"); 38 } 39 } 40 fclose($fp); 41 } 42 43 44 //編集準備 45 if(!empty($_POST['edit'])) { 46 $edit = $_POST['edit']; 47 $ret_array2=file($filename); 48 49 $fp2 = fopen($filename,'r'); 50 for($i=0; $i<count($ret_array2); $i++){ 51 $ex=explode("<>",$ret_array2[$i]); 52 if($i==$edit){ 53 $editnumber=$ex[0]; 54 $editnamae=$ex[1]; 55 $editcomment=$ex[2]; 56 } else { 57 58 } 59 }fclose($fp2); 60 } 61 //karabakoに入っていたら編集 62 if ((!empty($_POST['namae']))&&(!empty($_POST['comment']))&&(!empty($_POST['karabako']))) { 63 $karabako = ($_POST["karabako"]); 64 $edit = ($_POST["edit"]); 65 $ret_array3=file($filename); 66 $fp3 = fopen($filename,'w'); 67 for($b=0; $b<count($ret_array3); $b++){ 68 $ex2=explode("<>",$ret_array3[$b]); 69 if($ex2[0] == $karabako){ 70 fwrite($fp3,$karabako."<>".$namae."<>".$comment."<>".$date."\n"); 71 } 72 fclose($fp3); 73 } 74 } 75 //新規 namae commentが埋まっていて karabakoのみ空(新規)の場合 76 if ((!empty($_POST['namae'])) &&(!empty($_POST['comment'])) && (empty($_POST['karabako']))){ 77 $fp = fopen($filename,'a'); 78 fwrite($fp, $format.PHP_EOL); 79 fclose($fp); 80 } 81?> 82 83 <!--変数をvalueに入れて投稿フォーム記述--> 84 <form action="" method="post"> 85 <input type="text" name="namae" value="<?php print $editnamae;?>"> 86 <input type="text" name="comment" value="<?php print $editcomment;?>"> 87 <input type="submit" name="sousin"> 88 </form> 89 90 <!--編集判断材料text あとで隠す--> 91 <form action="" method="post"> 92 <input type="" name="karabako" value="<?php print $editnumber;?>"> 93 </form> 94 95 <!-- 削除フォームと編集フォーム--> 96 <form action="" method="post"> 97 <input type="text" name="delete" value="番号"> 98 <input type="submit" name="" value="削除"> 99 </form> 100 101 <form action="" method="post"> 102 <input type="text" name="edit" value="番号"> 103 <input type="submit" name="" value="編集"> 104 </form> 105<?php //ブラウザ表示 106 $filename="mission_3-4.txt"; 107 $lines = file($filename,FILE_IGNORE_NEW_LINES); 108 foreach($lines as $line){ 109 $lin = explode("<>", $line); 110 print $lin[0]." ".$lin[1]." ".$lin[2]." ".$lin[3]."<br/>"; 111 112} 113?> 114 115</body> 116</html>

試したこと

なんどかループ処理を書き直したり変数を見直しているのですがどこを直せばいいかわからないです…
何か思ったことがあればどんどん教えてください

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

その書籍は初学者向けとは言い難い箇所が多くあり、同じ書籍の同じところで詰まっている人が多く居ます。(teratail内では悪い意味で有名であり、回答もつきにくいです)

まずはteratail内でmission3_4
で検索してみて、各回答のアドバイスを参考にしてデバッグしてみるといいかと思いますよ

サンプルコードのダウンロードも出来ない書籍で頑張るのはかなり大変ですし、
ソースコードの品質もよろしくないので出来れば教材を変更されることを強くおすすめします。

どうしてもその書籍で頑張る必要があるのであれば
php デバッグ方法
で検索してみて、デバッグ方法を調べるのが一番の近道だと思います。

投稿2020/10/27 13:51

tanat

総合スコア18727

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

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

garchomp.

2020/10/27 15:38

過去の質問見ました 他の同じ系統の質問でも教材の質が〜など言われていますね まさか悪目立ちしているとは····· この問題が載っている書籍があるのですか? もしかしたら僕と同じ大学生向けのインターンを受けている人の質問かもしれません·····
tanat

2020/10/27 16:42

多分これ自体はインターンシップ向けに作られた教材なんだと思いますよ 引用元について記載する旨依頼があっても大体無視されていますし。 https://teratail.com/questions/93552 の出典と ソースや命名規則、品質的には https://www.amazon.co.jp/dp/4865940650 https://www.amazon.co.jp/dp/4897978858 この辺の著者が書いてるんじゃないかなという推測をしていますが憶測の域を出ません。 どっちにしてもろくでもないコード(と質問を見る限りは解説等も残念なのでしょう)なので、別のルートでデバッグ方法や基礎を学んだ方が確実にクリアへの近道になります。
garchomp.

2020/10/28 02:45

一応いくつかのIT企業が提携したインターンシップなので質はいいのかなと思ったのですがそこまで評判悪いのですね····· 一応調べてデバッグを試してみました 編集と新規のそれぞれで$karabakoをエコー表示しても反応しないのですが、編集判断用のテキストボックス$karabakoには数字が表示されます なぜかわかるでしょうか·····?
tanat

2020/10/28 03:33

xdebugを導入して、ブレークポイントを仕掛けて変数の移り変わりを確認するのが良いですよ。 `php xdebug ブレークポイント` とかで調べてみてください。 もしくは var_dump($確認したい変数); die(); みたいな形でその場所で処理を止めて、一つづつ地道に確認かですね。 > 一応いくつかのIT企業が提携したインターンシップなので質はいいのかなと思ったのですがそこまで評判悪いのですね····· 少なくとも教材単体では説明も足りないのでteratail内でもよく見かけるんでしょうね。 がっつりとした授業形式とか、講師に質問し放題の環境でないと厳しい教材なんだと思います。 品質的に言うと、そもそも独自形式のファイル(<>区切りのデータ)でデータを持つような実装をすることって現在はほぼ存在しないので、20年くらい前の感覚で作られた古めかしさを感じます
garchomp.

2020/10/28 06:39

karabakoに入れる直前の$editnumber=$ex[0]まではエコー表示出来ました! たぶんkarabakoに入れる際にフォームの中にkarabakoが存在していると判断されないような形?で書いてしまっているのかなと思います 調べてみます!! 一応質問はし放題ですがインターン生が多い分なかなか返信が来ないんですよね····· どんどん変化していくプログラミング言語で20年は長いですね この教材の古めかしさ年数は僕と同い年です
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問