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

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

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

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

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

HTML

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

Q&A

解決済

4回答

720閲覧

HTMLからPOSTで送った値がPHPでは空になっている

reiya_yukkuri

総合スコア22

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

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

HTML

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

0グッド

0クリップ

投稿2022/07/04 02:42

HTMLからPOSTで送信したデータがphpでは空になっている...

php初心者です。
ある程度理解したので自作のブログ投稿システムを作ってみたのですがhtmlからPOSTで送ったデータがphpでは殻になっています。
どうしたら良いのでしょうか?

new.html

1<html> 2<body> 3<head> 4 <meta charset="utf-8"> 5 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 6 <meta name="description" content=""> 7 <meta name="author" content=""> 8 <meta name="viewport" content="width=device-width, initial-scale=1"> 9 <link rel="icon" href="homepage.ico"> 10</head> 11<form action="http://localhost/makefile.php" method="POST"> 12 <label>タイトル名</label><br> 13 <input type="text"class="title" name="title"><br/> 14 <label>本文</label><br> 15 <textarea class="text" name="honbun" rows="20" cols="200"></textarea> 16 <table> 17 <tr> 18 <th><label>タイトルカラー</label></th> 19 <td><input type="color" name="titlecolor"></td> 20 </tr> 21 <tr> 22 <th><label>本文の文字色</label></th> 23 <td><input type="color" name="honbuncolor"></td> 24 </tr> 25 <tr> 26 <th><label>バックカラー</label></th> 27 <td><input type="color" name="backcolor" value="#FFFFFF"></td> 28 </tr> 29 <tr> 30 <th><label>フォント</label></th> 31 <td><input type="text" name="font"></td> 32 </tr> 33 <tr> 34 <th><label>フォントサイズ</label></th> 35 <td><input type="text" name="fontsize"></td> 36 </tr> 37 <tr> 38 <th><label>テンプレートファイル</label></th> 39 <td><input type="file" name="template"></td> 40 </tr> 41</table> 42 <center><input type="submit" value="送信"></center> 43</form> 44 45<style> 46 label { 47 margin-left: 30%; 48 } 49 .text{ 50 margin-left: 10%; 51 } 52 .title { 53 margin-left: 29%; 54 } 55 textarea { 56 font-family: '游明朝'; 57 font-weight: bold; 58 } 59 table { 60 margin-left: 15%; 61 } 62</style> 63</body> 64</html>

なお、ローカル環境で実行すると成功するのですがサーバー環境で実行すると失敗します

makefile.php

