🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
PHP

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

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

HTML

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

Q&A

解決済

4回答

1259閲覧

php,htmlのスタッフ追加画面を完成させたい。

yamanak

総合スコア1

PHP

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

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

HTML

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

0グッド

1クリップ

投稿2021/03/10 15:21

編集2021/03/11 00:02

前提・実現したいこと```

xampp7.2.3のhtdocksにてphpやhtmlの練習しております。
スタッフ追加ページで、記入と同時にエラー表示も出るような構文にしたいです。その後、エラーではない入力の場合、確認ページに飛ばせるようにしたいです。

<?php if (!empty($_POST)){ if (!$staff_name=filter_input(INPUT_POST,'staff_name',FILTER_SANITIZE_SPECIAL_CHARS)) { $error['name']='名前が記入されていません'; } if (!$staff_pass=filter_input(INPUT_POST,'staff_pass',FILTER_SANITIZE_SPECIAL_CHARS)) { $error['staff_pass']='パスワードが記入されていません'; } echo '名前'.$staff_name.'<br>'; echo 'パスワード'.$staff_pass.'<br>'; if (empty($error)) { $_SESSION['join']=$_POST; header('Location:check.php'); exit(); if (empty($error)) { $_SESSION['join'] = $_POST; header('Location:staff_add_check.php'); exit(); } } function sani($str){ return htmlspecialchars($str,ENT_QUOTES,'UTF-8'); } ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>ろくまる農園</title> </head> <body> <h1>スタッフ追加</h1> <form action="staff_add_check.php"method="post"> <dt>スタッフ名<font color="red">必須</font></dt> <dd> <input type="text" name="staff_name" size="35"style="width:200px" > <?php if(!empty($error['staff_name'])):?> <p><font color="red"><?=sani($error['staff_name'])?></font></p> <?php endif; ?> </dd> <dt>パスワード<font color="red">必須</font></dt> <dd> <input type="password" name="pass" style="width:200px"> <?php if(!empty($error['staff_pass'])): ?> <p><font color="red"><?=sani($error['pass'])?></font></p> <?php endif; ?> </dd> <div><input type="submit" value="入力内容を確認"></div> </form> </body> </html>

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

まず、ブラウザ上でhttp://~で表示しようとしても下記のエラーメッセージしか出ません。
エラーメッセージ
Parse error: syntax error, unexpected end of file in C:\xampp\htdocs\staff\staff_add.php on line 57

試したこと

初心者です。
字の間隔など細かくチェックしましたが、私では見つけれず...
php構文チェッカーに載せても同じようなエラー表記になってしまい、
どこの部分が間違っているか確認できません。
初心者中の初心者なので、どこから手を付ければいいのかも
分からない状態です。お忙しい中、大変恐縮ですが、ご指導ご鞭撻のほど、
宜しくお願い致します。

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

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

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

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

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

y_waiwai

2021/03/10 15:26

そのコードを提示しましょう
yamanak

2021/03/10 15:34

コードが反映されない...(´;ω;`)
y_waiwai

2021/03/10 15:36

コードは、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください teratailのバグで書き込めない場合があります。編集やり直せばできますよ
yamanak

2021/03/10 15:42

なんとか、下手ながら、書けました。バタバタと申し訳ございません。
m.ts10806

2021/03/10 18:58

マークダウン難しい場合は下記 https://teratail.com/questions/238564 あと「気づけばプロ並みPHP」 は名前だけなので注意。エンジニア界隈では非常に評判悪いです。 (過去質問「ろくまる」とかで検索)
yamanak

2021/03/11 00:07

やっとコードを真面に載せることができました。 お見苦しい点、誠に申し訳ございません。 「気がつけばプロ並みphp」はやはり、駄目ですよね。 私も見ながら進めてるのですが、自分でコードを調べると、 テキストのは古いものだと分かり、なかなか思うように 学習できません。 上記コードは自分で調べてコードを書き換えたものですが、 こちらでも、エラーになってしまい、途方に暮れております。
m.ts10806

2021/03/11 00:14

古さより実装の雑が指摘されます。
m.ts10806

2021/03/11 00:16

>ブラウザ上でhttp://~で表示しようとしても これはURL直アクセスですか?それともフォーム送信ですか? 後者であればフォームがあるコードも提示してください。(出ているエラーの解決がやりたいことの実現に直接繋がるとは限りませんので)
m.ts10806

2021/03/11 00:17

ちなみに、おそらく起きているエラーと書籍は無関係です。
yamanak

2021/03/11 01:18

