jackytom
@jackytom

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

PHPで$_POSTされない

Q&A

Closed

PHPでフォームを作成しているのですが、1項目だけポストされません。
該当項目は

<input type="hidden" name="token" class="token" id="token" val="<?=$_POST['token'];?>">

で、CSRF対策のためのトークンです。
入力→確認→確定という流れですが、確認画面までは正しくポストされていることをvar_dumpで確認しました。
確定画面では空文字になっていることもvar_dumpで確認しました。
確定の段階でポストされないため、セッションとポストが一致せず、
「不正なリクエストです。処理を中断します。」
と出てしまい、処理が先に進みません。
原因究明にご協力いただければ幸いです。
送信元(確認画面)、送信先(確定画面)のソースを添付します。

送信元

<?php
	session_start();
	var_dump($_SESSION['token']);
	var_dump($_POST['token']);
	if(!isset($_SESSION['token']) || !isset($_POST['token']) || $_SESSION['token'] !== $_POST['token']){
		
		die('不正なリクエストです。処理を中断します。');
	}

	function escape($val)
	{
		return htmlspecialchars($val, ENT_QUOTES | ENT_HTML5, 'UTF-8');
	}
?>
<!doctype html>
<html lang=ja>
	<head>
		<meta charset="utf-8">
		<title>会員情報変更画面(確認)</title>
		<meta name="description" content="ヘッドセラピーを中心としたセラピーのサービスを提供しております。">
		<!--リセットcss-->
		<link rel="stylesheet" href="https://unpkg.com/ress/dist/ress.min.css">
		<!--css-->
		<link href="css/customer_cre_style.css" rel="stylesheet">
		<!--レスポンシブ対応-->
		<meta name="viwport" content="width=device-width, initial-scale=1">
		<!--Googleフォント-->
		<link href="https://fonts.googleapis.com/css2?family=Sawarabi+Gothic&display=swap" rel="stylesheet">
		<link href="https://fonts.googleapis.com/css2?family=Shippori+Mincho:wght@500&display=swap" rel="stylesheet">
	</head>
	<body>
		<?php require_once('header.php')?>
		<h1>会員情報変更画面(確認)</h1>
		<h2>下記でよろしいですか?</h2>
		<form method="post" class="members_conf" id="confirm" action="mypage_personal_change_commit.php">
			<input type="hidden" name="token" class="token" id="token" val="<?=$_POST['token'];?>">
			<input type="hidden" name="customer_id" class="customer_id" id="customer_id" value="<?=escape($_POST['customer_id']);?>">
			<div class="last_name" id="last_name">
				<label for="sei"></label>
				<input type="text" name="sei" class="sei" id="sei" value="<?=escape($_POST['sei']);?>" readonly="readonly">
			</div>
			<div class="first_name" id="first_name">
				<label for="mei"></label>
				<input type="text" name="mei" class="mei" id="mei" value="<?=escape($_POST['mei']);?>" readonly="readonly">
			</div>
			<div class="last_name_kana" id="last_name_kana">
				<label for="sei_kana">姓(カナ)</label>
				<input type="text" name="sei_kana" class="sei_kana" id="sei_kana" value="<?=escape($_POST['sei_kana']);?>" readonly="readonly">
			</div>
			<div class="first_name_kana" id="first_name_kana">
				<label for="mei_kana">名(カナ)</label>
				<input type="text" name="mei_kana" class="mei_kana" id="mei_kana" value="<?=escape($_POST['mei_kana']);?>" readonly="readonly">
			</div>
			<div class="posts" id="posts">
				<label for="post">郵便番号</label>
				<input type="text" name="post" class="post" id="post" value="<?=escape($_POST['post']);?>" readonly="readonly">
			</div>
			<div class="address_1" id="address_1">
				<label for="adress1">住所1</label>
				<input type="text" name="address1" class="address1" id="address1" value="<?=escape($_POST['address1']);?>" readonly="readonly">
			</div>
			<div class="address_2" id="address_2">
				<label for="adress2">住所2(番地・マンション名・号室)</label>
				<input type="text" name="address2" class="address2" value="<?=escape($_POST['address2']);?>" id="address2" readonly="readonly">
			</div>
			<div class="telephone" id="telephone">
				<label for="telno">電話番号</label>
				<input type="text" name="telno" class="telno" id="telno" value="<?=escape($_POST['telno']);?>">
			</div>
			<div class="mail" id="mail">
				<label for="telno">メールアドレス</label>
				<input type="text" name="mail_address" class="mail_address" id="mail_address" value="<?=escape($_POST['mail_address']);?>">
			</div>
			<div class="buttons" id="buttons">
				<button type="button" class="button_b" name="button_con" id="button_con" onclick="history.back()">戻る</button>
				<button type="submit" class="button_b" name="button_con" id="button_commit">確定</button>
			</div>
		</form>
		<?php var_dump($_POST['token']);?>
		<?php require_once('footer.php')?>
		<?php require_once('js/wpushchk_js.php');?>
	</body>
	</body>
