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

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

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

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

Q&A

解決済

1回答

1792閲覧

PHP & SQL PHPのプログラムから、SQLに行かない。

Rwight

総合スコア63

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

0グッド

0クリップ

投稿2020/09/27 10:06

編集2020/09/28 13:14

前提・実現したいこと

PHPでアカウント作成なシステムを作っています。[想像しているサイト]を実現したいのですがうまく行きません。
[想像しているサイト]

アカウント名:[ (※ここに名前が書かれていて)???? ]が追加されました。

ログインページへ

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

エラーメッセージ(2020/09/28(月)に更新) [現在] Fatal error: Uncaught TypeError: PDO::__construct() expects parameter 4 to be array, string given in /Applications/XAMPP/xamppfiles/htdocs/気/account_addition_completion.php:32 Stack trace: #0 /Applications/XAMPP/xamppfiles/htdocs/気/account_addition_completion.php(32): PDO->__construct('mysql:dbname=sh...', 'root', '', '') #1 {main} thrown in /Applications/XAMPP/xamppfiles/htdocs/気/account_addition_completion.php on line 32

該当のソースコード

ソースコード <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>ようこそ</title> </head> <body> <?php try { $staff_name=$_POST['name']; $staff_pass=$_POST['pass']; $staff_phonenumber=$_POST['phonenumber']; $staff_email=$_POST['email']; $staff_prefeclure=$_POST['prefeclure']; $staff_postalcode=$_POST['postalcode']; $staff_name= htmlspecialchars($staff_name,ENT_QUOTES,'UTF-8'); $staff_pass= htmlspecialchars($staff_pass,ENT_QUOTES,'UTF-8'); $staff_phonenumber= htmlspecialchars($staff_phonenumber,ENT_QUOTES,'UTF-8'); $staff_email= htmlspecialchars($staff_email,ENT_QUOTES,'UTF-8'); $staff_prefeclure= htmlspecialchars($staff_prefeclure,ENT_QUOTES,'UTF-8'); $staff_postalcode= htmlspecialchars($staff_postalcode,ENT_QUOTES,'UTF-8'); $dsn = 'mysql:dbname=shop;host=localhost;charset=utf8'; $user = 'root'; $password = ''; $prefeclure= ''; $dbh =new PDO( $dsn, $user, $password, $prefeclure); $dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); $mysql = 'INSERT INTO mst_staff (name,password,phonenumber,email,prefeclure,postalcode) VALUES (?,?,?,?,?,?)'; $stmt = $dbh->prepare($mysql); $data[] = $staff_name; $data[] = $staff_pass; $data[] = $staff_phonenumber; $data[] = $staff_email; $data[] = $staff_prefeclure; $data[] = $staff_postalcode; $stmt->execute($data); $dbh = null; print 'アカウント 作成完了<br />'; } catch(Exception $e) { echo $e->getMessage(); echo $e->getTraceAsString(); exit ( ); } ?> <a href="account_login.php">ログインページへ</a> </body> </html>

試したこと

プログラムを変えてみたりとか、色々ためしてみましたが全部ダメでしたので教えてくれませんか?
補足[SQLのコードを変えてみたり、プログラムを色々なところを消してみたり、打ち直したりしました。原因が分からずにいました。]

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

[補足]
機種:[Mac Book Pro],ソフトウェア:[XAMPP 7.4.10-0],[MySQl 5.0.2],
[(ウェブサーバー)PHPのバージョン:7.4.10]

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

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

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

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

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

m.ts10806

2020/09/27 19:14 編集

>プログラムを変えてみたりとか、色々ためしてみましたが全部ダメでしたので教えてくれませんか? 何をどう試したか書かれていないとわかりませんので、教えようがありません。 何をどう試したのか具体的に記載してください。 >ツールのバージョンもどこに書いているのか分かりませんので教えてくれませんか?よろしくお願いします。 ひとまず phpinfo(); の実行結果を確認してください。 あとは「どうやってPHPの環境を構築したか」です。 >まだ中学生でPHPを初めてみましたがよく分からないので教えてくれませんか?よろしくお願いします。 年齢等は全く関係ないとは思いますが、この文はほぼ意味がないのでないほうが良いです。 結局のところ「基礎をやりましょう」「PHPマニュアルを確認しましょう」「エラーを読みましょう(エラーを出るようにしましょう)」「デバッグをしましょう」に終始します。
Rwight

2020/09/27 21:32

分かりました。教えてくださってありがとうございました。m(__)m
m.ts10806

2020/09/27 21:41

伝わってないかもしれませんが、質問は編集できます。 個人の事情部分は精査して、確認結果等、追記してください。
Rwight

2020/09/28 13:40 編集

