前提・実現したいこと
初めてこちらに質問させていただきます。どうぞ宜しくお願い申し上げます。
ワードプレスで登録フォームを作成しております。
登録フォームにおいてメールアドレスを入力すると24時間以内にアクセスすることで有効なURLの発行とそれが入力者に送信される仕組みを作りたいです。
その第一歩として「仮登録フォーム」と「確認フォーム」の作成したところ、以下のエラ-が発生しました。
下記ずらずらと書いて恐縮ですが、まずはphpファイルのアップロード先(詳細ディレクトリ)をご教示いただけると助かります。
どうぞ宜しくお願い申し上げます。
【参考URL】
https://noumenon-th.net/programming/2016/02/27/registration2/
発生している問題・エラーメッセージ
①仮登録フォーム(ファイル名:registration_mail_form.php)と確認フォーム(ファイル名:registration_mail_check.php)を作成しました。 ②①でのファイルをftpからアップロードしようと思いましたが、どのディレクトリにファイルをアップロードすればいいのかがわかりません。
該当のソースコード
php
試したこと
①ワードプレス管理画面から「固定ページ」の作成をし、仮登録フォームのソースをhtmlエディターで入力
②phpmyadminからアクセスし、仮登録フォームから登録されるデータデーブルの作成
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
php
1//仮登録フォームです(registration_mail_form.php) 2<?php 3session_start(); 4 5header("Content-type: text/html; charset=utf-8"); 6 7//クロスサイトリクエストフォージェリ(CSRF)対策 8$_SESSION['token'] = base64_encode(openssl_random_pseudo_bytes(32)); 9$token = $_SESSION['token']; 10 11//クリックジャッキング対策 12header('X-FRAME-OPTIONS: SAMEORIGIN'); 13 14?> 15 16<!DOCTYPE html> 17<html> 18<head> 19<title>メール登録画面</title> 20<meta charset="utf-8"> 21</head> 22<body> 23<h1>メール登録画面</h1> 24 25<form action="registration_mail_check.php" method="post"> 26 27<p>メールアドレス:<input type="text" name="mail" size="50"></p> 28 29<input type="hidden" name="token" value="<?=$token?>"> 30<input type="submit" value="登録する"> 31 32</form> 33 34</body> 35</html>
php
1 2//確認フォームです(registration_mail_check.php) 3<?php 4session_start(); 5 6header("Content-type: text/html; charset=utf-8"); 7 8//クロスサイトリクエストフォージェリ(CSRF)対策のトークン判定 9if ($_POST['token'] != $_SESSION['token']){ 10 echo "不正アクセスの可能性あり"; 11 exit(); 12} 13 14//クリックジャッキング対策 15header('X-FRAME-OPTIONS: SAMEORIGIN'); 16 17//データベース接続 18require_once("db.php"); 19$dbh = db_connect(); 20 21//エラーメッセージの初期化 22$errors = array(); 23 24if(empty($_POST)) { 25 header("Location: registration_mail_form.php"); 26 exit(); 27}else{ 28 //POSTされたデータを変数に入れる 29 $mail = isset($_POST['mail']) ? $_POST['mail'] : NULL; 30 31 //メール入力判定 32 if ($mail == ''){ 33 $errors['mail'] = "メールが入力されていません。"; 34 }else{ 35 if(!preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9._-]+)+$/", $mail)){ 36 $errors['mail_check'] = "メールアドレスの形式が正しくありません。"; 37 } 38 39 /* 40 ここで本登録用のmemberテーブルにすでに登録されているmailかどうかをチェックする。 41 $errors['member_check'] = "このメールアドレスはすでに利用されております。"; 42 */ 43 } 44} 45 46if (count($errors) === 0){ 47 48 $urltoken = hash('sha256',uniqid(rand(),1)); 49 $url = "http://◯◯◯.co.jp/registration_form.php"."?urltoken=".$urltoken; 50 51 //ここでデータベースに登録する 52 try{ 53 //例外処理を投げる(スロー)ようにする 54 $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 55 56 $statement = $dbh->prepare("INSERT INTO pre_member (urltoken,mail,date) VALUES (:urltoken,:mail,now() )"); 57 58 //プレースホルダへ実際の値を設定する 59 $statement->bindValue(':urltoken', $urltoken, PDO::PARAM_STR); 60 $statement->bindValue(':mail', $mail, PDO::PARAM_STR); 61 $statement->execute(); 62 63 //データベース接続切断 64 $dbh = null; 65 66 }catch (PDOException $e){ 67 print('Error:'.$e->getMessage()); 68 die(); 69 } 70 71 //メールの宛先 72 $mailTo = $mail; 73 74 //Return-Pathに指定するメールアドレス 75 $returnMail = 'web@sample.com'; 76 77 $name = "ウェブの葉ショップ"; 78 $mail = 'web@sample.com'; 79 $subject = "【ウェブの葉ショップ】会員登録用URLのお知らせ"; 80 81$body = <<< EOM 8224時間以内に下記のURLからご登録下さい。 83{$url} 84EOM; 85 86 mb_language('ja'); 87 mb_internal_encoding('UTF-8'); 88 89 //Fromヘッダーを作成 90 $header = 'From: ' . mb_encode_mimeheader($name). ' <' . $mail. '>'; 91 92 if (mb_send_mail($mailTo, $subject, $body, $header, '-f'. $returnMail)) { 93 94 //セッション変数を全て解除 95 $_SESSION = array(); 96 97 //クッキーの削除 98 if (isset($_COOKIE["PHPSESSID"])) { 99 setcookie("PHPSESSID", '', time() - 1800, '/'); 100 } 101 102 //セッションを破棄する 103 session_destroy(); 104 105 $message = "メールをお送りしました。24時間以内にメールに記載されたURLからご登録下さい。"; 106 107 } else { 108 $errors['mail_error'] = "メールの送信に失敗しました。"; 109 } 110} 111 112?> 113 114<!DOCTYPE html> 115<html> 116<head> 117<title>メール確認画面</title> 118<meta charset="utf-8"> 119</head> 120<body> 121<h1>メール確認画面</h1> 122 123<?php if (count($errors) === 0): ?> 124 125<p><?=$message?></p> 126 127<p>↓このURLが記載されたメールが届きます。</p> 128<a href="<?=$url?>"><?=$url?></a> 129 130<?php elseif(count($errors) > 0): ?> 131 132<?php 133foreach($errors as $value){ 134 echo "<p>".$value."</p>"; 135} 136?> 137 138<input type="button" value="戻る" onClick="history.back()"> 139 140<?php endif; ?> 141 142</body> 143</html>
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/12 01:08