IDを忘れた人にキーワードを尋ねて、IDを再発行する

全体像

HTMLフォーム
<form action="" method="post" class="login_input">
                    
<input type="text" name="furigana_sei" placeholder="姓(ふりがな)">
<input type="text" name="furigana_mei" placeholder="名(ふりがな)">
<input type="text" name="age" placeholder="年齢">

<select name="gender">
<option value="">性別</option>
<option value="0">男性</option>
<option value="1">女性</option>
<option value="2">その他</option>
</select>

<input type="submit" name="submit" value="次へ" class="center">
<a href="login_err.php">戻る</a>

</form>

re_login.php

$errors = [];

if(isset($_POST['submit'])){

    $furigana_sei = trim($_POST['furigana_sei']);
    $furigana_mei = trim($_POST['furigana_mei']);
    $age = (int)$_POST['age'];
    $gender = (int)$_POST['gender'];

    //バリデーション
    if($furigana_sei == "" || $furigana_mei == "" || $age<=0 || ($gender !=0 && $gender != 1 && $gender != 2)){
        $errors[] = "入力値が不正です。";
    }else{

    try{
    $sql = "SELECT email FROM users WHERE furigana_sei = ? AND furigana_mei = ? AND age = ? AND gender = ? ";
    $stmt = $dbh->prepare($sql);
    $stmt->execute([$furigana_sei,$furigana_mei,$age,$gender]);
    $users = $stmt->fetchAll();

        
    if(count($users) == 1){
    $mail = $users[0]['email'];
    $maskedEmail = substr($mail,0,3)."****".substr($mail,-3);
    $_SESSION['maskedEmail'] = $maskedEmail;

    $subject = "登録メールアドレスの送付";
    $message = "あなたの登録されているメールアドレスは".$mail."です。";

    if(sendmail($mail,$subject,$message)){

    header("Location:id_complete.php");
    exit;
    
    }else{
    $errors[] = "メールの送信に失敗しました。もう一度試してください。";
    }
    exit;
    }elseif(count($users)>1){
    $errors[] = "複数のアカウントが該当しました。情報をもう一度確認して、必要であればサポートにお問い合わせください。";

    }else{
    $errors[] = "該当するユーザーは存在しません。";
    }
    }catch(PDOException $e){
        error_log($e->getMessage());
        $errors[] = "データベースのエラーが発生しました。もう一度お試しいただくか、管理者にお問い合わせください。";
    }
}
    foreach($errors as $error){
        echo $error."<br/>";
    }
}

説明

HTMLフォーム

<form action="" method="post" class="login_input">
                    
<input type="text" name="furigana_sei" placeholder="姓(ふりがな)">
<input type="text" name="furigana_mei" placeholder="名(ふりがな)">
<input type="text" name="age" placeholder="年齢">

<select name="gender">
<option value="">性別</option>
<option value="0">男性</option>
<option value="1">女性</option>
<option value="2">その他</option>
</select>

<input type="submit" name="submit" value="次へ" class="center">
<a href="login_err.php">戻る</a>

</form>

姓名と年齢、性別を入力してポストする

サーバーサイド側

//送信ボタンを押す
if(isset($_POST['submit'])){

   //POSTされた必要項目を受け取る
    $furigana_sei = trim($_POST['furigana_sei']);
    $furigana_mei = trim($_POST['furigana_mei']);
    $age = (int)$_POST['age'];
    $gender = (int)$_POST['gender'];

    //バリデーション
  //必要項目が条件に合っているか確認
    if($furigana_sei == "" || $furigana_mei == "" || $age<=0 || ($gender !=0 && $gender != 1 && $gender != 2)){
        $errors[] = "入力値が不正です。";
    }else{

必要項目がポストされて、それが空だったり、条件で問題がなければ、次へ進める。

 try{

   //必要項目から絞ってメールアドレスを取得する
    $sql = "SELECT email FROM users WHERE furigana_sei = ? AND furigana_mei = ? AND age = ? AND gender = ? ";
    $stmt = $dbh->prepare($sql);
    $stmt->execute([$furigana_sei,$furigana_mei,$age,$gender]);
    $users = $stmt->fetchAll();

    //メールアドレスの存在を確認して、値を変数に入れる。
    if(count($users) == 1){
    $mail = $users[0]['email'];
   
   //メールアドレスの一部を隠して画面表示させる
    $maskedEmail = substr($mail,0,3)."****".substr($mail,-3);

   //再発行完了画面のサーバーサイドid_complete.phpに渡す
    $_SESSION['maskedEmail'] = $maskedEmail;

    $subject = "登録メールアドレスの送付";
    $message = "あなたの登録されているメールアドレスは".$mail."です。";
  
   //メールを送信する
    if(sendmail($mail,$subject,$message)){

    header("Location:id_complete.php");
    exit;
    
    }else{
    $errors[] = "メールの送信に失敗しました。もう一度試してください。";
    }
    exit;
    }elseif(count($users)>1){
    $errors[] = "複数のアカウントが該当しました。情報をもう一度確認して、必要であればサポートにお問い合わせください。";

    }else{
    $errors[] = "該当するユーザーは存在しません。";
    }
    }catch(PDOException $e){
        error_log($e->getMessage());
        $errors[] = "データベースのエラーが発生しました。もう一度お試しいただくか、管理者にお問い合わせください。";
    }
}
    foreach($errors as $error){
        echo $error."<br/>";
    }
}

データベースのusersテーブルから入力した必要項目で対象を絞ってメールアドレスを取得して、

メールアドレスが存在すれば、そのメールアドレスの値を変数に渡し、メール送信を行う。