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

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

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

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

Q&A

解決済

3回答

857閲覧

新規ユーザー登録→確認メール→リンク→本登録

amaturePy

総合スコア131

PHP

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

0グッド

2クリップ

投稿2019/05/17 16:50

編集2019/05/18 09:20

<やりたいこと>
登録フォームから必要項目の入力→入力されたメールアドレスへ確認メールの送信→そのメールにあるリンクをクリックするとアカウントが正式登録される。

現状DBへはデータが入るのですが、メールが届かない状態です。
調べるとPHP.iniのデフォルトsettingの変更などはしてみたものの、特に変化はないです。
私のコードが原因だとは思うのですが、どこが間違いか指摘して頂けると幸いです。
<DB:microblog>
<テーブル名:USERS>
<カラム名:firstname/lastname/email/phone/birthdate/username/password>

<html> <head> </head> <body> <?php if(isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] === 'POST') { ini_set('display_errors',1);//画面にエラーを表示 error_reporting(E_ALL); session_start(); $firstname=''; $lastname=''; $email=''; $phone=''; $birthdate=''; $username=''; $password=''; if(isset($_POST['firstname']) && isset($_POST['lastname']) && isset($_post['email']) && isset($_POST['phone']) && isset($_POST['birthdate']) && isset($_POST['username']) && isset($_POST['password'])){ $_SESSION["USER"] = 'USER'; header("Location:error.php"); exit; } if(isset($_POST['email'])){ echo "Plese check confirmation Email"; } else { echo "We failded sending Email to you , please check your Email address again"; }; $dsn ='mysql:host=localhost;dbname=microblog'; $user ='root'; $password ='root'; //$USER = $FILES['firstname']['lastname']['email']['phone']['birthdate']['username']['password']; try { $db = new PDO($dsn,$user,$password); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $stmt = $db->prepare("INSERT INTO users(firstname,lastname,email,phone,username,password) VALUES (:firstname, :lastname, :email, :phone, :username, :password)"); $stmt->execute(array( ':firstname' => $_POST['firstname'], ':lastname' => $_POST['lastname'], ':email' => $_POST['email'], ':phone' => $_POST['phone'], ':username' => $_POST['username'], ':password' => $_POST['password'] )); } catch(PDOException $e){ die ('error:'.$e->getMessage()); } } function Send_Mail($to, $from, $title, $body, $header) { // メール送信 mb_language('e'); //mb_internal_encoding("ISO-2022-JP"); $to = $_POST['email']; $title ="test"; $body ="test"; $header = "From:"; $from = "test"; //$from $result = mb_send_mail($to, $title, $body, $header, $from);      return $result; } Send_Mail($result); ?> <h2>Register your information</h2> <form method="POST" action="register.php"> Fastname:<input type="text" name="firstname"><br><br> Lastname:<input type="text" name="lastname"><br><br> Email Adrress:<input type="text" name="email"><br><br> Phone Number:<input type="text" name="phone"><br><br> Birth Date:<input type="text" name="birthdate"><br><br> Username:<input type="text" name="username"><br><br> Password:<input type="text" name="password"><br><br> <input type="submit" name="register" value="Register"> </form> </body> </html> コード

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

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

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

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

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

Eggpan

2019/05/17 17:08

mb_send_mail の戻り値はどうなっているか、メール送信だけのコードは動作したのか、などを追記ください。 メール送信についてはphpだけじゃなくメールのパッケージも絡むので、現状だと適切な回答が難しいです。
amaturePy

2019/05/17 17:45

戻り値ですか。。。設定していないです。調べます。 ありがとうございます。 メール送信のコードは動作していません。なるほど、php以外にも必要な要素があったのですね。調べるとmail関数のみで処理できるものかと誤認しておりました。
Eggpan

2019/05/17 18:03

mb_send_mail は成功したらtrueが返却されるので、 You have registered and the activation mail.... の部分が出力されていたら関数自体は成功していると思います。 失敗してそうであればphp.iniのメールの見直しが必要そうです。 環境にもよりますが、多くの場合何も設定していなければlocalhostのPostfixなど、デフォルトMTAに送信しようとします。 この辺り確認していただいて、どのような結果だったかを質問欄に追記してもらえれば、より適切な回答が得られると思います。
m.ts10806

2019/05/17 20:36

phpのバージョンとPHPが動作している環境(自分のPC,OS、サーバー情報など)をご提示ください。 もし自分のPCのローカル環境ですと特殊な設定が必要となります(要はメールサーバーなどの指定)
amaturePy

2019/05/18 01:20

cakephpなどですか。 まずはPHPだけで作成しなくては行けなくて、また社内用なのでセキュリティに関しては今回は優先させない方向で進めています。特殊な設定が必要なのですね。。。 php.iniに関しては再設定の必要がありそうですね。。。 phpのバージョンはPHP 7.1.23 になります。
amaturePy

2019/05/18 01:28

私のPCはMacでOSは10.14.4  サーバーは$user = 'root'; $password = 'root'; $db = 'inventory'; $host = 'localhost'; $port = 3306; になります。
amaturePy

2019/05/18 01:29

まだメールが届かない状態なので、function send_mailを見直します。
m.ts10806

2019/05/18 02:15

MySQLとsend_mailは関係ないですね。あくまでサーバーからのメール送信の設定(メールサーバーといったほうがいいか)の問題です。 ローカル環境に構築されているようなので、何かしらのメールサーバーを通す必要があるはずなので、その観点(ローカルPC メール送信 php)などで調べてみてください。Mac利用者ではないのでもしかしたらMacから見た方法も探す必要がありそうです。 過去質問でもありましたがWindowsが多かった印象。過去質問も探してみてください
amaturePy

2019/05/18 03:10

ありがとうございます。 確認してみます。 思った以上に手前がかかりますね。
guest

回答3

0

私のコードが原因だとは思うのですが、どこが間違いか指摘して頂けると幸いです。

そもそも、Send_Mail() を定義だけして、実行していないからですね。

投稿2019/05/18 07:40

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

amaturePy

2019/05/18 08:53

ありがとうございます。 一応returnに$resultを追加したのですが、これで実行コマンドの形を成していますでしょうか?? 正直まだfunctionなども危うい状態でして、、、
退会済みユーザー

退会済みユーザー

2019/05/18 08:55

ん?? return がどうこうとか以前に、 function がよばれていないですよ
amaturePy

2019/05/18 09:21

勉強になります! Send_Mail($result);を追加しました。 いかがでしょうか!?
amaturePy

2019/05/18 09:21

以前としてブラウザにはエラーで表示されないので、どこか修正しないと行けないのでしょうが、、、
退会済みユーザー

退会済みユーザー

2019/05/18 10:14

基礎的な内容の本でも買って勉強してください。 まず、function Send_Mail( から }の間を編集するという問題じゃない。 DBへの登録の後にメールを送りたいなら、なぜその後でSend_Mail() を実行しないのだ?と言っているのです。 $stmt->execute... の次の処理で Send_Mail($to, $from, $title, $body, $header); というように実行しなきゃメールとぶわけないです。
amaturePy

2019/05/19 01:47

理解不足で大変申し訳ありませんでした。 実行ですね。 Function関数 実行で調べて似ているような感じでコードをいじっていました。 再度、PHPのテキストをみて確認します。 なかなか難しいですね。
退会済みユーザー

退会済みユーザー

2019/05/19 02:24

現状のコードだとエラー出るはずですけど…
guest

0

設計/フローのどちらもセキュリティ的な考慮が足りていないので、フレームワークの使用をオススメします。

状況だけ見ると、メールシステムが正しく可動していません。
メールシステムが正しく可動しているかどうかの切り分けをして下さい。
フレームワークを使用した場合も、メールシステムの稼働確認は必須なので、メールシステムに関して学習して下さい

条件分岐の様子も記述がないので想像するしか無いですが、条件分岐に失敗している可能性もあります。

投稿2019/05/17 23:22

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

amaturePy

2019/05/18 02:02

承知しました。 STMTサーバーにまずは設定しないと行けないみたいですね。 試してみます。 ありがとうございます。
guest

0

自己解決

メールパッケージのインストール並びにGmailのセキュリティを下げることでメールの送受信に成功しました。
またfunction mail関数を削除→変数の定義とmail関数に切り替えました。

<head> </head> <body> <?php if(isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] === 'POST') { ini_set('display_errors',1);//画面にエラーを表示 error_reporting(E_ALL); session_start(); $firstname=''; $lastname=''; $email=''; $phone=''; $birthdate=''; $username=''; $password=''; if(isset($_POST['firstname']) && isset($_POST['lastname']) && isset($_post['email']) && isset($_POST['phone']) && isset($_POST['birthdate']) && isset($_POST['username']) && isset($_POST['password'])){ $_SESSION["USER"] = 'USER'; header("Location:vertify.php"); exit; } if(isset($_POST['email'])){ echo "Plese check the Email"; } else { echo "Your Email is invalid , please check your Email address again"; }; $dsn ='mysql:host=localhost;dbname=microblog'; $user ='root'; $password ='root'; //$USER = $FILES['firstname']['lastname']['email']['phone']['birthdate']['username']['password']; try { $db = new PDO($dsn,$user,$password); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $stmt = $db->prepare("INSERT INTO users(firstname,lastname,email,phone,username,password) VALUES (:firstname, :lastname, :email, :phone, :username, :password)"); $stmt->execute(array( ':firstname' => $_POST['firstname'], ':lastname' => $_POST['lastname'], ':email' => $_POST['email'], ':phone' => $_POST['phone'], ':username' => $_POST['username'], ':password' => $_POST['password'] )); } catch(PDOException $e){ die ('error:'.$e->getMessage()); } /////////////////////////mail //$gesture = '' $to = $_POST['email']; $subject = "Email vertification"; //$message = '<a href="http://localhost/MAMP/kento/php/vertify.php?">Verify Email!</a>'; $message = "Thanks for Registering. Click the link below to Acivate your Account. \n"; $message .= ; //$message .= "You must Activate your Account to Login"; //$headers = 'From:Kenchan'; //$=substr(md5(mt_rand()),0,15); mail($_POST['email'],$subject,$message); } ?> <h2>Register your information</h2> <form method="POST" action="register.php"> Fastname:<input type="text" name="firstname"><br><br> Lastname:<input type="text" name="lastname"><br><br> Email Adrress:<input type="text" name="email"><br><br> Phone Number:<input type="text" name="phone"><br><br> Birth Date:<input type="text" name="birthdate"><br><br> Username:<input type="text" name="username"><br><br> Password:<input type="text" name="password"><br><br> <input type="submit" name="register" value="Register"> </form> </body> </html> コード

投稿2019/05/21 02:28

編集2019/05/21 02:44
amaturePy

総合スコア131

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

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

m.ts10806

2019/05/21 02:33

これだけだと何がどうなって解決済みとなったか誰にもわかりませんよ。 回答編集して「具体的に解決に至った手順」を記載してください。
amaturePy

2019/05/21 02:44

失礼いたしました。 編集いたします。
m.ts10806

2019/05/21 02:52

>Gmailのセキュリティを下げることで 気にしすぎかもしれませんが、これ、大丈夫なんでしょうか・・・。 安価なレンタルサーバー借りたほうが無難に思います。
amaturePy

2019/05/21 09:26

流石に強引でしたかね。。。 承知しました。 今回は簡易版twitterを作成するという課題で期限があるものなので、このまま走らせます。 ですが、今後実際のプロダクトを作成する際にはきちんとレンタルサーバーを利用しようと思います。
m.ts10806

2019/05/21 09:31

それまでなにもないといいんですが、全世界からアクセスできるところに書いてしまっている以上は早めに対策打ったほうがいいですね。 今はちょっとしたところから身元特定が可能な情報社会なので。
amaturePy

2019/05/21 09:36

ちょっと早急に考えます。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問