学校に行っていまして、帰って来てからしばらくパソコンを開いてなかったので気づくのが遅くなってしまいすみませんでした。 明日はこのぐらいの時間になってしまいますのでよろしくお願いします。(予定です) これがまだ質問の仕方が合っているのか分からないのでご確認をお願いしたいのですがよろしいでしょうか?よろしくお願いします。
guest

回答1

0

ベストアンサー

前置き

teratail内で$staff_name= htmlspecialchars($staff_name,ENT_QUOTES,'UTF-8');で検索
してみるとわかりますが、この書籍のコードは初心者がデバッグを出来るようには出来ていません。

一文字も間違えずにコピペして、手順も一切間違えない様に実施する以外はまともに使えない事でしょう。

出来れば別の教材に変更されることを強くお勧めします。

回答

PHP

1 catch(Exception $e) 2 { 3 print 'サーバーが[ 停止 ・ サーバーに接続できません ・メンテナス中 ]となっております。恐れ入りますが、しばらく[2〜4分]待ってからもう1度再読み込みを行なってください。大変申し訳ありません。'; 4 exit(); 5 }

PHP

1 catch(Exception $e) 2 { 3 echo $e->getMessage(); 4 echo $e->getTraceAsString(); 5 6 exit(); 7 }

とすると、エラーの詳細を得ることが出来るので、エラーメッセージで検索してみて対策を探してみてください。

多分、SQLのどこかにタイプミスがあるか、MySQLが起動していないんだと思います。

また、
PHP デバッグ 方法とかPHP xdebug ブレークポイントとかで検索してデバッグ方法を学習されることをお勧めします。

投稿2020/09/27 10:34

tanat

総合スコア18727

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

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

Rwight

2020/09/27 13:23 編集

コメント返信するのが遅くなってしまいすみません。m(__)m 回答していただいてありがとうございます。 このプログラムで試してみます。本当にありがとうございました。m(__)m
m.ts10806

2020/09/27 19:19

rink-9301さん 当回答の「前置き」部分は特に読んでもらいたい(コメントから読んだ感がなかったので外からですが念押し)
退会済みユーザー

退会済みユーザー

2020/09/27 23:54

副読本にまともアドバイスが入っているので、併せて読むと良い教本になるかも。 (アンチパターンが理解できるという意味で) https://blog.tokumaru.org/2014/10/php-book.html
Rwight

2020/09/28 13:36 編集

返信が遅れてしまってすみません。 (関係ない話ですが、プログラミングのやっている時間はいつも19:00〜22:30までやっているのでその時に返信しています。) ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー [ 本題 ] [ tanat さん ] すぐご回答ありがとうございます。まだエラーばっかで分からないのでできればどこを修正したらいいのか教くださいよろしくお願いします。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー [ m.ts 10806 さん ] いつもは21:00〜のあたりら辺でみてますが、6:00にみたら書いてあったので編集で修正をしました。まだ質問不足で申し訳ありません。まだ質問不足でしたら、また質問でよろしくお願いします。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー [ te2ji さん ]このメッセージをわざわざURLを貼っていただきありがとうございます。わざわざ教えて下さってありがとうございました。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
tanat

2020/09/28 14:53 編集

Fatal error: Uncaught TypeError: PDO::__construct() expects parameter 4 to be array をgoogle翻訳でも何でもいいので翻訳して理解しようとしてみてください。 その上で、 $dbh =new PDO( $dsn, $user, $password, $prefeclure); を $dbh =new PDO( $dsn, $user, $password); とすればとりあえず次には進むと思います。(流石にこれは書籍からのコピーミスなんじゃないかと思います。責めてる訳ではないです) https://www.php.net/manual/ja/pdo.construct.php が公式ドキュメントなので、該当部分が何をしているところかを把握してみて下さい。 *正しいと保証されているPHPファイルが取得出来ないのはやはり教材としては初心者向けではないですね。。。
Rwight

2020/09/29 10:22

ありがとうございます。一応ですが、自分が今作っているのはアカウント作成を作っている最中なんです。(先輩に丁寧言葉じゃなくてすみません。) (アカウント名、パスワード、メールアドレス、電話番号、都道府県、郵便番号をSQl に送りたいけれど送れないって言うのが今のところですが一応自分で一人でやってみます。一応解決済にしておきます。)
Rwight

2020/09/29 10:25 編集

今回は回答していただいた方はありがとうございました。またその先また分からないところがあったりした場合はしばらく考えてから送るようにします。本当に回答・質問をしてくださった方はありがとうございました。
tanat

2020/09/29 11:50

現在発生しているエラーは、SQLを組み立てる前のところでMySQLに接続するところで躓いていますね。 progate https://prog-8.com/ や他のweb教材なり書籍なりで基礎部分の説明をしているところを探して、まずそこをクリアすることをお勧めします。
Rwight

2020/09/29 12:33

わざわざありがとうございます。参考させてもらいます。ありがとうございました。最後の最後までありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問