1<html> 2<head> 3<title>ブログ作成</title> 4<meta charset="utf-8"> 5</head> 6<body> 7<?php 8if (!empty($_POST)) { 9 if ($_POST["honbun"] != "") { 10 echo $_POST["honbun"] 11 } 12} 13if (isset($_POST['template'])) { 14 $template = $_POST['template']; 15} else { 16$template = 'template.php';} 17if (isset($_POST['title'])) { 18 $pagetitle = $_POST['title']; 19} else { 20 $pagetitle = 'デフォルト'; 21} 22if (isset($_POST['honbun'])) { 23$honbun = $_POST['honbun']; 24$honbuncolor = $_POST['honbuncolor']; 25$titlecolor = $_POST['titlecolor']; 26$backcolor = $_POST['backcolor']; 27$font = $_POST['font']; 28$fontsize = $_POST['fontsize']; 29$honbun = htmlspecialchars($honbun); 30$honbun = str_replace('./','<b>',$honbun); 31$honbun = str_replace('/.','</b>',$honbun); 32$honbun = str_replace('.!b','<big>',$honbun); 33$honbun = str_replace('.b!','</big>',$honbun); 34$honbun = str_replace('!b','<big><big><big><big><big><big><big><big><big><big>',$honbun); 35$honbun = str_replace('b!','</big></big></big></big></big></big></big></big></big></big>',$honbun); 36$honbun = nl2br($honbun); 37$filename = rand( 1000000, 9999999) . ".html"; 38// ※4 テンプレートファイルの読み込み 39$contents = file_get_contents( $template); 40// ※5 タイトルと記事本文を挿入 41$contents = str_replace( "<%PAGETITLE>", htmlspecialchars($pagetitle), $contents); 42$contents = str_replace( "<%PAGECONTENTS>", $honbun, $contents); 43$contents = str_replace('<%honbuncolor>',$honbuncolor,$contents); 44$contents = str_replace('<%titlecolor>',$titlecolor,$contents); 45$contents = str_replace('<%backcolor>',$backcolor,$contents); 46$contents = str_replace('<%font>',$font,$contents); 47$contents = str_replace('<%fontsize>',$fontsize,$contents); 48$contents = str_replace("<%filename>",$filename,$contents); 49$handle = fopen($filename,'w'); 50fwrite($handle,$contents); 51fclose($handle); 52echo "<center><b>".$pagetitle. "<b>の投稿が完了しました</center>"; 53echo "<a href='".$filename."'>".$pagetitle."<a>"; 54} else { 55 echo "フォームから記事の内容を送信してください。"; 56} 57?> 58</body> 59</html>

ブラウザの開発者モードでネットワークを見てみるとちゃんと送信されています。
イメージ説明
phpからPOSTを確認すると配列自体は受け取れていますが値がありません。
イメージ説明
調べた限りの解決策を試しましたが効果がありません
どうすればいいのでしょうか?

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

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

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

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

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

hoshi-takanori

2022/07/04 05:54 編集

form の action が localhost になってますが、サーバーのアドレスに書き換えましたか? (相対パスの方が良いかも。)
reiya_yukkuri

2022/07/04 06:47

ローカル環境においてあったファイルを載せてしまいました サーバー環境においてあるファイルは以下のとおりです ```new.html <html> <body> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="description" content=""> <meta name="author" content=""> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="icon" href="homepage.ico"> </head> <form action="http://reiyayukkuri.php.xdomain.jp/makefile.php" method="POST"> <label>タイトル名</label><br> <input type="text"class="title" name="title"><br/> <label>本文</label><br> <textarea class="text" name="honbun" rows="20" cols="200"></textarea> <table> <tr> <th><label>タイトルカラー</label></th> <td><input type="color" name="titlecolor"></td> </tr> <tr> <th><label>本文の文字色</label></th> <td><input type="color" name="honbuncolor"></td> </tr> <tr> <th><label>バックカラー</label></th> <td><input type="color" name="backcolor" value="#FFFFFF"></td> </tr> <tr> <th><label>フォント</label></th> <td><input type="text" name="font"></td> </tr> <tr> <th><label>フォントサイズ</label></th> <td><input type="text" name="fontsize"></td> </tr> <tr> <th><label>テンプレートファイル</label></th> <td><input type="file" name="template"></td> </tr> </table> <center><input type="submit" value="送信"></center> </form> <style> label { margin-left: 30%; } .text{ margin-left: 10%; } .title { margin-left: 29%; } textarea { font-family: '游明朝'; font-weight: bold; } table { margin-left: 15%; } </style> </body> </html> ```
guest

回答4

0

makefile.phpを

PHP

1<?PHP 2print_r($_SERVER["REQUEST_METHOD"]);//POSTになっている? 3print_r($_POST);

で確認してみてください。

投稿2022/07/04 02:51

yambejp

総合スコア114572

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

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

reiya_yukkuri

2022/07/04 03:03

GETになっていました。 ですがHTMLのFormタグではしっかりとpostに設定されています
guest

0

自己解決

皆様の回答を試してもうまくいかなかったので
失敗前提でactionのリンクを変更したところ成功いたしました。
ご回答頂いた方々には感謝してもしきれません。
ありがとうございました。

投稿2022/07/05 09:05

reiya_yukkuri

総合スコア22

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

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

退会済みユーザー

退会済みユーザー

2022/07/05 09:07

htmlの文法エラーは解消したのかな? 助言聞いてる?
guest

0

methodのPOSTpostにしてみていけるなら、
XHTML・HTML5ではmethodは小文字のみが標準という問題。

stack overflow : What are HTTP 'method' capitalization best practices?

でもこれはブラウザの問題であってサーバーの問題ではないし、
仕様ではそう書かれていても大体のブラウザは相変わらずどっちも許容するので、
これが原因という可能性は低いとは思いますが、念の為。

サーバー側に問題があるのだとすれば、セキュリティ上の懸念とかで、
なんらかの形でpostのリクエストが拒否されているとかですかね。

例えばSSLじゃない場合はpostリクエストは受け付けないとか。

SSLの設定がされているならactionのhttp://https://にしてみるのも試してみてください。

あとは、サーバーの内部的なリダイレクト処理とかの際に
URLの文字列だけ引き継がれていて、
リクエストボディが消失してしまっているとか。

こういうのが原因だと対応が面倒なので、
まあとりあえず可能性は低くても、
簡単に確認できるところから潰しましょう。

投稿2022/07/05 04:07

KazuhiroHatano

総合スコア7802

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

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

0

<form action="http://localhost/makefile.php" method="POST">

<form action="makefile.php" method="POST">

とか?
送信先ホスト名がlocalhostだとサーバーに送れないと思うのだが。

もう一件。
html→body→head
というのは構文エラーなので、
余計なところのbodyは削除で。
The W3C Markup Validation Service
でErrorがでなくなるまで直してください。

投稿2022/07/04 03:33

編集2022/07/04 05:37
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

reiya_yukkuri

2022/07/04 03:36

すみません、それはローカル環境においてあったファイルでした。 正しくは ```new.html <html> <body> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="description" content=""> <meta name="author" content=""> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="icon" href="homepage.ico"> </head> <form action="http://reiyayukkuri.php.xdomain.jp/makefile.php" method="POST"> <label>タイトル名</label><br> <input type="text"class="title" name="title"><br/> <label>本文</label><br> <textarea class="text" name="honbun" rows="20" cols="200"></textarea> <table> <tr> <th><label>タイトルカラー</label></th> <td><input type="color" name="titlecolor"></td> </tr> <tr> <th><label>本文の文字色</label></th> <td><input type="color" name="honbuncolor"></td> </tr> <tr> <th><label>バックカラー</label></th> <td><input type="color" name="backcolor" value="#FFFFFF"></td> </tr> <tr> <th><label>フォント</label></th> <td><input type="text" name="font"></td> </tr> <tr> <th><label>フォントサイズ</label></th> <td><input type="text" name="fontsize"></td> </tr> <tr> <th><label>テンプレートファイル</label></th> <td><input type="file" name="template"></td> </tr> </table> <center><input type="submit" value="送信"></center> </form> <style> label { margin-left: 30%; } .text{ margin-left: 10%; } .title { margin-left: 29%; } textarea { font-family: '游明朝'; font-weight: bold; } table { margin-left: 15%; } </style> </body> </html> ``` です 本当にすいません...
退会済みユーザー

退会済みユーザー

2022/07/04 05:31 編集

なんというか、同じホスト上であれば、ホスト名を省略することができるのですけれど。 そうすれば、いちいち実行環境ごとにホスト名を打ち直ししなくても良いので。 もちろん、別ホスト上のphpファイルに送信しているのであれば、省略できませんが。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問