PDO::ERRMODE_EXCEPTION, PDO::MYSQL_ATTR_MULTI_STATEMENTS => false ); $pdo = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST , DB_USER, DB_PASS, $options); } catch(PDOException $e) { // 接続エラーのときエラー内容を取得する $error_message[] = 'データベース接続エラー: ' . $e->getMessage(); } if( !empty($_POST['btn_submit']) ) { $options = array( // SQL実行失敗時に例外をスルー PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // デフォルトフェッチモードを連想配列形式に設定 PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, // バッファードクエリを使う(一度に結果セットを全て取得し、サーバー負荷を軽減) // SELECTで得た結果に対してもrowCountメソッドを使えるようにする PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true, ); $dbh = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST , DB_USER, DB_PASS, $options); require_once '../authcode/GoogleAuthenticator.php'; $result = $dbh->prepare("SELECT authcode,loginid,username FROM account WHERE userid = :userid"); $result->bindValue(':userid', $userid); // SQL実行 $result->execute(); if($result->rowCount() > 0) { $row = $result->fetch(); $tousercode = $row["authcode"]; $chkauthcode = new PHPGangsta_GoogleAuthenticator(); $userauthcode = $_POST['usercode']; $password = $_POST['password']; if(empty($userauthcode)){ $error_message[] = "コードを入力してください。(AUTHCODE_INPUT_PLEASE)"; }else{ $discrepancy = 2; $checkResult = $chkauthcode->verifyCode($tousercode, $userauthcode, $discrepancy); if ($checkResult) { // パスワードの入力チェック if( empty($password) ) { $error_message[] = 'パスワードを入力してください。(PASSWORD_INPUT_PLEASE)'; } else { if(in_array($password, $badpass) === true ){ $error_message[] = "パスワードが弱いです。セキュリティ上変更してください。(PASSWORD_ZEIJAKU)"; } if( 4 > mb_strlen($password, 'UTF-8') ) { $error_message[] = 'パスワードは4文字以上である必要があります。(PASSWORD_TODOITENAI_MIN_COUNT)'; } // 文字数を確認 if( 100 < mb_strlen($password, 'UTF-8') ) { $error_message[] = 'パスワードは100文字以内で入力してください。(PASSWORD_OVER_MAX_COUNT)'; } } if( empty($error_message) ) { // トランザクション開始 $pdo->beginTransaction(); $hashpassword = password_hash($password, PASSWORD_DEFAULT); try { // SQL作成 $stmt = $pdo->prepare("UPDATE account SET password = :password WHERE userid = :userid;"); // 他の値をセット $stmt->bindParam(':password', $hashpassword, PDO::PARAM_STR); // 条件を指定 // 以下の部分を適切な条件に置き換えてください $stmt->bindValue(':userid', $userid, PDO::PARAM_STR); // SQLクエリの実行 $res = $stmt->execute(); // コミット $res = $pdo->commit(); } catch (Exception $e) { // エラーが発生した時はロールバック $pdo->rollBack(); } if ($res) { $msg = "お使いのアカウントのパスワードがパスワードの復元により変更されました。\n変更した覚えがない場合はパスワードを変更し、セッショントークンを再生成してください。"; send_notification($userid,"uwuzu-fromsys","🔴アカウントのパスワードが復元により変更されました。🔴",$msg,"/others"); $_SESSION['userid'] = ""; $url = 'donerecovery.php'; header('Location: ' . $url, true, 303); // すべての出力を終了 exit; } else { $error_message[] = 'パスワードの更新に失敗しました。(REGISTERED_DAME)'; } } }else { $error_message[] = '二段階認証が出来ませんでした。再度お試しください。(AUTHCODE_CHECK_DAME)'; } // プリペアドステートメントを削除 $stmt = null; } } } // データベースの接続を閉じる $pdo = null; ?>