DB情報
mydbにtaskテーブルとpre_memberテーブルを作成しました。
taskテーブルには、会員情報の記載
pre_memberテーブルには、仮登録情報の記載
本来の流れ
pre_memberでメールアドレスの登録を行う。そしてurltokenとdateで、登録した人が5分以内にメールアドレスのリンクをクリックをすることで、登録画面(taskテーブル)に自動で遷移するようにしています。pre_memberで仮登録をした際に、flagが自動で0が入り、それが仮登録を表しております。
本登録が終わった際に、pre_memberテーブルのflagを「1」にUPDATEを行うことで、本登録が完了する流れとなっております。
今の流れ
本登録が終わった際に、pre_memberテーブルのflagを「1」にUPDATEを行うことができていない状況
5分経過すると、メールリンクからの登録は、行えないようになっているが、5分以内ならそのメールのリンクをクリックすれば、何回でもpre_memberテーブルにデータを登録することが可能な状況です。
やりたいこと
taskテーブルとpre_memberテーブルは主キーは同じidカラム使用しています。taskテーブルのレコードを基準にpre_memberテーブルのflagを「1」の値にUPDATEしたいです。
最後の本登録で会員情報をDBに入れる際に、pre_memberのidをtasテーブルのidに対応させて、なおかつ、flagを「1」にUPDATEしたいと思っています。
このソースのままだと、pre_memberテーブルのflagが「1」に更新されないです。
php
1?php 2require_once('../require/header.php'); 3$KlastName = $_POST['KlastName']; 4$Kname = $_POST['Kname']; 5$lastName = $_POST['lastName']; 6$name = $_POST['name']; 7$password = $_POST['password']; 8$sex =(int) $_POST['sex'];//URLで数字はPOSTすると文字列と扱われるため、intを使い数字に直して代入 9$bday = $_POST['bday']; 10 11try { 12 $db = new PDO(DB_SERVER, DB_USERNAME, DB_PASSWORD); 13 $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 14 $sql = 'INSERT INTO task (KlastName,Kname,lastName,name, password, sex, bday) VALUES (:KlastName,:Kname,:lastName,:name, :password, :sex, :bday)'; 15 //カラム名を順番に指定していく。VALUES以下で?にブレースホルダを指定して行く 16 $stmt = $db->prepare($sql); 17 $stmt->bindParam(':KlastName', $KlastName, PDO::PARAM_STR); 18 $stmt->bindParam(':Kname', $Kname, PDO::PARAM_STR); 19 $stmt->bindParam(':lastName', $lastName, PDO::PARAM_STR); 20 $stmt->bindParam(':name', $name, PDO::PARAM_STR); 21 $stmt->bindParam(':password', $password, PDO::PARAM_STR); 22 $stmt->bindParam(':sex', $sex, PDO::PARAM_INT); 23 $stmt->bindParam(':bday', $bday, PDO::PARAM_STR); 24 $stmt->execute(); 25 26//taskテーブルに挿入したデータのIDを取得 27 $id = intval($db->lastInsertId()); 28 29// taskテーブルに挿入したレコードのIDを元にpre_memberテーブルのデータを更新 30 $stmt = $db->prepare( 31 "UPDATE pre_member SET flag=1 WHERE id=(:id)" ); 32 $stmt->bindParam(':id', $id,PDO::PARAM_INT); 33 echo "登録が完了しました"; 34} catch (PDOException $e) { 35 die('エラー:'.$e->getMessage()); 36} 37?>
ー追記ー
やっと、他の皆さんがいいたいことが、わかりました。
流れとして
1、pre_memberテーブルで、メールアドレスやidといった登録は完了している
2、そこに$id = intval($db->lastInsertId())で、直前に挿入したデータidを取得
3、そのidをもとにflagカラムを「1」にupdateしようとしていた
4、とうぜん、そんなidは登録されていないために、何も起こらない。
できない原因がわかりました。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/16 04:26
2018/10/16 04:46
2018/10/16 05:18
2018/10/16 05:41
2018/10/16 05:52
2018/10/16 06:21