takogaki
@takogaki

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

PHPのお問い合わせformに関する質問です

解決したいこと

phpでお問い合わせフォームをyoutubeなどの情報を元に見様見真似で作っております。

①お問い合わせ内容記入ページ('input')
②お問い合わせ内容確認ページ('confirm')
③送信完了ページ('send')

を、if文の条件分岐で作成しているのですが、エラーなく記入した場合でも、②の'confirm'に移動してくれません。

あともう一つなのですが、
画面の左上と左下に『1』の数字が表示され消えません。

問題がどこにあるのか教えて頂きたいです。
よろしくお願い致します。

発生している問題・エラー

ちゃんと記入して、本来②のページに行くはずが、①のページのループになってしまう。

1が消えない

該当するソースコード

<?php
session_start();
$mode = 'input';
$errname         = array();
$errname_kana    = array();
$errphone_number = array();
$erraddress      = array();
$errmsg          = array();

if ( isset($_POST['back']) && $_POST['back'] ){
  //何もしない
} else if ( isset($_POST['confirm']) && $_POST['confirm'] ){

  if (!($_POST['name'])) {
    $errname[] = "名前を入力してください";
  }else if (mb_strlen($_POST['name']) > 10) {
    $errname[] = "名前は10文字以内にしてください";
  }
  $_SESSION['name'] = htmlspecialchars($_POST['name'], flags: ENT_QUOTES);

  if (!($_POST['name_kana'])) {
    $errname_kana[] = "名前を入力してください";
  }else if (mb_strlen($_POST['name_kana']) > 10) {
    $errname_kana[] = "名前は10文字以内にしてください";
  }
  $_SESSION['name_kana'] = htmlspecialchars($_POST['name_kana'], flags: ENT_QUOTES);

  if (!(preg_match("/[0-9]{9,11}/", $_POST['phone_number']))) {
    $errphone_number[] = "電話番号を正しく入力してください";
  }
  $_SESSION['phone_number'] = htmlspecialchars($_POST['phone_number'], flags: ENT_QUOTES);

  if (!($_POST['address'])) {
    $erraddress[] = "メールアドレスを入力してください";
  }else if (!(filter_var($_POST['address'], filter: FILTER_VALIDATE_EMAIL))) {
    $erraddress[] = "メールアドレスが不正です";
  }
  $_SESSION['address'] = htmlspecialchars($_POST['address'], flags: ENT_QUOTES);

  if (!($_POST['msg'])) {
    $errmsg[] = "お問い合わせ内容を入力してください";
  }

  $_SESSION['msg'] = htmlspecialchars($_POST['msg'], flags: ENT_QUOTES);

  $errmessage = [$errname, $errname_kana, $errphone_number, $erraddress, $errmsg];

  if ( $errmessage ) {
    $mode = 'input';
  } else {
    $mode = 'confirm';
  }
} else if ( isset($_POST['send']) && $_POST['send'] ){
  $mode = 'send';
} else {
  $_SESSION['name']         = "";
  $_SESSION['name_kana']    = "";
  $_SESSION['phone_number'] = "";
  $_SESSION['address']      = "";
  $_SESSION['msg']          = "";
}
?>

<!DOCTYPE html>
<html lang="ja" dir="ltr">
<head>
  <meta charset="utf-8">
  <link rel="stylesheet" href="style.css">
  <title>Lesson Sample Site</title>
