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

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

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

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

Q&A

解決済

2回答

7715閲覧

(編集・削除・パスワード)の備わったphp掲示板の作成

Emu_Eee_Ai_415

総合スコア3

PHP

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

0グッド

0クリップ

投稿2019/08/08 15:34

編集2019/08/08 15:57

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
phpで掲示板の作成をしています。機能は4つあります。1、名前とメッセージを送信すると、投稿番号の後に送信内容が表示され、配列化される。2、消去したい投稿番号を送信すると、該当するメッセージが消去されます。3、編集したい投稿番号を送信すると、該当する投稿番号のメッセージと名前を上書きすることができます。4、パスワード機能です。先述した2、3の機能はこのパスワードなしでは行えないようにしたいです。見た目は投稿番号を入力する欄と、パスワードを入力する欄を用意し、送信ボタンを備えたものにしたいです。

127行目にエラーが出るため、どこに問題があるのか、推測できません。

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

エラーメッセージParse error: syntax error, unexpected end of file in /public_html/mission_3-5-1.php on line 127

該当のソースコード<?php

$filename = "mission_3-5-1.txt"; if(isset($_POST["send"])){ $array = file($filename); $array_num = count($array); $array_num++; $username = $_POST["username"]; $message = $_POST["message"]; $date = date("Y/m/d H:i:s"); $lines = $array_num."<>".$username."<>".$message."<>".$date."\n"; $fp = fopen($filename, "a"); fwrite($fp, $lines); fclose($fp); }
if(isset($_POST["del"])){ $delNo = $_POST["delNo"]; $array = file($filename); $array_num = count($array); for($i = 0; $i < $array_num ; $i++){ $array = file($filename); $array_num = count($array); $word = explode("<>", $array[$i]); if($word[0] == $delNo){ array_splice($array, $i, 1); $fp = fopen($filename, "w"); fwrite($fp, implode($array)); fclose($fp); } } }
if (isset($_POST['edit'])) { $num = htmlspecialchars($_POST['edit']); for ($k = 0; $k < count($lines) ; $k++) { // {指定番号} で始まる行の波カッコ{、}を削除 if (strpos('{'.$num.'}', $line[$k]) === 0) { $line[$k] = str_replace(['{','}'], ['',''], $line[$k]); break; } } // ファイルに書き込み file_put_contents($filename, implode('', $lines)); } foreach($lines as $post){ list($num, $name, $message, $time) = explode("<>", $post); echo h($num)."<br>\n"; echo h($username)."<br>\n"; echo h($message)."<br>\n"; echo h($time)."<br>\n"; } function h($s) { return htmlspecialchars($s, ENT_QUOTES, "UTF-8", true); }
if (isset($_POST["delete"],$_POST["delpass"])) { $delete = $_POST["delete"]; $delpass = $_POST["delpass"]; $delCon = file($filename); $fp = fopen($filename, "w"); for ($j = 0; $j < count($delCon); $j++) { $delDate = explode("<>", $delCon[$j]); if ($delDate[4] == $delpass){ if ($delDate[0] == $delete && $delDate[4] == $delpass){ // 両方一致すれば削除 fwrite($fp, "消去しました。\n"); } else { // どちらかでも一致しなければ元の行を残す fwrite($fp, $delCon[$j]); } ?>
<!DOCTYPE html> <html lang = "ja"> <head> <meta charset="UTF-8"> <title>掲示板</title> </head> <body> <h1>掲示板</h1> <form method = "POST" action = ""> 名前: <input type = "text" name = "username" required><br /> メッセージ: <input type = "text" name = "message" required><br /> <input type = "submit" name = "send" value = "send"><br /> </form> <form method = "POST" action = ""> 消去したい番号: <input type = "text" name = "delNo" required><br /> <input type = "submit" name = "del" value = "delete"><br /> </form> <form method = "POST" action = ""> 編集したい投稿番号<input type = "text" name = "ediNo" required> <br> <input type = "submit" name = "edit" value = "edit"> <br> <form method = "POST" action = ""> パスワード<input type = "text" name = "delpass" required> <br> <input type = "submit" value = "send"> <br> </form> <?php $array = file($filename); foreach($array as $component){ $element = explode("<>", $component); echo $component."<br />"; } ?> </body> </html>

試したこと

ここに問題に対して試したことを記載してください。

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

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

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

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

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

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

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

kei344

2019/08/08 15:38

(質問文は編集できます)質問文のコードはコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。PCであれば記入エリアの右部分あたりにリアルタイムに結果が表示されていると思うので、そこを見ながら調整してください。
mikkame

2019/08/08 16:25

どれがどのファイルかわからん
m.ts10806

2019/08/09 01:31

もし1ファイルならわける必要はありません。 複数ファイルであればその分ブロックを設け、冒頭にファイル名を追記してください。
m.ts10806

2019/08/09 01:32 編集

hogehoge.php ```php //コード ```
guest

回答2

0

ベストアンサー

起きていることが全てで、プログラムは書いた通りにしか動かないので、推測は必要ありません。
地道な調査検証とデバッグによって解決するものです。
構文エラーなのであればしっかりと構文を見直す。
変数未定義エラーであればどこで定義するべきか、されているけどスペルが間違ってたなら定義されているべき場所をきちんと見てコピペする
など。

必要なのは推測する力よりもコードフォーマット機能や構文チェック機能のついたエディタやIDE、そしてデバッグ環境です。

※以下、Eclipseの例

定義されながら未使用の変数があったり(黄色い破線)
イメージ説明

構文エラーがあります
イメージ説明

既に回答で指摘されている波カッコについても改行すると自動で入れてくれるので
漏れも減ります。

投稿2019/08/08 21:02

編集2019/08/09 01:53
m.ts10806

総合スコア80850

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

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

Emu_Eee_Ai_415

2019/08/09 13:15

ありがとうございます。1から作り直して、再び挑戦します。
m.ts10806

2019/08/09 13:32

1から作り直す という話はしていませんけども。 その心意気は良いのですが
guest

0

区切られたそのコードが一つのコードだとして、
if (isset($_POST["delete"],$_POST["delpass"])) { 以降に }が3つ足りない。

投稿2019/08/08 17:54

kei344

総合スコア69398

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問