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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

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

Q&A

解決済

4回答

2065閲覧

PHPで質問フォームを作ったところ、$_POSTがうまくいかない

maplesugar_17

総合スコア32

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

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

0グッド

0クリップ

投稿2017/08/10 11:53

HTML

1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 <meta charset="UTF-8"> 5 <title>narratica</title> 6</head> 7<body> 8 9<div class="form" style="width:600px;"> 10 <form action = "upload.php" method = "POST"> 11 <div class="custom"> 12 <label> 13 <textarea id="comment" name="comment" cols="60" rows="12"></textarea> 14 </label> 15 <table frame="void" style="border:none" id="tbl"> 16 <tr> 17 <th style="text-align: left; font-family: 'Hiragino Maru Gothic ProN',serif;">名前</th> 18 <th style="text-align:left; width:40px; font-family: 'Hiragino Maru Gothic ProN',serif;">好きな食べ物</th> 19 <th style="width:40px;"> </th> 20 <th style="width:40px;"> </th> 21 </tr> 22 <tr> 23 <td style="border:1px #1abc9c solid;"><label for="txt1"></label><input class="inpval" type="text" id="txt1" name="txt1" value="" size="30" style="border: none"></td> 24 <td style="border:1px #1abc9c solid; border-top-style: none; border-left-style: none; border-right-style: none; border-bottom-style: none;"> 25 <label> 26 <select name="select1" class="select_box"> 27 <option>好きな食べ物</option> 28 <option>ぽてと</option> 29 <option>にく</option> 30 <option>ぴーまん</option> 31 <option>たまねぎ</option> 32 <option>にんじん</option> 33 <option>ねぎ</option> 34 <option>ぶたにく</option> 35 <option>ひきにく</option> 36 </select> 37 </label> 38 </td> 39 <td style=" width:40px; font-family: 'Hiragino Maru Gothic ProN',serif;"><input class="edtbtn" type="button" id="edtBtn1" value="確定" onclick="editRow(this)"></td> 40 <td style=" width:40px; font-family: 'Hiragino Maru Gothic ProN',serif;"><input class="delbtn" type="button" id="delBtn1" value="削除" onclick="deleteRow(this)"></td> 41 </tr> 42 </table> 43 <div>新しい行を追加:<input type="button" id="add" name="add" value="追加" class="addbtn" onclick="appendRow()"></div> 44 <input class="square_btn" type = "submit" value ="そうしん"> 45 </div> 46 </form> 47</div> 48</body> 49<script> 50 51 /* 52 * appendRow: テーブルに行を追加 53 */ 54 function appendRow() 55 { 56 let objTBL = document.getElementById("tbl"); 57 if (!objTBL) 58 return; 59 60 const count = objTBL.rows.length; 61 62 // 最終行に新しい行を追加 63 const row = objTBL.insertRow(count); 64 65 // 列の追加 66 const c1 = row.insertCell(0); 67 const c2 = row.insertCell(1); 68 const c3 = row.insertCell(2); 69 const c4 = row.insertCell(3); 70 71 // 各列にスタイルを設定 72 c1.style.cssText = "border:1px #1abc9c solid; text-align:right; width:40px;"; 73 c2.style.cssText = "border:1px #1abc9c solid; border-top-style: none; border-left-style: none; border-right-style: none; border-bottom-style: none;"; 74 c3.style.cssText = "width:40px;"; 75 c4.style.cssText = "width:40px;"; 76 77 // 各列に表示内容を設定 78 c1.innerHTML = '<input class="inpval" type="text" id="txt' + count + '" name="txt' + count + '" value="txt' + count + '" size="30" style="border: none;">'; 79 c2.innerHTML = '<select class="select_box" name="select' + count + '"> <option>役割</option> <option>主人公</option> <option>協力者</option> <option>依頼者</option> <option>犠牲者</option> <option>狂言回し</option> <option>敵</option> <option>ライバル</option> <option>支援者</option> </select>'; 80 c3.innerHTML = '<input class="edtbtn" type="button" id="edtBtn' + count + '" value="確定" onclick="editRow(this)">'; 81 c4.innerHTML = '<input class="delbtn" type="button" id="delBtn' + count + '" value="削除" onclick="deleteRow(this)">'; 82 83 // 追加した行の入力フィールドへフォーカスを設定 84 const objInp = document.getElementById("txt" + count); 85 if (objInp) 86 objInp.focus(); 87 88 } 89 90 /* 91 * deleteRow: 削除ボタン該当行を削除 92 */ 93 function deleteRow(obj) 94 { 95 96 let i; 97 if (!obj) 98 return; 99 100 const objTR = obj.parentNode.parentNode; 101 const objTBL = objTR.parentNode; 102 103 if (objTBL) 104 objTBL.deleteRow(objTR.sectionRowIndex); 105 106 // id/name ふり直し 107 let tagElements = document.getElementsByTagName("input"); 108 if (!tagElements) 109 return false; 110 111 // <input type="text" id="txtN"> 112 let seq = 1; 113 for (i = 0; i < tagElements.length; i++) 114 { 115 if (tagElements[i].className.match("inpval")) 116 { 117 tagElements[i].setAttribute("id", "txt" + seq); 118 tagElements[i].setAttribute("name", "txt" + seq); 119 ++seq; 120 } 121 } 122 123 // <input type="button" id="edtBtnN"> 124 seq = 1; 125 for (i = 0; i < tagElements.length; i++) 126 { 127 if (tagElements[i].className.match("edtbtn")) 128 { 129 tagElements[i].setAttribute("id", "edtBtn" + seq); 130 ++seq; 131 } 132 } 133 134 // <input type="button" id="delBtnN"> 135 seq = 1; 136 for (i = 0; i < tagElements.length; i++) 137 { 138 if (tagElements[i].className.match("delbtn")) 139 { 140 tagElements[i].setAttribute("id", "delBtn" + seq); 141 ++seq; 142 } 143 } 144 } 145 146 /* 147 * editRow: 編集ボタン該当行の内容を入力・編集またモード切り替え 148 */ 149 function editRow(obj) 150 { 151 const objTR = obj.parentNode.parentNode; 152 const rowId = objTR.sectionRowIndex; 153 const objInp = document.getElementById("txt" + rowId); 154 const objBtn = document.getElementById("edtBtn" + rowId); 155 156 if (!objInp || !objBtn) 157 return; 158 159 // モードの切り替えはボタンの値で判定 160 if (objBtn.value === "編集") 161 { 162 objInp.style.cssText = "border:none;"; 163 objInp.readOnly = false; 164 objInp.focus(); 165 objBtn.value = "確定"; 166 } 167 else 168 { 169 objInp.style.cssText = "border:none;"; 170 objInp.readOnly = true; 171 objBtn.value = "編集"; 172 } 173 } 174</script> 175</html>

このような質問フォームを作っています。
イメージ説明
このような画面が最初に表示され、上の「あああああ」と書いてあるtextareaの内容、名前、選択した好きな食べ物の名前を、次の画面に送りたいです。

次の画面は、

PHP

1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 <meta charset="UTF-8"> 5 <title>narratica</title> 6</head> 7<body> 8<?php 9$nyuuryoku = ""; 10if (!isset($_POST['comment'])) { 11 echo '送信されていません'; 12} elseif ($_POST['comment'] === '') { 13 echo '入力されていません'; 14} 15else{ 16 $nyuuryoku = htmlspecialchars($_POST['comment']); 17} 18 19$charactors = array(); 20$selects = array(); 21 22$num = 0; 23$main = ""; 24 25if ($_SERVER["REQUEST_METHOD"] === "POST") { 26 while (true) { 27 $num++; 28 if (!isset($_POST['txt'.$num])) { 29 break; 30 } 31 $select = $_POST['select'.$num]; 32 array_push($selects, $select); 33 $name = $_POST['txt'.$num]; 34 if ($select == "主人公") { 35 $main = $name; 36 } 37 array_push($charactors, $name); 38 39 } 40} 41?> 42</body> 43</html>

このような感じです。
$_GETではなく、$_POSTで送りたいです。(書くことが長くなる恐れがあるので。)
しかし、送信ボタンを押すと、イメージ説明
と出てきて、うまくいきません。

どうすれば直すのか、ご教示お願いします。

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

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

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

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

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

zohnam

2017/08/10 12:08

一見して不安になるのは、<html lang="en">なんですよね。ひとまず<html lang="ja">にしてみませんか?
momf

2017/08/10 12:19

ファイル名間違ってたりとかしませんか?
m.ts10806

2017/08/10 12:59

「次の画面」がupload.phpだとは思うのですが、現象再現しません。lang=enでもjaでも結果は同じく、print_r($_POST);で送信した内容が正常に表示されます。追加をしたフォーム内容も送信されています。formをmethod=postとしているのでPOST送信となっています。
maplesugar_17

2017/08/11 03:06

html lang="ja"にしても、結果は同じでした。 ファイル名もあっていました。
guest

回答4

0

以下のコードで検証しましたが、こちらでは状況が再現できず、$charactors$selectsには値が代入されていることが確認できました。一度以下のコードを質問者さんの環境で実行してみていただけませんか?

HTML

1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 <meta charset="UTF-8"> 5 <title>narratica</title> 6</head> 7<body> 8 9<div class="form" style="width:600px;"> 10 <form action="upload.php" method="POST"> 11 <div class="custom"> 12 <label> 13 <textarea id="comment" name="comment" cols="60" rows="12"></textarea> 14 </label> 15 <table frame="void" style="border:none" id="tbl"> 16 <tr> 17 <th style="text-align: left; font-family: 'Hiragino Maru Gothic ProN',serif;">名前</th> 18 <th style="text-align:left; width:40px; font-family: 'Hiragino Maru Gothic ProN',serif;">好きな食べ物</th> 19 <th style="width:40px;"></th> 20 <th style="width:40px;"></th> 21 </tr> 22 <tr> 23 <td style="border:1px #1abc9c solid;"><label for="txt1"></label><input class="inpval" type="text" 24 id="txt1" name="txt1" 25 value="" size="30" 26 style="border: none"></td> 27 <td style="border:1px #1abc9c solid; border-top-style: none; border-left-style: none; border-right-style: none; border-bottom-style: none;"> 28 <label> 29 <select name="select1" class="select_box"> 30 <option>好きな食べ物</option> 31 <option>ぽてと</option> 32 <option>にく</option> 33 <option>ぴーまん</option> 34 <option>たまねぎ</option> 35 <option>にんじん</option> 36 <option>ねぎ</option> 37 <option>ぶたにく</option> 38 <option>ひきにく</option> 39 </select> 40 </label> 41 </td> 42 <td style=" width:40px; font-family: 'Hiragino Maru Gothic ProN',serif;"><input class="edtbtn" 43 type="button" 44 id="edtBtn1" 45 value="確定" 46 onclick="editRow(this)"> 47 </td> 48 <td style=" width:40px; font-family: 'Hiragino Maru Gothic ProN',serif;"><input class="delbtn" 49 type="button" 50 id="delBtn1" 51 value="削除" 52 onclick="deleteRow(this)"> 53 </td> 54 </tr> 55 </table> 56 <div>新しい行を追加:<input type="button" id="add" name="add" value="追加" class="addbtn" onclick="appendRow()"></div> 57 <input class="square_btn" type="submit" value="そうしん"> 58 </div> 59 </form> 60</div> 61</body> 62<script> 63 64 /* 65 * appendRow: テーブルに行を追加 66 */ 67 function appendRow() { 68 let objTBL = document.getElementById("tbl"); 69 if (!objTBL) 70 return; 71 72 const count = objTBL.rows.length; 73 74 // 最終行に新しい行を追加 75 const row = objTBL.insertRow(count); 76 77 // 列の追加 78 const c1 = row.insertCell(0); 79 const c2 = row.insertCell(1); 80 const c3 = row.insertCell(2); 81 const c4 = row.insertCell(3); 82 83 // 各列にスタイルを設定 84 c1.style.cssText = "border:1px #1abc9c solid; text-align:right; width:40px;"; 85 c2.style.cssText = "border:1px #1abc9c solid; border-top-style: none; border-left-style: none; border-right-style: none; border-bottom-style: none;"; 86 c3.style.cssText = "width:40px;"; 87 c4.style.cssText = "width:40px;"; 88 89 // 各列に表示内容を設定 90 c1.innerHTML = '<input class="inpval" type="text" id="txt' + count + '" name="txt' + count + '" value="txt' + count + '" size="30" style="border: none;">'; 91 c2.innerHTML = '<select class="select_box" name="select' + count + '"> <option>役割</option> <option>主人公</option> <option>協力者</option> <option>依頼者</option> <option>犠牲者</option> <option>狂言回し</option> <option>敵</option> <option>ライバル</option> <option>支援者</option> </select>'; 92 c3.innerHTML = '<input class="edtbtn" type="button" id="edtBtn' + count + '" value="確定" onclick="editRow(this)">'; 93 c4.innerHTML = '<input class="delbtn" type="button" id="delBtn' + count + '" value="削除" onclick="deleteRow(this)">'; 94 95 // 追加した行の入力フィールドへフォーカスを設定 96 const objInp = document.getElementById("txt" + count); 97 if (objInp) 98 objInp.focus(); 99 100 } 101 102 /* 103 * deleteRow: 削除ボタン該当行を削除 104 */ 105 function deleteRow(obj) { 106 107 let i; 108 if (!obj) 109 return; 110 111 const objTR = obj.parentNode.parentNode; 112 const objTBL = objTR.parentNode; 113 114 if (objTBL) 115 objTBL.deleteRow(objTR.sectionRowIndex); 116 117 // id/name ふり直し 118 let tagElements = document.getElementsByTagName("input"); 119 if (!tagElements) 120 return false; 121 122 // <input type="text" id="txtN"> 123 let seq = 1; 124 for (i = 0; i < tagElements.length; i++) { 125 if (tagElements[i].className.match("inpval")) { 126 tagElements[i].setAttribute("id", "txt" + seq); 127 tagElements[i].setAttribute("name", "txt" + seq); 128 ++seq; 129 } 130 } 131 132 // <input type="button" id="edtBtnN"> 133 seq = 1; 134 for (i = 0; i < tagElements.length; i++) { 135 if (tagElements[i].className.match("edtbtn")) { 136 tagElements[i].setAttribute("id", "edtBtn" + seq); 137 ++seq; 138 } 139 } 140 141 // <input type="button" id="delBtnN"> 142 seq = 1; 143 for (i = 0; i < tagElements.length; i++) { 144 if (tagElements[i].className.match("delbtn")) { 145 tagElements[i].setAttribute("id", "delBtn" + seq); 146 ++seq; 147 } 148 } 149 } 150 151 /* 152 * editRow: 編集ボタン該当行の内容を入力・編集またモード切り替え 153 */ 154 function editRow(obj) { 155 const objTR = obj.parentNode.parentNode; 156 const rowId = objTR.sectionRowIndex; 157 const objInp = document.getElementById("txt" + rowId); 158 const objBtn = document.getElementById("edtBtn" + rowId); 159 160 if (!objInp || !objBtn) 161 return; 162 163 // モードの切り替えはボタンの値で判定 164 if (objBtn.value === "編集") { 165 objInp.style.cssText = "border:none;"; 166 objInp.readOnly = false; 167 objInp.focus(); 168 objBtn.value = "確定"; 169 } 170 else { 171 objInp.style.cssText = "border:none;"; 172 objInp.readOnly = true; 173 objBtn.value = "編集"; 174 } 175 } 176</script> 177</html>

HTML

1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 <meta charset="UTF-8"> 5 <title>narratica</title> 6</head> 7<body> 8<?php 9$nyuuryoku = ""; 10if (!isset($_POST['comment'])) { 11 echo '送信されていません'; 12} elseif ($_POST['comment'] === '') { 13 echo '入力されていません'; 14} else { 15 $nyuuryoku = htmlspecialchars($_POST['comment']); 16} 17 18$charactors = array(); 19$selects = array(); 20 21$num = 0; 22$main = ""; 23 24if ($_SERVER["REQUEST_METHOD"] === "POST") { 25 while (true) { 26 $num++; 27 if (!isset($_POST['txt' . $num])) { 28 break; 29 } 30 $select = $_POST['select' . $num]; 31 array_push($selects, $select); 32 $name = $_POST['txt' . $num]; 33 if ($select == "主人公") { 34 $main = $name; 35 } 36 array_push($charactors, $name); 37 38 } 39} 40var_dump($charactors); 41var_dump($selects); 42?> 43</body> 44</html>

投稿2017/08/11 04:57

s8_chu

総合スコア14731

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

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

0

不可解な状況になったら、いったん思い切った修正をしましょう。
upload.phpを、こうしてください。

php

1<?php 2 print_r($_POST);

よけないことをせず、まずは$_POSTに何が入っているのかだけを確認しましょう。

投稿2017/08/11 03:19

zohnam

総合スコア1441

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

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

0

自己解決

回答してくださった皆様、ありがとうございました。 皆様の環境では正常に動作する…ということでした。PHPStormを使用していたのですが、バージョンを下げたら直りました。PHPStorm自体のバグでした。本当にありがとうございました。

投稿2017/08/14 08:54

maplesugar_17

総合スコア32

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

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

0

サクッとコピーして、こちらの環境で動かしてみましたが・・・
Kaedesuganoさんの「送信されていません」は表示されず、
$_POST['comment']にデータは入ってますし、
$charactorsにもそれぞれデータが入りましたね。

とりあえず、「送信されていません」と表示されている以上、
$_POST['comment']にデータがないんでしょう。

その他、考えられるとしたら、以下のような原因でしょうか。
(可能性は低いですが・・・)

1)キャッシュが効いていて、前のバグがそのまま残っている
⇒update2.php等の新規ファイルを作成して、formのアクション先を変更してみるとか。

2)環境の違いがありそうなので、(ほぼありえないですが)一応見るとしたら、PHPの以下の設定を確認する。
max_input_vars
memory_limit
post_max_size

3)あとブラウザの各バージョンの解釈次第ですが、
タグ内の[ = ]の前後半角空白は外した方が良いかも?(別に問題ないはずなんですが、一応…)

4)PHPのバージョンを最新にしてみるとか。

5)海外サーバーを使っている場合、ひとまずローカル環境で再現するかどうか。とか。

投稿2017/08/14 08:14

編集2017/08/14 08:32
tomari_perform

総合スコア760

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問