phpのログイン認証のコードをネットを見てつぎはぎで作りました。ここで問題なのがこのコードは果たして正解なのだろうかと言う疑問です。周りに添削してくれるような人はいません。何か間違いがあれば指摘していただければ幸いです。現在コードはエラーなく動いていますがたまたまかもしれません。javascriptからnameとpassを送信してphpをよんでいます。phpからmysqlを走査して該当者がいれば1をいなければ0をエラーがあればeをechoで送信しています。
php
1<?php 2try { 3 $received_data = json_decode(file_get_contents("php://input")); 4 $name = $received_data -> name; 5 $pass = $received_data -> pass; 6 if( v_aznum($name) || v_aznum($pass) ){ 7 echo 2; 8 return; 9 } 10 11 $dsn = 'データベース名'; 12 $user = 'ユーザ名'; 13 $pw = 'パスワード'; 14 15 $sql = 'SELECT * FROM test WHERE name = :name'; 16 $dbh = new PDO($dsn, $user, $pw); 17 $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 18 $sth = $dbh->prepare($sql); 19 $sth->bindParam( ':name', $name, PDO::PARAM_STR); 20 $sth->execute(); 21 22 $result = $sth->fetch(PDO::FETCH_ASSOC); 23 if(password_verify($pass, $result['pass'])){ 24 echo 1; 25 }else{ 26 echo 0; 27 } 28}catch(PDOException $e){ 29 echo "e"; 30} 31 32function v_aznum($data) { 33 if(!isset($data))return true; 34 if (preg_match("/^[a-zA-Z0-9]+$/",$data)) { 35 return false; 36 }else{ 37 return true; 38 } 39}
何が正解かは要件に基づいて設計されたとおりの実装になってるかどうかであって、
コードだけ見て他人がとやかく言えるもんではないです。
まずは「自分が決めた仕様通りに動いてるか」だけ確認してください。
※もちろん理解せずにツギハギだけで作りたいものが作れるようにはなりません

「php://input」を相手にするとwebからのフォーム入力は使わないの?
ybhQSpYbitSKさん、大変申し訳ないのですが質問の意味が分かりません。
「php://input」を相手にするとはどういうことでしょうか?
nameもpassもフォームの入力です。

あぁ、フォーム送信じゃなく、jsonデータがPOSTされてるのを、直接 php://input から受け取るわけね、今わかった。フォームで入力させたものを、JSで加工してjsonとしてPOSTする前提のコードになってるよと。もしもwebフォーム送信を使うなら、ふつうに $_POST を使うなり filter_input() 使うなりするだろうね。

回答1件
あなたの回答
tips
プレビュー