</head>
<body>
  <header class="header_blog">
    <?= require('header.php'); ?>
  </header>
  <main class="main_blog">
    <h3 class="main_blog_h"><?= 'お問い合わせ' ?></h3>

    <?php if ( $mode == 'input' ): ?>
     <div class="main_blog_command">
        <h4 class="blog_command"><?= '下記の項目をご記入の上送信ボタンを押してください' ?></h4>
      </div>
      <p class="command_p"><?= '送信頂いた件につきましては、当社より折り返しご連絡を差し上げます。<br>
      なお、ご連絡までに、お時間を頂く場合もございますので予めご了承ください。<br>' ?>
      <span>*</span><?= 'は必須項目となります。' ?></p>

      <form class="contact_name" action="./blog.php" method="post">
        <h4 class="contact"><?= '氏名' ?><span>*</span><br></h4>
        <?php
        if ( $errname ) {
            echo '<div style = "color: red; line-height: 18px;">';
            echo implode( $errname );
            echo '</div>';
        }
        ?>
        <input class="contactform" type="text" name="name" value="<?php echo $_SESSION['name'] ?>" placeholder="両津勘吉"><br>

        <h4 class="contact"><?= 'フリガナ' ?><span>*</span><br></h4>
        <?php
        if ( $errname_kana ) {
            echo '<div style = "color: red;">';
            echo implode( $errname_kana );
            echo '</div>';
        }
        ?>
        <input class="contactform" type="text" name="name_kana" value="<?php echo $_SESSION['name_kana'] ?>" placeholder="リョウツカンキチ"><br>

        <h4 class="contact"><?= '電話番号' ?><br></h4>
        <?php
        if ( $errphone_number ) {
            echo '<div style = "color: red;">';
            echo implode( $errphone_number );
            echo '</div>';
        }
        ?>
        <input class="contactform" type="tel" name="phone_number" value="<?php echo $_SESSION['phone_number'] ?>" placeholder="09012345678"><br>
        <h4 class="contact"><?= 'メールアドレス' ?><span>*</span><br></h4>
        <?php
        if ( $erraddress ) {
            echo '<div style = "color: red;">';
            echo implode( $erraddress );
            echo '</div>';
        }
        ?>
        <input class="contactform" type="email" name="address" value="<?php echo $_SESSION['address'] ?>" placeholder="test@test.co.jp"><br>
        <div class="main_blog_command">
          <h4 class="blog_command"><?= 'お問い合わせ内容をご記入ください' ?><span>*</span><br></h4>
        </div>
        <?php
        if ( $errmsg ) {
            echo '<div style = "color: red;">';
            echo implode( $errmsg );
            echo '</div>';
        }
        ?>
        <textarea class="contactform_textarea" type="text" name="msg"><?php echo $_SESSION['msg'] ?></textarea><br>
        <div class="send">
        <input class="send_name" type="submit" name="confirm" value="送   信">
      </div>
      </form>

    <?php elseif ($mode == 'confirm'): ?>
      <p class="please"><?php echo '下記の内容をご確認の上送信ボタンを押してください<br>
      内容を訂正する場合は戻るを押してください。' ?></p>
      <form class="" action="./blog.php" method="post">
      <h4 class="confirm_question"><?php echo '氏名' ?></h4>
      <p class="confirm_answer"><?php echo $_SESSION['name'] ?></p>
      <h4 class="confirm_question"><?php echo 'カタカナ' ?></h4>
      <p class="confirm_answer"><?php echo $_SESSION['name_kana'] ?></p>
      <h4 class="confirm_question"><?php echo '電話番号' ?></h4>
      <p class="confirm_answer"><?php echo $_SESSION['phone_number'] ?></p>
      <h4 class="confirm_question"><?php echo 'メールアドレス' ?></h4>
      <p class="confirm_answer"><?php echo $_SESSION['address'] ?></p>
      <h4 class="confirm_question"><?php echo 'お問い合わせ内容' ?></h4>
      <p class="confirm_answer_over"><?php echo nl2br($_SESSION['msg']) ?></p>
      <div class="submits">
        <form class="confirm_form" action="./blog.php" method="post">
          <input class="confirm_submit_a" type="submit" name="send" value="送信">
          </form>
        </form>
        <form class="confirm_form" action="./blog.php" method="post">
          <input class="confirm_submit_b" type="submit" name="back" value="戻る">
        </form>
        </form>
      <?php else: ?>
        <p class="comp_msg"><?php echo 'お問い合わせ頂きありがとうございます。<br>
                                        送信頂いた件につきましては、当社より折り返しご連絡を差し上げます。<br>
                                        なお、ご連絡までに、お時間を頂く場合もございますので予めご了承ください。' ?></p>
          <!-- <form class="comp_form" action="form.php" method="post"> -->
            <a class="last_question" href="./form.php"><?php echo 'トップへ戻る' ?></a>
          <!-- </form> -->
        </main>
  <?php endif; ?>
  </main>
  <footer class="footer_blog">
    <?= require('footer.php'); ?>
  </footer>
  <script type="text/javascript" src="validation.js"></script>
</body>
</html>

自分で試したこと

ここに問題・エラーに対して試したことを記載してください。

何度見返しても原因がわかりません。
是非、ご教授頂きたいです。
よろしくお願い致します。

0

1Answer

ちゃんと記入して、本来②のページに行くはずが、①のページのループになってしまう。

/*
入力チェックに成功、失敗しても$errmessageがtrueになるため
確認ページには遷移しません。
入力チェック成功で$errmessageに空配列が代入されるためarray_filterなどで空配列を排除すると良いと思います。
 
$errmessage = [$errname, $errname_kana, $errphone_number, $erraddress, $errmsg];
if ( $errmessage ) {
  $mode = 'input';
} else {
  $mode = 'confirm';
}
*/

$errmessage = [$errname, $errname_kana, $errphone_number, $erraddress, $errmsg];
$errcount   = count(array_filter($errmessage, function ($error) { return !empty($error); }));
if ( $errcount > 0 ) {
  $mode = 'input';
} else {
  $mode = 'confirm';
}

1が消えない

/*
<?= は <?php echo を短くしたものです。
requireの結果を出力しているため1が表示されます。

<?= require('header.php'); ?>
<?= require('footer.php'); ?>
*/

<?php require('header.php');  ?>
<?php require('footer.php');  ?>
0Like

Comments

  1. @takogaki

    Questioner

    教えていただいた通りにやらせていただきましたところ全てうまく行きました!

    本当にわかりやすく教えていただき有難う御座います!

    なるほど<?=は<?php echoを短くしたものだからechoも含まれているのですね!

    本当に勉強になりました!

Your answer might help someone💌