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

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

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

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

Q&A

解決済

2回答

464閲覧

フォームデータを確認

sumoko12

総合スコア13

PHP

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

0グッド

0クリップ

投稿2018/11/23 05:39

前提・実現したいこと

フォームデータを正常に送信させ、入力されたデータを確認したいです。

はじめまして。3日前にphpを学び始めた初心者です。
フォームを作るにあたり、phpの勉強を始めた次第です

Webサーバーにアップロードする前に、ローカルサーバーでフォームのデータがきちんと送信されているか、データは確認できるのかを試していたのですが、フォームに入力し、送信を押すと真っ白な画面に。。。

ネット色々調べていると「Webサーバーにアップしないとphpは動作しないので、まずはアップロードをする」ということだったので、Webサーバーにアップロードしましたが結果は同じく真っ白でした。

また、トップページ「index.html」をphpファイルがある同じ「/xampp/htdocs/php」の階層に入れているので、ローカルホストでphpを開こうとしても「index.html」が立ち上がり確認することができません。

・フォームに入力されたデータはきちんと送信できているのかの確認
・送信されたデータの内容の確認

上記2点を確認する方法を教えて頂けると幸いです。

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

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

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

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

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

guest

回答2

0

誤解がありますね、
「Webサーバーにアップしないとphpは動作しないので、まずはアップロードをする」
のではなく、
「Webサーバープログラム上でアクセスしないとphpは動作しないので、まずはドキュメントルート上に置く」
とでも言い換えればいいのかな。

WindowsでXAMPPを入れたのなら、
C:\xampp\htdocs
というのがドキュメントルートにあたるので、
XAMPP Control Panel上でApacheの動作状況を確認。
Apacheの右横にPID(s)に数字があり、
Port(s)に数字があれば、
Port(s)の左側がHTTPポート番号。

そこに書いたphpファイルを置けば
http://localhost:ポート番号/~.php
とでもかけばwebブラウザで結果を観られます。

HTTPポート番号は一般的に80番なので、
Port(s)の表示が80,443であれば省略可能。
http://localhost/~.php

真っ白画面になるのは、実行時エラーが発生しているケースで、
phpをデバッグに向いた動作方法に導く必要があります。

C:\xampp\php\php.ini
をテキストエディタで開いて、
display_errors=OFF
から
display_errors=ON
に変更。
error_reporting=E_ALL & ~E_DEPRECATED & ~E_STRICT
から
error_reporting=E_ALL
に変更。

iniファイル上では行頭に「;」があるとコメント行として無視されることに注意。

php.iniを保存してからApacheを再起動。←忘れずに。

また、XAMPPなら
C:\xampp\apache\logs
というフォルダに
error.log
というファイルがあるので、エラーメッセージが記録されているか確認すること。

投稿2018/11/23 06:18

編集2018/11/23 06:25
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

sumoko12

2018/11/23 10:50

ご回答ありがとうございます。 教えていただいた方法で設定し、error.logを開いてみましたが、ものすごい数の文字が。。 日時が一番若いものだと「[:error] [pid 9984:tid 2008] [client ::1:49339] PHP Parse error: syntax error, unexpected '(' in C:\xampp\htdocs\php\form.php on line 3」と出ています。
退会済みユーザー

退会済みユーザー

2018/11/23 12:17

なんだよ、ただの文法エラーじゃねーかっ
guest

0

ベストアンサー

「ローカルサーバー」は例えばXAMPPなどを入れられているということでしょうか(MacならMAMP)
であればそれはローカル上の「Webサーバー」ですので、動作確認をしたいだけしたら特にWebサーバーレンタルの必要はありません。
WWWに公開したい場合には必要になるものです。
フォームデータの送信もローカルサーバーであっても関係なく動作は確認できますし、ファイル送信もできます。

PHP学習で3日でローカルサーバーという言葉が出ていることから単純にPHPを動作させられる環境はあり、
Hello Worldをechoまたはprintで出力するくらいはできているのですよね。
でした、そこからはデバッグです。
「画面が真っ白」はPHP側で、例えば構文エラーなどがあって処理が中断している状態です。(または何もechoしてない)
まずはエラー表示をOnにしてください。(その場ですぐ確認したいならphpコード内にini_set()書いてください)
エラーが起きていて中断しているのでしたらこれでエラーが表示されるはずです。