回答ありがとうございます。 そうなんですね、書籍のものをその通りに書いて、 phpとは大まかにこんなものだよ~とさらっと勉強するには もしかしたら良い教材なのかもしれません。 url直アクセスです。staff_add_check.phpはまだ未記入です。
m.ts10806

2021/03/11 01:32

URL直ならリクエストはGETなので、POSTは空です。
yamanak

2021/03/11 02:47

ご指摘ありがとうざいます!! 今すぐに確認しようとしたところ、このサイトにアクセスできませんlocalhost で接続が拒否されました。と出てしまい、少しの間こちらの対応で悪戦苦闘します汗。すぐに回答できず、申し訳ございません。
guest

回答4

0

ifのカッコに過不足があります。
上から順番にカッコ開き{とカッコ閉じ}の対応を確認してください。
確認のために、閉じカッコの後ろに、どのカッコ開きの閉じなのか、を明記しておくとよいですよ。
例えばこんな感じ。

php

1 2if($hoge==‘hoge’){ 3 4echo ‘hoge’; 5 6}#if($hoge==‘hoge’){ 7

投稿2021/03/11 00:25

hiok

総合スコア595

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

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

yamanak

2021/03/11 02:48

ご指摘ありがとうざいます!! 確かにカッコが抜けておりました...。お恥ずかしい。明記の仕方もとても参考になりました! 今すぐに確認しようとしたところ、このサイトにアクセスできませんlocalhost で接続が拒否されました。と出てしまい、少しの間こちらの対応で悪戦苦闘します汗。すぐに回答できず、申し訳ございません。
guest

0

コードフォーマットでインデントきちんとつけると分かりますが

php