</html>

送信先

<?php
	session_start();
	var_dump($_POST);
	var_dump($_POST['token']);
	var_dump($_SESSION['token']);
	if(!isset($_SESSION['token']) || !isset($_POST['token']) || $_SESSION['token'] !== $_POST['token']){
		
		die('不正なリクエストです。処理を中断します。');
	}
	unset($_SESSION['token']);

	function escape($val)
	{
		return htmlspecialchars($val, ENT_QUOTES | ENT_HTML5, 'UTF-8');
	}
	require_once('db_connect.php');
	require_once('password_db.php')
?>
<!doctype html>
<html lang=ja>
	<head>
		<meta charset="utf-8">
		<title>会員情報変更</title>
		<meta name="description" content="ヘッドセラピーを中心としたセラピーのサービスを提供しております。">
		<!--リセットcss-->
		<link rel="stylesheet" href="https://unpkg.com/ress/dist/ress.min.css">
		<!--css-->
		<link href="css/contact_style.css" rel="stylesheet">
		<!--レスポンシブ対応-->
		<meta name="viwport" content="width=device-width, initial-scale=1">
		<!--Googleフォント-->
		<link href="https://fonts.googleapis.com/css2?family=Sawarabi+Gothic&display=swap" rel="stylesheet">
		<link href="https://fonts.googleapis.com/css2?family=Shippori+Mincho:wght@500&display=swap" rel="stylesheet">
	</head>
	<body>
		<?php require_once('header.php');?>
		<main>
			<h1>
				会員情報変更
			</h1>
		<?php
			$sql = ("update customer set
					last_name = HEX(AES_ENCRYPT(?,'" . $password . "')),
					first_name = HEX(AES_ENCRYPT(?,'" . $password . "')),
					last_name_kana = HEX(AES_ENCRYPT(?,'" . $password . "')),
					first_name_kana = HEX(AES_ENCRYPT(?,'" . $password . "')),
					post = HEX(AES_ENCRYPT(?,'" . $password . "')),
					address1 = HEX(AES_ENCRYPT(?,'" . $password . "')),
					address2 = HEX(AES_ENCRYPT(?,'" . $password . "')),
					tel_no = HEX(AES_ENCRYPT(?,'" . $password . "')),
					mail_address = HEX(AES_ENCRYPT(?,'" . $password . "'))
					where customer_id = ?");
			$stmt = $pdo->prepare($sql);

			if($_SERVER['REQUEST_METHOD'] === 'POST'){
				if(empty(escape($_POST['sei'])) || empty(escape($_POST['mei'])) || empty(escape($_POST['sei_kana'])) || empty(escape($_POST['mei_kana'])) ||empty(escape($_POST['post'])) || empty(escape($_POST['address1'])) || empty(escape($_POST['address2'])) || empty(escape($_POST['telno']))|| empty(escape($_POST['mail_address']))) {
					echo '未入力の項目があります。';
				}
				else if(!preg_match('/^[0-9]{7}$/', $_POST['post'])) {
					echo '郵便番号は半角数字7桁で入力します。';
				}
				else if(!preg_match('/^[0-9]{10,11}$/',$_POST['telno'])) {
					echo '電話番号は半角数字11文字以内で入力します。';
				}
				else if(!preg_match('/^[a-zA-Z0-9_.+-]+(\.[a-zA-Z0-9_+-]+)*@([a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]*\.)+[a-zA-Z]{2,}$/',$_POST['mail_address'])) {
					echo 'メールアドレスの形式で入力します。';
				}
				else if($stmt -> execute([
					escape($_POST['sei']),
					escape($_POST['mei']),
					escape($_POST['sei_kana']),
					escape($_POST['mei_kana']),
					escape($_POST['post']),
					escape($_POST['address1']),
					escape($_POST['address2']),
					escape($_POST['telno']),
					escape($_POST['mail_address']),
					escape($_POST['customer_id']),
					]))
					{
					header('Location: mypage_personal_change_end.php', true, 303);
					exit();
						}
						else {
							echo '登録に失敗しました。';
							}
		}?>
		<?php require_once('footer.php');?>
	</body>
</html>
0

1Answer

値の属性はvalではなく正しくはvalueです。ここを修正するとPOSTされませんか?

- <input val="<?=$_POST['token'];?>">
+ <input value="<?=$_POST['token'];?>">
2Like

Comments

  1. @jackytom

    Questioner

    回答ありがとうございます。
    初歩的なミス失礼いたしました。
    修正したらPOSTされました。
    本件、クローズさせていただきます。

Your answer might help someone💌