と、現在の提示内容で言えることはここまでです。
PHPのファイル名もコードも提示されていないので現在の状態に合うこれ以上の解決案の提示は難しいです。
単にPHPの動作確認したいのであればindex.PHPじゃなくても他の名前の.phpにしてアクセスすれば良いだけですが、「ローカルホストでphpを開こうと」というのも具体的にどのような操作をしているのか私のほうでは理解できませんでした。

・フォームに入力されたデータはきちんと送信できているのかの確認

・送信されたデータの内容の確認

上記だけでしたら、formタグのactionに指定されたPHPファイルURLの冒頭で下記を入れればとりあえず確認はできます(エラー回避などは考慮してません)

php

1var_dump($_POST);

もちろん、「画面真っ白」ということはこのコードを実行する以前の問題なので、まずは現在の状況を打破してから考えてください。


コメントを受けての追記
複数条件したい場合は「且つ」か「または」で書きかたが変わります。
「and条件」「or条件」ですね。今回はおそらく「and条件」なので、&&でつなぎます。

php

1<?php 2ini_set('display_errors', 1); 3if (isset($_POST["name"]) && isset($_POST["email"]) && isset($_POST["message"])){ 4 echo htmlspecialchars($_POST["name"]); 5 echo htmlspecialchars($_POST["email"]); 6 echo htmlspecialchars($_POST["message"]); 7}

PHPマニュアル参考:

蛇足:
いわゆる「テキストエディタ」よりも実行前に文法チェックなど行ってくれる、
また、文書フォーマット機能もある「IDE」導入をつよくすすめます。
それだけで今回のようなミスに悩むことがなくなります。

私はひとまずEclipseが多いですね。

投稿2018/11/23 06:03

編集2018/11/23 11:22
m.ts10806

総合スコア80850

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

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

sumoko12

2018/11/23 10:47

ご回答ありがとうございます。 教えて頂いた方法を試したところ「Parse error: syntax error, unexpected '(' in C:\xampp\htdocs\php\form.php on line 3」という文字が表示されました。 以下はform.phpのコードです。 <?php ini_set('display_errors', 1); if (isset($_POST["name"])($_POST["email"])($_POST["message"])){ echo htmlspecialchars($_POST["name"]); echo htmlspecialchars($_POST["email"]); echo htmlspecialchars($_POST["message"]); } ?> 複数のサイトを見ながら記述したので、これで合っているのか正直分かりません。。 おかしいところがあったら是非教えてほしいです。<(_ _)>
m.ts10806

2018/11/23 11:10

はい。Syntax Errorは文法エラー。 要はPHPの文法でおかしいところがある、という意味です。 つまりローカルサーバーでも実行はできていないはずのものです。Webサーバの場所関係ありませんね。 おそらく「変数が存在していたら」を複数記述したかったのかなと思いますが、 その記述ではできません。 回答に例を追記しておきます。 あと様々な記事を確認するのは結構ですが、必ずPHPマニュアルで機能の確認を行ってください。 PHP [関数名] で検索すれば必ずヒットします。
m.ts10806

2018/11/23 11:12

あとコードはマークダウンのcode機能を利用していただきたいので、 質問本文を編集して追記してください。
sumoko12

2018/11/24 03:28

色々と丁寧に説明いただきまして、ありがとうございます! 記述いただいたコードを使用させていただきました! エラーは表示されなくなりましたが、フォームの入力されたデータは表示されていません。ただform.phpの中に記述してあるhtmlの部分は表示されています。(「お問い合わせありがとうございます」の文章) そして、また違う疑問点が浮かんだのですが、ローカルサーバーでも動作確認は可能とのことで理解しましたが(ローカルサーバーもWebサーバーだといういことも理解)、WWWサーバーに実際にアップしたとき、うまくphpが動作した場合、ユーザーにもフォームのデータが見えるということなんですかね? 私が目指したいのは、送信ボタンを押したら、フォームで送ったデータはユーザーに見えないようにして、「お問い合わせありがとうございます」などと表示されたページに飛び、私達管理者側にだけフォームのデータが確認できる構造なのですが、ネットで調べたところ「送信ボタンを押したらactionで指定したphpファイルに飛び、フォームに入力された内容も確認できる」というところまでです。 これは管理者だけではなくユーザーにも見えているという認識で間違いないでしょうか? 質問がいろいろとっ散らかってしまってすみません。。 まとめると… ・本来であれば、送信ボタンを押したらform.phpに飛び、フォームに入力されたデータが確認できる? ・そのデータはユーザー側からも見えるものである? ・フォームの入力データをユーザーからは見えないようにして、管理者のみが確認できる方法。 基本的な質問だと思うのですが、phpがどういうものなのか、未だにイマイチ想像できていません。。 また基本からPHPは学びたいと思うのですが、取り急ぎフォームを完成させなくていけない状況で、、、御指南のほどよろしくお願いいたします。<(_ _)>
m.ts10806

