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

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

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

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

Q&A

3回答

11070閲覧

エラーの解決法がわかりません

blueoceanjin

総合スコア6

PHP

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

0グッド

0クリップ

投稿2018/08/07 07:14

前提・実現したいこと

エラー
を解決したい
ここに質問の内容を詳しく書いてください。
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。

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

エラーメッセージ Parse error: syntax error, unexpected ']', expecting '-' or identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in C:\xampp\htdocs\staff\staff_add_done.php on line 28 ### 該当のソースコード ここに言語名を入力PHP ソースコード <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>ろくまる農園</title> </head> <body> <?php try { $staff_name = $_POST['name']; $staff_pass = $_POST['pass']; $staff_name = htmlspecialchars($staff_name,ENT_QUOTES,'UTF-8'); $staff_pass = htmlspecialchars($staff_pass,ENT_QUOTES,'UTF-8'); $dsn='mysql:dbname=shop;host=localhost;charset=utf8'; $user='root'; $password="; $dbh=new PDO($dsn,$user,$password); $dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); $sql='INSERT INTO mst_staff(name,password) VALUES (?,?)'; $stmt=$dbh->prepare($sql); $data[]= $staff_name; $data[]= $staff_pass; $stmt->execute($data); $dbh=null; print $staff_name; print'さんを追加しました。<br />'; } catch (Exception $e) { print'ただいま障害により大変ご迷惑をおかけしております。'; exit(); } ?> <a href="staff_list.php">戻る</a> </body> </html> ### 試したこと ここに問題に対して試したことを記載してください。 ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/08/07 07:16

質問テンプレートに従って、それぞれの箇所を適切に書き換えてくださいね。それと、ソースコードを貼り付けた箇所が読みづらいので、該当箇所を編集し直して「<code>」ってボタンで囲うと少しは改善されますよ。
m.ts10806

2018/08/07 07:30 編集

既に同じ指摘が入っていたため編集削除。
guest

回答3

0

とりあえず例外処理のウチ、pdoでのcatchは

PHP

1try{ 2・・・ 3}catch(PDOException $e){ 4 die($e->getMessage()); 5}

あとは、どこが28行目なのかよくわからないですが
その前後の文法まずそうですね

POSTの受け渡しも

$staff_name = $_POST['name'];

$staff_pass = $_POST['pass'];

ではなく

PHP

1$staff_name = filter_input(INPUT_POST,'name'); 2$staff_pass = filter_input(INPUT_POST,'pass');

としたほうが良いでしょう

投稿2018/08/07 07:33

yambejp

総合スコア114505

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

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

退会済みユーザー

退会済みユーザー

2018/08/07 07:40

filter_input() は忘れがち。これでNoticeを回避できるし。
guest

0

php

1<!DOCTYPE html> 2<html> 3<head> 4<meta charset="UTF-8"> 5<title>ろくまる農園</title> 6</head> 7<body> 8 9<?php 10 11try 12{ 13 14 $staff_name = $_POST['name']; 15 $staff_pass = $_POST['pass']; 16 17 $staff_name = htmlspecialchars($staff_name,ENT_QUOTES,'UTF-8'); 18 $staff_pass = htmlspecialchars($staff_pass,ENT_QUOTES,'UTF-8'); 19 20 $dsn='mysql:dbname=shop;host=localhost;charset=utf8'; 21 $user='root'; 22 $password=''; 23 $dbh=new PDO($dsn,$user,$password); 24 $dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); 25 26 $sql='INSERT INTO mst_staff(name,password) VALUES (?,?)'; 27 $stmt=$dbh->prepare($sql); 28 $data[]= $staff_name; 29 $data[]= $staff_pass; 30 $stmt->execute($data); 31 32 $dbh=null; 33 34 print $staff_name; 35 print 'さんを追加しました。<br />'; 36 37} 38catch (Exception $e) 39{ 40 print 'ただいま障害により大変ご迷惑をおかけしております。'; 41 exit(); 42} 43 44?> 45 46<a href="staff_list.php">戻る</a> 47 48</body> 49</html>

何箇所か直しました。
catch直前の}が全角だったり、
$password=";←ダブルクォート一発のみだったり。

気になるのが、DB保存用データに対して htmlspecialchars() を適用している所。
変数をバインドして与えるときは自動的にエスケープ処理されるので
本来不要なのですが。
DB保存時にはエスケープ処理を加えず実データのまま保持し、
あくまでhtml上に出力する直前に加工するべきものです。

直接この処理のurlを叩くことは想定していないようですが、
直に$_POST['name']とか参照すると
Notice: undefined index
とか言われますので、ちゃんと値を受信しているかどうかの点検をしましょう。
他の方の回答にあるような、filter_input()を使うと良いです。

肝心の「エラーの解決法」についてですが、
「php デバッグ方法」でネット検索すればいろんな記事が見つかります。
まず、php.iniを変更してデバッグしやすくします、display_errorやerror_reportingを見直します。
次に、文法エラーを見抜きやすくするために、
phpの文法に沿ってカラー表示してくれるエディタや統合開発環境を導入します。
「php エディタ おすすめ」などでネット検索してみてください。
あと、なるべくXDebugモジュールを活用したデバッグ環境を構築すると良いです。
「php デバッグ方法 XDebug」でネット検索(以下略

投稿2018/08/07 07:27

編集2018/08/07 08:26
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

37行目のかっこが全角のような気がする…

投稿2018/08/07 07:17

ryusan_012

総合スコア59

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

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

motuo

2018/08/07 07:26

あと、22行目で $password="; のダブルクォートが1つ足りないです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問