質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

961閲覧

ワードプレスにおいて仮登録フォームの作成について

M.sato

総合スコア10

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/06/11 06:31

前提・実現したいこと

初めてこちらに質問させていただきます。どうぞ宜しくお願い申し上げます。

ワードプレスで登録フォームを作成しております。
登録フォームにおいてメールアドレスを入力すると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>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

メールフォームって php 分からん人がぽんとコード置いて動作するようなものではないです。

ざっとしか見てませんが、提示にあるコードは少なくとも3箇所不適切な箇所があります。致命的ではなさそうですが、外部に公開できるレベルのものでは無いです。
学習サンプルとしてもあまり質の良いものではないです。

もし使用することを検討しているのであれば、使用するコードの中身が精査できる程度には、php を学習して下さい。

また、周辺の設定もできているとは思えないので、メールは届かないと思いますが、学習用途なのであればメールシステムに関しても勉強して下さい。

投稿2019/06/11 10:59

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

M.sato

2019/06/12 01:08

貴重なご意見ありがとうございます。 まずはphpが精査できるレベルになれるよう努力してみます!
guest

0

試したことの結果を書いていらっしゃらないので、現状どういう状態かわかりませんが、あえてWordPressの仕組み(テーマ)を使うのであれば、固定ページ(page-xxx.php)にするのがいいのではないでしょうか。

https://wpdocs.osdn.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E9%9A%8E%E5%B1%A4

投稿2019/06/11 10:39

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

M.sato

2019/06/12 01:02

ご回答ありがとうございます。お送りいただいた記事がとても役に立ちそうです!いただいた記事をよく読んで試行錯誤してみます!
guest

0

自己解決

もうすこし勉強して出直しますー!

投稿2019/06/12 01:21

M.sato

総合スコア10

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問