PHPで、暗号化してDBにinsertしようとするとエラーになる。
下記を参考にして、PHPで暗号化してテーブルにinsertするソースを書いています。
https://qiita.com/mhagita/items/899483f08347fddd9567
そういたしますと、下記のエラーが出ます。
発生している問題・エラー
Uncaught Error: Call to undefined function HEX() in C:\xampp\htdocs\Portfolio\contact_commit.php:65 Stack trace: #0 {main} thrown in C:\xampp\htdocs\Portfolio\contact_commit.php on line 65
SQL文中の「HEX」が未定義関数と認識してしまっているようです。
試しに、
'$sei=HEX(AES_ENCRYPT(escape($_POST['sei']),".$pass."))'
と変数にしてみても、結果は同じでした。
更に、念のため、phpadminで直接insert文を実行してみましたが、こちらは問題なく登録
できました。
ということは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>Salon Yuri-rinへのお問い合わせ</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>
Salon Yuri-rinへの問い合わせ
</h1>
<?php
$sql=$pdo->prepare('insert into contact(contact_id,members_id,contact_date,last_name,first_name,last_name_kana,first_name_kana,mail_address,contact_div_id,contact_cont,agree_div,anser_date,anser_cont,anser_div,anser_user) values (null,null,null,?,?,?,?,?,?,?,1,null,null,null,null)');
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['mail_address'])) || empty(escape($_POST['contact_cont']))){
echo '未入力の項目があります。';
}
else if(escape($_POST['contact_div']) === "0"){
echo '問い合わせ区分を選択してください。';
}
else if(!preg_match('/\A[ァ-ヴー]+\z/u', $_POST['sei_kana']) || !preg_match('/\A[ァ-ヴー]+\z/u', $_POST['mei_kana'])){
echo 'カナ名は全角カナで入力します。';
}
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($sql -> execute([
HEX(AES_ENCRYPT(escape($_POST['sei']),".$pass.")),
HEX(AES_ENCRYPT(escape($_POST['mei']),".$pass.")),
HEX(AES_ENCRYPT(escape($_POST['sei_kana']),".$pass.")),
HEX(AES_ENCRYPT(escape($_POST['mei_kana']),".$pass.")),
HEX(AES_ENCRYPT(escape($_POST['mail_address']),".$pass.")),
HEX(AES_ENCRYPT(escape($_POST['contact_div']),".$pass.")),
HEX(AES_ENCRYPT(escape($_POST['contact_cont']),".$pass."))
]))
{
require_once('contact_mail_c.php');
require_once('contact_mail_s.php');
header('Location: contact_end.php', true, 303);
exit();
}
else {
echo '登録に失敗しました。';
}
}?>
<?php require_once('footer.php');?>
</body>
</html>