下記のようにform.phpでユーザーが「ユーザー名」と「パスワード」を入力して、非同期でサーバーサイドで
verifyして一致しなければjsのdataに"disagree"が格納され、非同期でエラーメッセージが出力されます。
1)このように非同期でverifyしてエラーメッセージを出力するのは実務的によく使用される方法なのでしょうか。もちろんあえてajaxを使わずにサーバーサイドで直接判定をしても良いのですが、このような方法が参考書にあったため、実務的な側面でアドバイスをいただけると嬉しいです。
2)仮にajaxで非同期で判定した場合、verifyした結果、名前とpassが一致したとして、$hanteiにtrueが格納された後の処理がどのようにすれば良いかわかりません。実際の処理としてはform.phpではないトップページのtop.phpにリダイレクトされるとともに、ユーザー名をsession['user']にユーザー名を格納した状態でユーザー名がセッションが生きている限り表示されるような仕様にしたいのですがどのようにしたら良いのでしょうか。
以下のようなコードでリダイレクトした場合では
ajaxで通信エラーが発生します
$hantei=(password_verify($_POST['transfer_login_pass'],$result['password']));
if ($hantei) {
$url = 'https://www.yahoo.co.jp/';
header('Location:'.$url, true , 301);
}
よろしくお願い申し上げます。
php
1//form.php 2<form id="login" class="login-form>" action="" method="POST"> 3 <input type="hidden" name="login" value="login_catch"> 4 <input type="text" name="loginname" id="login_username" class="register_text" placeholder="ユーザ名"/> 5 <input type="password" name="loginpw" id="login_pass" class="register_text" placeholder="パスワード"/> 6 <button form="login" class="login_button"type="button" name="">ログインする</button> 7</form> 8 9 10$(function(){ 11 $('.login_button').on('click',function(){ 12 const login_username = $('#login_username').val(); 13 const login_pass = $('#login_pass').val(); 14 $.ajax({ 15 type:'POST', 16 url:'32_logindupulicate.php', 17 datatype:'json', 18 data:{ 19 transfer_login_username:login_username, 20 transfer_login_pass:login_pass 21 } 22 }) 23 .then( 24 function(data){//success 25 if(data=="disagree"){ 26 $('.messagebox').append("<p>パスワードと名前が一致しません</p>"); 27 } 28 }, 29 function(){//pattern fail 30 alert('通信に失敗しました、通信環境を確認してください'); 31 } 32 ) 33 }) 34}) 35
php
1//ajax.php 2 3if ($_POST['transfer_login_username'] || $_POST['transfer_login_pass']){ 4 $pass=$_POST['transfer_login_pass']; 5 include('./z_common_pdo.php'); 6 try{ 7 $pdo->beginTransaction(); 8 try{ 9 $stmt = $pdo->prepare('SELECT password FROM user_table where username=:uname'); 10 $stmt->bindParam(':uname',$_POST['transfer_login_username'],PDO::PARAM_STR); 11 $stmt->execute(); 12 $result=$stmt->fetch(PDO::FETCH_ASSOC); 13 $pdo->commit(); 14 }catch(PDOException $e){ 15 $pdo->rollback(); 16 throw $e; 17 } 18 }catch(PDOException $e){ 19 exit('データベース接続失敗。'.$e->getMessage()); 20 } 21 $hantei=(password_verify($_POST['transfer_login_pass'],$result['password'])); 22 if ($hantei) { 23 //?? 24 }else{ 25 echo "disagree"; 26 } 27}else{ 28 echo "<p>無効な処理です、リダイレクトします。</p>"; 29}
回答1件
あなたの回答
tips
プレビュー