jackytom
@jackytom

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

PHPでmariadbの更新ができない

Q&A

Closed

PHPのエラーは出ずに最後まで処理されるのですが、phpadminでテーブルを確認したところ、テーブルのupdateができてませんでした。

ログを確認したところ、下記のsqlが実行されていました。

update customer set
				post=HEX(AES_ENCRYPT(?,'password')),
				address1=HEX(AES_ENCRYPT(?,'password')),
				address2=HEX(AES_ENCRYPT(?,'password')),
				tel_no=HEX(AES_ENCRYPT(?,'password'))
				where customer_id=?

PHPでexecuteに宣言した値が取得されずに、「?」のままSQLが実行されてしまったようです。
暗号化したいための記述を考えたのですが、記述の間違いでしょうか?

PHPのソースを添付しましので、原因調査に協力いただければ幸いです。
よろしくお願いいたします。

<?php
	session_start();
		if (isset($_POST['token']) && isset($_SESSION['token'])) {
			$token = $_POST['token'];
			}
			else if ($token != $_SESSION['token']) { 
				header("Location: contact.php");
				echo ('アクセスが中断されました。');
				exit();
				}
					else {
						header("Location: contact.php");
						echo ('不正なアクセスです');
						exit();
						}

	session_destroy();

	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=$pdo->prepare("update customer set
				post = HEX(AES_ENCRYPT(?,'" . $password . "')),
				address1 = HEX(AES_ENCRYPT(?,'" . $password . "')),
				address2 = HEX(AES_ENCRYPT(?,'" . $password . "')),
				tel_no = HEX(AES_ENCRYPT(?,'" . $password . "'))
				where customer_id = ?");

			if($_SERVER['REQUEST_METHOD'] === 'POST'){
				if(empty(escape($_POST['post'])) || empty(escape($_POST['address1'])) || empty(escape($_POST['address2'])) || empty(escape($_POST['telno']))) {
					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($sql -> execute([
					escape($_POST['post']),
					escape($_POST['address1']),
					escape($_POST['address2']),
					escape($_POST['telno']),
					escape($_POST['customer_id']),
					]))
					{
					require_once('customer_create_mail.php');
					header('Location: customer_create_end.php', true, 303);
					exit();
						}
						else {
							echo '登録に失敗しました。';
							}
		}?>
		<?php require_once('footer.php');?>
	</body>
</html>
0

2Answer

本件、自己解決しました。
ログをもう一度見てみたら、実行されているSQLは下記でした。

update customer set
				post=HEX(AES_ENCRYPT('郵便番号','password')),
				address1=HEX(AES_ENCRYPT('住所','password')),
				address2=HEX(AES_ENCRYPT('番地','password')),
				tel_no=HEX(AES_ENCRYPT('電話番号','password'))
				where customer_id=''

where句のcustomer_idが取得できていないのは、前段のソースの記述ミスでした。
お騒がせして申し訳ありませんでした。

0Like

This answer has been deleted for violation of our Terms of Service.

Your answer might help someone💌