前提・実現したいこと
PHPでTwitterクローンを作成しています。
テキストメッセージをHTMLのform要素からPOST送信し、PHPでそれを$_POSTから取り出してデータベースに登録しようとしています。
発生している問題・エラーメッセージ
投稿メッセージをデータベースに挿入する処理を行う際、47-57行目のHTMLのform要素でaction属性に""を指定し、method属性にPOSTを指定して、投稿内容を$_POSTから取得しようとしたのですが、19行目でempty($_POST)がtrueを返してしまい、投稿内容を取得できません。
該当のソースコード
PHP
1<?php 2session_start(); 3require('dbconnect.php'); 4 5if (isset($_SESSION['id']) && $_SESSION['time'] + 3600 > time()) { 6 // logged in 7 $_SESSION['time'] = time(); 8 9 $members = $db->prepare('SELECT * FROM members WHERE id=?'); 10 $members->execute(array($_SESSION['id'])); 11 $member = $members->fetch(); 12} else { 13 // not logged in 14 header('Location: login.php'); 15 exit(); 16} 17 18// record a post 19if (!empty($_POST)) { 20 if ($_POST['message'] != '') { 21 $message = $db->prepare('INSERT INTO posts SET member_id=?, message=?, created=NOW()'); 22 $message->execute(array($member['id'], $_POST['message'])); 23 24 header('Location: index.php'); 25 exit(); 26 } 27} 28?> 29 30<!DOCTYPE html> 31<html lang="ja"> 32<head> 33 <meta charset="UTF-8"> 34 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 35 <meta http-equiv="X-UA-Compatible" content="ie=edge"> 36 <title>ひとこと掲示板</title> 37 38 <link rel="stylesheet" href="style.css" /> 39</head> 40 41<body> 42<div id="wrap"> 43 <div id="head"> 44 <h1>ひとこと掲示板</h1> 45 </div> 46 <div id="content"> 47 <form action="" method="POST"> 48 <dl> 49 <dt><?php echo htmlspecialchars($member['name'], ENT_QUOTES); ?>さん、メッセージをどうぞ</dt> 50 <dd> 51 <textarea name="message" cols="50" rows="5"></textarea> 52 </dd> 53 </dl> 54 <div> 55 <input type="submit" value="投稿する" /> 56 </div> 57 </form> 58 </div> 59</div> 60</body> 61</html>
試したこと
ログインはできているはずです。
19行目からはじまるブロックの後にelse節を作って挙動を確認しました。
フォームに何かメッセージ入力してを投稿するとempty($_POST)がtrueを返しますが、フォームを空にして投稿すると、なぜかempty($_POST)がfalseを返します。
補足情報(FW/ツールのバージョンなど)
OS: Ubuntu 18.04
サーバー環境など: XAMPP 7.4.2
『よくわかるPHPの教科書』 https://book.mynavi.jp/ec/products/detail/id=89743 を踏襲して作成しているのですが、同書のサンプルファイル https://book.mynavi.jp/files/user/support/9784839964689/PHP_samplefile.zip のコードで試しても同じ状況が起きてしまいます。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/02 03:43
退会済みユーザー
2020/03/02 04:32
2020/03/02 08:28