1<?php 2 3if (!empty($_POST)){ 4 if (!$staff_name=filter_input(INPUT_POST,'staff_name',FILTER_SANITIZE_SPECIAL_CHARS)) { 5 6 $error['name']='名前が記入されていません'; 7 8 } 9 if (!$staff_pass=filter_input(INPUT_POST,'staff_pass',FILTER_SANITIZE_SPECIAL_CHARS)) { 10 11 $error['staff_pass']='パスワードが記入されていません'; 12 13 } 14 echo '名前'.$staff_name.'<br>'; 15 16 echo 'パスワード'.$staff_pass.'<br>'; 17 18 if (empty($error)) { 19 20 $_SESSION['join']=$_POST; 21 22 header('Location:check.php'); 23 24 exit(); 25 26 if (empty($error)) { 27 28 $_SESSION['join'] = $_POST; 29 30 header('Location:staff_add_check.php'); 31 32 exit(); 33 34 } 35 36 } 37 38 function sani($str){ 39 40 return htmlspecialchars($str,ENT_QUOTES,'UTF-8'); 41 } 42 43 ?> 44 45<!DOCTYPE html> 46 47<html> 48 49<head> 50 51<meta charset="UTF-8"> 52 53<title>ろくまる農園</title> 54 55</head> 56 57<body> 58 59 <h1>スタッフ追加</h1> 60 <form action="staff_add_check.php" method="post"> 61 62 <dt> 63 スタッフ名<font color="red">必須</font> 64 </dt> 65 66 <dd> 67 <input type="text" name="staff_name" size="35" style="width: 200px"> 68 69<?php if(!empty($error['staff_name'])):?> 70 71<p> 72 <font color="red"><?=sani($error['staff_name'])?></font> 73 </p> 74 75<?php endif; ?> 76 77</dd> 78 79 <dt> 80 パスワード<font color="red">必須</font> 81 </dt> 82 83 <dd> 84 85 <input type="password" name="pass" style="width: 200px"> 86 87<?php if(!empty($error['staff_pass'])): ?> 88 89<p> 90 <font color="red"><?=sani($error['pass'])?></font> 91 </p> 92 93<?php endif; ?> 94 95</dd> 96 97 <div> 98 <input type="submit" value="入力内容を確認"> 99 </div> 100 101 </form> 102</body> 103</html> 104

はじめのif (!empty($_POST)){が閉じられていません。

あとFILTER_SANITIZE_SPECIAL_CHARSは除去フィルタですが、バリデーション時に利用するものではないと思います。
データ登録やバリデーション対象情報は加工してはいけません。

あくまで画面出力時にXSS対策の一環として行うものです。

投稿2021/03/11 00:21

m.ts10806

総合スコア80875

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

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

yamanak

2021/03/11 02:50

FILTER_SANITIZE_SPECIAL_CHARSはここでは必要ないのですね、 まだまだ理解が乏しくて申し訳ございません。もっと勉強しておきます!!
guest

0

ベストアンサー

示されたコードが見づらかったんで、単純にインデントを加えて整理しました:

php

1<?php 2 3if (!empty($_POST)){ 4 if (!$staff_name=filter_input(INPUT_POST,'staff_name',FILTER_SANITIZE_SPECIAL_CHARS)) { 5 $error['name']='名前が記入されていません'; 6 } 7 if (!$staff_pass=filter_input(INPUT_POST,'staff_pass',FILTER_SANITIZE_SPECIAL_CHARS)) { 8 $error['staff_pass']='パスワードが記入されていません'; 9 } 10 11 echo '名前'.$staff_name.'<br>'; 12 echo 'パスワード'.$staff_pass.'<br>'; 13 14 if (empty($error)) { 15 $_SESSION['join']=$_POST; 16 header('Location:check.php'); 17 exit(); 18 19 if (empty($error)) { 20 $_SESSION['join'] = $_POST; 21 header('Location:staff_add_check.php'); 22 exit(); 23 } 24 } 25 26 function sani($str){ 27 return htmlspecialchars($str,ENT_QUOTES,'UTF-8'); 28 } 29?> 30 31<!DOCTYPE html> 32<html> 33<head> 34<meta charset="UTF-8"> 35<title>ろくまる農園</title> 36</head> 37<body> 38<h1>スタッフ追加</h1> 39<form action="staff_add_check.php"method="post"> 40<dt>スタッフ名<font color="red">必須</font></dt> 41<dd> 42<input type="text" name="staff_name" size="35"style="width:200px" > 43<?php if(!empty($error['staff_name'])):?> 44<p><font color="red"><?=sani($error['staff_name'])?></font></p> 45<?php endif; ?> 46</dd> 47<dt>パスワード<font color="red">必須</font></dt> 48<dd> 49<input type="password" name="pass" style="width:200px"> 50<?php if(!empty($error['staff_pass'])): ?> 51<p><font color="red"><?=sani($error['pass'])?></font></p> 52<?php endif; ?> 53</dd> 54<div><input type="submit" value="入力内容を確認"></div> 55</form> 56</body> 57</html>

'{'と'}'の対応が漏れている箇所があるのがわかるでしょうか。
コードを書くエディタによって、自動的にインデントしてくれたり、
{をタイプすると}が自動で入力されたりしてミスを防ぐ支援が充実しているものがあります。
とくにこだわってなければVScodeを使ってPHP向けに拡張機能を仕上げたほうがいいです。


細かなコードへのツッコミ。

名前やパスワードをechoにて出力させる記述の後に、
header()を記述していますが、
header()を機能させるためにはHTML的に何も出力していないときしか効きませんので、
順序がおかしいです。

また、
リダイレクトさせるヘッダー出力を2つ同じ条件if (empty($error))で仕込んでいるのも、
まぁおかしいですよね。

$errorを初期化しないで使っているため、
コードの冒頭で$error = [];などと初期化しておけば、
if()の外側に出ても消失しないで済むのではないかと思われます。

$_SESSION['join']=$_POST;ってのはちょっと乱暴です。
フォーム送信データは細工すればこちらが必要としないデータも混入しやすいものなので、
必要なデータをしっかり指定した上で使うべきかと。

php

1$_SESSION['join'] = $staff_name; // この変数だけ保持すればいいかどうかはわかりませんが

投稿2021/03/11 00:19

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

yamanak

2021/03/11 02:53

細かな指摘まで本当にありがとうございます!! 突っ込みどころ満載のコードだったんですね泣 お恥ずかしいです。 ご指摘いただいた点を一つ一つちゃんと理解して 再度書き直しできるよう勉強します。 今すぐに確認しようとしたところ、このサイトにアクセスできませんlocalhost で接続が拒否されました。と出てしまい、少しの間こちらの対応で悪戦苦闘します汗。すぐに回答できず、申し訳ございません。
guest

0

皆様から頂いたご意見を元に、初心者の私でもわかりやすいコードに変えて、試したところ、入力が無い場合、エラーメッセージを同じページに表示させることができました。本当にありがとうございました。

コード <?php $register=filter_input(INPUT_POST,'register'); $name=filter_input(INPUT_POST,'name'); $pass=filter_input(INPUT_POST,'pass'); $error_message=[]; if(!empty($register)){ if($name!==""){ $name=htmlspecialchars($name,ENT_QUOTES,'UTF-8'); } else{ $error_message[0]="名前が記入されていません"; } if($pass!==""){ $pass=htmlspecialchars($pass,ENT_QUOTES,'UTF-8'); } else{ $error_message[1]="パスワードが記入されていません"; } if(empty($error_message)){ header("Location:staff_add_check.php"); exit(); } } ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>ろくまる農園</title> </head> <body> <?php if(!empty($error_message)){ foreach($error_message as $message){ echo$message; } } ?> <h1>スタッフ追加</h1> <form action=""method="post"> スタッフ名を入力してください<br/> <div><input type="text"name="name"style="width:200px"></div> パスワードを入力してください<br/> <div><input type="password"name="pass"style="width:200px"></div> <div><input type="submit"name="register"value="入力内容を確認"></div> </form> </body> </html>

投稿2021/03/23 13:24

yamanak

総合スコア1

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

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

m.ts10806

2021/03/23 13:49

インデントについては結局無視ですか・・・
yamanak

2021/03/24 06:18

インデントとはどの部分のご指摘でしたでしょうか? すみません、本当に初心者なので、どこをどう変えればいいのか 分からず、一つ一つ調べながら進めたのですが、 初心者はまず、簡単なコードから進めていこうという結論になり、 このようなコードになりました。セッション関数もとりあえず今回は外して....。 そして、この次の確認ページに飛ぶ際に入力値が表示されないという壁にぶつかっておりまして、もしかしたらまた質問をしてしまうかもしれません。
m.ts10806

2021/03/24 06:43 編集

「インデント」は「字下げ」のことで、ロジックの話ではなくコードの見た目の揃え方です。 コメント欄では空白除去されるので[ ]で対応しますが、下記はどちらが読みやすいと思いますか? if($hoge){ echo ""; } if($hoge){ [ ]echo ""; } 特に{}の適応をしようとすると、インデントが適切であったほうが圧倒的にミスがしにくいのです。 言語は関係なく、htmlなんて特にそうですね。閉じタグの忘れが起きやすいのはインデントが適切に入れられていないから。 コードとはいえ「文書」ですから、変数などの命名や処理順含めて読みやすいほうが良いに決まっています。 3日見なければ他人のコードですからね。時にロジック考えるより大切です。 開発も単なるエディタよりIDEなど、コードフォーマット機能や文法チェック機能がついたものは必須です。 そのための私の回答だったのですが、目の前のことしか見られてないみたいで、非常に残念な想いをしているところです。 まず今回は「インデントを適切につけていれば質問しなくても解決していた問題」ですから。
yamanak

2021/03/24 07:06

丁寧にご回答してくださり、誠にありがとうございます。 インデント=字下げ(行の先頭に空白を入れて、行の開始位置を横にズラす) というご指摘に適した回答になっていない事、今、やっと分かりました。 残念な気持ちにさせて申し訳ございません。 これも初心者だからか、 最初は字下げなどをして手書きで書くのですが、 実際にterapadに書くときは 「字下げをそのまま書いていいのか...表示に何か影響はないか...」 と考えてしまい、このような不格好な投稿になってしまいました。 最初の質問でも、{}の見にくさからのエラーに繋がったので、 このご指摘の事だったんですね。 まだまだ勉強不足で質問の意図さえも的確に応えれず、 申し訳ございません。 また、何かの際はご教示頂けたら幸いです。
K_3578

2021/03/24 07:19

横槍失礼します。 初心者の方だからこそ個人的にはIDEでの開発をおすすめします。 コード補完機能、文法チェック機能などある程度慣れのある人間でもふとした所で起こる typo(スペルミス、タイプミス)を事前に防げるのでとても便利です。 ましてや文法等をまだ理解出来ていない初心者の方ならケアレスミス程度で 何時間、何日も悩む事はなくなるので、使わない理由はないかと。 導入方法なんかもメジャーなIDEならいくらでも記事がありますし、teratailにも過去質問沢山 あるので騙されたと思って環境を変えてみては如何でしょうか。 長文失礼しました。
yamanak

2021/03/24 08:30

「IDEの開発」ですね、 はい!! 自分でも非効率な独学だなと思っていました。 teratailの過去質問で導入方法など調べてみます。 本当にありがとうございました。
K_3578

2021/03/24 08:35

@質問者さん 「IDEの開発」だと新たなIDEを生み出すことになりますので、「IDEでの開発」ですね。 無料のIDEだとEclipseとかNetBeansとかあるので 使って見て自分に合った方を使われると宜しいかと。
yamanak

2021/03/24 10:03

ありがとうございます。 無料のIDEがあるのですね、 早速検索して、自分に合ったものを探して これからの勉強に役立てたいと思います。 素人だからか、全体を見れずに、 コードの文法や展開ばかりに気を取られておりました。 ご教示本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問