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

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

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

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

Q&A

3回答

12912閲覧

PHPで$_POSTに値が入らない

KazuyaKojima

総合スコア16

PHP

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

0グッド

0クリップ

投稿2019/08/30 05:57

編集2022/01/12 10:55

現在PHPの教材を使ってプログラムを組んでいるのですが$_POSTにうまく値が入ってくれません。

達成したいこと:
フォームに入力した値を同じページの下部に表示したい。

発生している問題:
フォームで入力した文章が$_POSTに入らずDBにINSERTできない

以下コード全文になります。

php

1<?php 2session_start(); 3require('dbconnect.php'); 4if (isset($_SESSION['id']) && $_SESSION['time'] + 3600 > time()) { 5 // ログインしている 6 $_SESSION['time'] = time(); 7 $members = $db->prepare('SELECT * FROM members WHERE id=?'); 8 $members->execute(array($_SESSION['id'])); 9 $member = $members->fetch(); 10} else { 11 // ログインしていない 12 header('Location: login.php'); 13 exit(); 14} 15// 投稿を記録する 16if (!empty($_POST)) { 17 if ($_POST['message'] != '') { 18 $message = $db->prepare('INSERT INTO posts SET member_id=?, message=?,created=NOW()'); 19 $message->execute(array( 20 $member['id'], 21 $_POST['message'] 22 )); 23 header('Location: index.php'); exit(); 24 } 25} 26// 投稿を取得する 27$posts = $db->query('SELECT m.name, m.picture, p.* FROM members m, posts p WHERE m.id=p.member_id ORDER BY p.created DESC'); 28?> 29<!DOCTYPE html> 30<html lang="ja"> 31<head> 32 <meta charset="UTF-8"> 33 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 34 <meta http-equiv="X-UA-Compatible" content="ie=edge"> 35 <title>ひとこと掲示板</title> 36 37 <link rel="stylesheet" href="style.css" /> 38</head> 39 40<body> 41<div id="wrap"> 42 <div id="head"> 43 <h1>ひとこと掲示板</h1> 44 </div> 45 <div id="content"> 46 <form action="" method="post"> 47 <dl> 48 <dt><?php echo htmlspecialchars($member['name'], ENT_QUOTES); ?>さん、メッセージをどうぞ</dt> 49 <dd> 50 <textarea name="message" cols="50" rows="5"></textarea> 51 </dd> 52 </dl> 53 <div> 54 <input type="submit" value="投稿する" /> 55 </div> 56 </form> 57 58 <?php 59 foreach ($posts as $post): 60 ?> 61 <div class="msg"> 62 <img src="member_picture/<?php echo htmlspecialchars($post['picture'], ENT_QUOTES); ?>" width="48" height="48" alt="<?php echo htmlspecialchars($post['name'], ENT_QUOTES); ?>" /> 63 <p><?php echo htmlspecialchars($post['message'], ENT_QUOTES);?><span class="name"><?php echo htmlspecialchars($post['name'], ENT_QUOTES); ?></span></p> 64 <p class="day"><?php echo htmlspecialchars($post['created'], ENT_QUOTES); ?></p> 65 </div> 66 <?php 67 endforeach; 68 ?> 69 </div> 70 71</div> 72</body> 73</html>

var_dumpで値が入ってるか見たのですが入ってませんでした。。。
イメージ説明

なぜかtextera内のnameを"message"から別の文字列に変えると$_POSTには値が入るのですがそれに合わせて一番最初のif文以下の$_POST[""]の中のmessageを変えるとまた値が入らなくなります。
教科書通りに進めているのになぜだかここだけうまくいきません。。。。。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2019/08/30 06:00

フォーム送信する箇所のhtmlソースを観ないとなんともいえません。質問文中に追記お願いします。もしもjavascriptも使っていれば、それも合わせて掲載してください。
m.ts10806

2019/08/30 06:10

$memberって変数 どこから来てますか?
退会済みユーザー

退会済みユーザー

2019/08/30 06:10

$member = $members->fetch();
m.ts10806

2019/08/30 06:22 編集

m6uさん コメント書いたのはコードが修正される前でした
退会済みユーザー

退会済みユーザー

2019/08/30 06:28

そして、おいらの指摘は無視され解決が遠のく(悲哀
m.ts10806

2019/08/30 06:34

感じたことなのでこちらに書きますね。 このコードを載せている教科書は非常に古いものですのでこれで覚えてもあまり使えるようにはなりません。言い方はあれですか早いところ見切りをつけてPHP7対応且つなるべく新しい書籍を購入し、PHPマニュアルを活用できるようになってください。
KazuyaKojima

2019/08/30 06:34

すいません指摘とはhtmlソースのことでしょうか? コード自体はこちらで全文になるのですが・・
退会済みユーザー

退会済みユーザー

2019/08/30 07:42 編集

php実行して、webブラウザに表示されているときの、htmlソースを見ないといけないんじゃないの? phpの処理で特別凝ったことをしてないようだけど、それでも確認するべきはwebブラウザ上でのhtmlソースが意図したとおりになっているかどうか、という点だと主張したい。そのhtmlソース上で、文法エラーがないかとか点検するものです。
guest

回答3

0

htmlが不完全だったり(DOCTYPE宣言がない、タグが閉じられてない)
textareaに存在しない属性値(例:type)があったり
初期化しないままそのまま変数使っていたり

ツッコミどころはいっぱいありますが、POST来てるのは冒頭に下記で確認できました。

php

1<?php 2var_dump($_POST);

php

1if (!empty($_POST)) { 2 if ($_POST['message'] != '') { 3 echo $_POST['message'] ; 4 } 5}

全部一気に組んでしまうのではなく、1つ1つ値を確かめましょう。

投稿2019/08/30 06:16

m.ts10806

総合スコア80765

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

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

KazuyaKojima

2019/08/30 06:24

var_dumpで値の確認をしたのですが入っていないようです・・・
m.ts10806

2019/08/30 06:35

コードがゴチャゴチャしていると問題の切り分けが難しくなります。 回答の最後に書いているように「全部一気に組んでしまうのではなく、1つ1つ値を確かめましょう。」 本当に最小構成のコードから確認すると良いです。 ログイン機能とかセッションとかDBアクセスは全部置いておいて、そこだけ確認し、少しずつ肉付けしていってください。 そうするとどこで引っかかっているか見えてきます。
KazuyaKojima

2019/08/30 06:36

ありがとうございます、やってみます。
guest

0

前置きとして。
$_POST['message']が存在することを担保できるのは、
if (isset($_POST['message'])) { だけだと思うけどな。

送信するフォームの中で、「name="message"」をつけた項目が複数あると
$_POST['message']で受信できないことがあります。
javascriptがフォームの中にmessageの名前で隠し要素を追加していたりとか
点検してみてください。

投稿2019/08/30 06:02

編集2019/08/30 06:04
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

PHP

1/* dummy */ 2$member['id']=123; 3$member['name']="ほげほげ"; 4function h($str){ 5return htmlspecialchars($str); 6} 7$message=filter_input(INPUT_POST,"message"); 8if($message=="") $message=null; 9if(!is_null($message)){ 10 print 'INSERT INTO posts SET member_id=?, messages=?, reply_post_id=?, created=NOW()'; 11 print_r([$member["id"],$message]); 12} 13?> 14<body> 15<div id="wrap"> 16 <div id="head"> 17 <h1>ひとこと掲示板</h1> 18 </div> 19 <div id="content"> 20 <div style="text-align: right"><a href="logout.php">ログアウト</a></div> 21 <form method="post"> 22 <dl> 23 <dt><?php echo h($member['name']); ?>さん、メッセージをどうぞ</dt> 24 <dd> 25 <textarea type="text" name="message" cols="70" rows="10"><?php echo h($message); ?></textarea> 26 27 <input type="hidden" name="reply_post_id" value="<?php echo h($_REQUEST['res']); ?>" /> 28 </dd> 29 </dl> 30 <div> 31 <p> 32 <input type="submit" value="投稿する" /> 33 </p> 34 </div> 35 </form> 36 </div> 37</div>

投稿2019/08/30 06:10

yambejp

総合スコア114583

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問