2018/11/24 05:03

急ぎかどうかというのは回答者には関係がないことなのでスルーするとして(作業依頼の場ではないので) PHPが動作する環境であれば基本関係ありません。同じコードは同じように動くはずです。 もちろんApacheやphpの設定ファイル(初心者が触ることはありません)により多少使える機能に差があることはあるけど、それは扱えるファイルのサイズだったり通常使用するときには影響がない機能です。 基本をおろそかにしては成長がのぞめないのはご存知かとは思いますが、 「リクエスト」と「レスポンス」については必ずおさえてください。 > 私が目指したいのは、送信ボタンを押したら、フォームで送ったデータはユーザーに見えないようにして、「お問い合わせありがとうございます」などと表示されたページに飛び、私達管理者側にだけフォームのデータが確認できる構造なのですが、ネットで調べたところ「送信ボタンを押したらactionで指定したphpファイルに飛び、フォームに入力された内容も確認できる」というところまでです。 情報が錯乱しているような気がしますけど、 「そのように作ればそうなる」としか言えません。 ユーザーが入力して送信した内容を確認するような画面を作ればそうなりますし、 「ありがとうございました」だけ表示するようにすればそうなります。 覚えておいてもらいたいのが「プログラムは指示したとおりにしか動かない」です。 指示してないことはできません。 「データは管理者だけが確認できる」のであれば、管理者ログインのような機能を用意し、 ログインした人しか見れないページを作ってそこにデータを表示すれば良いだけです。 例えばteratail プロフィールのページはURLは登録ユーザ皆同じです。 ですが、表示されるのは「ログインしているユーザの情報」だけですよね。 これはそのように作られているからです。 質問はログインしていなくても確認できますが、ログインしたユーザにしか質問・回答・コメントはできません。 それもそのように作られているからです。(ちなみにteratailもCakePHPというPHP言語が基盤のフレームワークで作られているようです) なので「そのように作りたいのでしたらそのように作り、”そうさせたくない”のであれば”そうならないように作って”」としか言えないわけです。 つまり、如何様にも作れる(でも勝手にそうなるわけではなく自分で作る)ことになります。 CMSなりフレームワークなり聞いたことはあるかもしれませんが、 いずれも基盤となっている機能が肩代わりしてくれているだけで、裏ではきちんと指示通り動くように作られています。 > phpがどういうものなのか Webサーバーで動作する言語です。APIとして利用しデータだけ返すことがあるので画面ありきではありません。 echoなりprintなりすれば画面に文字情報を送信しますが、それがブラウザから確認されてその文字列がhtmlの形式だからブラウザで見やすいように表示されているだけで、 PHPはあくまで「文字列を送信している」に過ぎません。 Webサーバー上でできることは大抵できます(ファイル操作など苦手な分野はある) なので「PHPはこれができる」という固定観念でいると、それに縛られて何もできなくなります。 「やろうと思ったらたいていなんでもできる。htmlやCSS、JavaScriptを組み合わせると動的なWebサイトが可能になる(そのように作れば)」というのが1つの答えです(あくまで1つの)
sumoko12

2018/11/25 03:21

どんな方法があるんだろうと検索していたら「mb_send_mail」という方法があることを知り、この方法で解決しました。フォームの入力されたデータもメールに無事届きました。 急ぎのものが解決しましたので、あとはphpを基本から学んでいこうと思います。 色々とご丁寧に説明いただきまして、ありがとうございました。(^.^)/
m.ts10806

2018/11/25 04:40

>mb_send_mail もともとの問題から離れてるような。 「メールを送りたい」ではないですしね。メール送るだけだと元々の「サイトで入力された情報」はサーバー上に蓄積されるわけでもないですし、情報確認したいときに毎回メーラー開くのでしょうか? ローカルサーバーでmb_send_mailでメール送信したいのであれば特殊な設定が必要なのでWebサーバーレンタルして乗せるのは手っ取り早くはありますが、質問にある要件に対して解決法方がずれている感覚があり、回答している方としては釈然としません。たぶんそれ運用まわりません。 もし本当にmb_send_mailで解決としたいのでしたら私の回答は何の参考にもならないので、ご自身で回答をかき自己解決としてください。 ただし質問内容に対してmb_send_mail使用はつながる内容ではないためなるべく具体的に解決策として要件も記載してください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問