yopisan
@yopisan (kota)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

編集機能にバリデーションを効かせたい

  1. やりたいことや目的、概要
    編集機能にバリデーションを効かせたいため取り組んでおります。

  2. 何についての悩みや起きている問題か
    編集機能(edit.php)→バリデーション(エラーがなければupdate.phpもしくは必須入力などができなければそのままedit.phpでエラー表示を出す)ことを設定したはずが、なぜかエラーがあろうとなかろうとページ遷移先が見つからないとなってしまう。
    https://gyazo.com/88122a56ff9aede402726a80fd5c8bad

  3. 試したこと、または試そうと考えていること
    ここには載せていないが
    お問い合わせフォームではうまくいっている
    (contact.php)→(validate.php)→エラーが出なければconfirm.phpもしくは必須入力できていなければcontact.phpこの違いがわからないためご教授願います。

参考資料
https://techacademy.jp/magazine/49322

  1. 該当箇所

4. 該当箇所

edit.php

<!DOCTYPE html>
<html lang="ja">

<?php
session_cache_limiter('none');
//セッション接続
session_start();

$err['name'] = '';
$err['kana'] = '';
$err['phone'] = '';
$err['address'] = '';
$err['question'] = '';

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  $result = filter_input_array(INPUT_POST, FILTER_SANITIZE_FULL_SPECIAL_CHARS);

  if ($result['name'] === '') {
    $err['name'] = 'err';
  } elseif (10 < mb_strlen($result['name'], 'UTF-8')) {
    $err['name'] = 'err';
  }
  if ($result['kana'] === '') {
    $err['kana'] = 'err';
  } elseif (10 < mb_strlen($result['kana'], 'UTF-8')) {
    $err['kana'] = 'err';
  }
  if ($result['phone'] === '') {
    true;
  } elseif (!preg_match('/^[0-9]+$/', $result['phone'])) {
    $err['phone'] = 'err';
  }
  if ($result['address'] === '') {
    $err['address'] = '';
  } elseif (!preg_match('/^[0-9a-z_.\/?-]+@([0-9a-z-]+\.)+[0-9a-z-]+$/', $result['address'])) {
    $err['address'] = 'err';
  }
  if ($result['question'] === '') {
    $err['question'] = 'err';
  }

  if (empty($err['name']) && empty($err['kana']) && empty($err['phone']) && empty($err['address']) && empty($err['question'])) {
    $_SESSION['form'] = $result;
    header("Location: db_open.php");
    exit;
  }
}

session_destroy();

//DB接続
include "db_open.php";

$dbh = db_open();
try{
  $stmt = $dbh->prepare('SELECT * FROM cafe.contacts WHERE id=:id');
  $id = $_GET['id'];
  $stmt->bindValue(':id', (int)$id, PDO::PARAM_INT);
  
  $stmt->execute();
}catch(PDOException $e){
  echo $e->getMessage();
        die();
}
//データ取得&表示
$result = $stmt->fetch(PDO::FETCH_ASSOC);
$name = $result['name'];
$kana = $result['kana'];
$phone = $result['phone'];
$address = $result['address'];
$question = $result['question'];
$_SESSION = $result['id'];
?>

<!DOCTYPE html>
<html lang="ja" dir="ltr">

<head>
<head>
<meta charset="UTF-8">
  <title></title>
  <link rel="stylesheet" type="text/css" href="base.css">
  <meta name="viewport" content="width=device-width,initial-scale=1">
  <link href="https://use.fontawesome.com/releases/v5.6.1/css/all.css" rel="stylesheet">
  <script type="text/javascript" src="index.js"></script>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
</head>
</head>

<body>

  <!--header-->
  <!-- <script src="index.js"></script> -->
  <?php include "layouts/header.php"; ?>
  <?php  session_start() ?>
  <!--header-->
  <div class="form-wrapper">
      <div class="error">
        <h1>
          <?php 
            if(isset($_SESSION["texts"])){
            foreach($_SESSION["texts"] as $error){
              echo $error."<br>";
              }
            }?>
        </h1>
      </div>
  <div class="form">
        <div class="form-title">
          <h1 style="text-align:center;">お問い合わせ編集 </h1>
        </div>
        <div class="form-main">
          <div class="back">  
            <h2>下記の編集項目をご記入の上送信ボタンを押してください</h2>
          </div>  
            <p>送信頂いた件につきましては、当社より折り返しご連絡を差し上げます。<br>
               なお、ご連絡までに、お時間を頂く場合もございますので予めご了承ください。<br>
            <span>*</span>は必須項目となります。</p>

         
         <form action="update.php" method="POST"> 
           <input type="hidden"  name="id" value="<?php echo $result['id']; ?>">
              <div class="form-contents">
                <div class="form-content">
                  <h3>氏名<span>*</span></h3>
                  <input type="text" name="name"  value="<?php echo $result['name']; ?>">
            <?php if ($err['name'] === 'err') : ?>
              <p class="error">
                <font color=red>氏名は、必須入力です。10文字以内でご入力ください</font>
              </p>
            <?php endif; ?>
            </div>

          <div class="form-content">
                  <h3>フリガナ<span>*</span></h3>
                  <input type="text" name="kana" value="<?php echo $result['kana']; ?>">
            <?php if ($err['kana'] === 'err') : ?>
              <p class="error">
                <font color="red">フリガナは、必須入力です。10文字以内でご入力ください。</font>
              </p>
            <?php endif; ?>
          </div>

          <div class="form-content">
                  <h3>電話番号</h3>
                  <input type="text" name="phone"  value="<?php echo $result['phone']; ?>">
            <?php if ($err['phone'] === 'num') : ?>
              <p class="error">
                <font color="red">電話番号は0-9の数字でのご入力ください。</font>
              </p>
            <?php endif; ?>
          </div>

          <div class="form-content">
              <h3>メールアドレス<span>*</span></h3>
                  <input type="text" name="address" value="<?php echo $result['address']; ?>">
            <?php if ($err['address'] === 'err' || $err['address'] === 'address') : ?>
              <p class="error">
                <font color="red">メールアドレスは、正しくご入力ください。</font>
              </p>
            <?php endif; ?>
          </div>
        </div>
              <div class="back">  
                <h2>お問い合わせ内容をご記入ください<span>*</span></h2>
              </div>  
              <textarea name="question" class="inputQuestion"><?php echo $result['question']; ?></textarea>
            <?php if ($err['question'] === 'err') : ?>
              <p class="error">
                <font color="red">お問い合わせ内容は、必須入力です。</font>
              </p>
            <?php endif; ?>
        
        <input type="submit" value="送    信" class="form-submit" formaction="edit_validate.php" >

        </div>
      </form>
   </div>
  </div>

  <!--footer-->
  <?php include "layouts/footer.php"; ?>
  <!--footer-->

</body>

</html>

edit_validate.php

<?php
session_start();
foreach($_POST as $key => $val){
    $_SESSION[$key] = $val;   
}

    $error = 0;
    $errorText = [];

    if(empty($_SESSION["name"])) {
        array_push($errorText,"名前を入力してください。");
        $error++;
    };


    if(mb_strlen($_SESSION["name"]) >10) {
        array_push($errorText,"名前は10文字以内で入力してください。");
        $error++;
    };

    if(empty($_SESSION["kana"])) {
        array_push($errorText,"フリガナを入力してください。");
        $error++;
    };
    
    if(mb_strlen($_SESSION["kana"]) > 10) {
        array_push($errorText,"フリガナは10文字以内で入力してください。");
        $error++;
    };
    
    if(is_numeric($_SESSION["phone"]) == false && $_SESSION["phone"] !="") {
        array_push($errorText,"電話番号は0~9の数字で入力してください。");
        $error++;
    };

    if(empty($_SESSION["address"])) {
        array_push($errorText,"メールアドレスを入力してください。");
        $error++;
    };
    
    if(!empty($_SESSION["address"]) && !preg_match("/.@./",$_SESSION["address"])) {
        array_push($errorText,"正しいメールアドレスを入力してください。");
        $error++;
    };

    if(empty($_SESSION["question"])) {
        array_push($errorText,"お問い合わせ内容を入力してください。");
        $error++;
    };

    if($error == 0 ){
        header("Location:update.php");
    } else {
        unset($_SESSION["texts"]);
        foreach($errorText as $text){
            $_SESSION["texts"][] = $text;
        }
        header("Location:edit.php");
    }
?>

update.php

<?php
//セッション接続
session_start();

// $post = $_SESSION;
//  var_dump ($_POST);
// $id = $post[':id'];
// $name = $post[':name'];
// $kana = $post[':kana'];
// $phone = $post[':phone'];
// $address = $post[':address'];
// $question = $post[':question'];
$post = $_POST;
//  var_dump($post);
 $id = $post['id'];
//  $id = 157;
$name = $post['name'];
$kana = $post['kana'];
$phone = $post['phone'];
$address = $post['address'];
$question = $post['question'];
//URLからの接続禁止
$referer = $_SERVER['HTTP_REFERER'];
$url = "edit.php";
if (!strstr($referer, $url)) {
  header("Location: contact.php");
  exit;
}

session_destroy();
//DB接続
include "db_open.php";
$dbh = db_open();
//更新


try {
  $sql = "UPDATE contacts
       SET name=:name,kana=:kana,phone=:phone,address=:address,question=:question
      -- SET name='坂本',kana='サカモト',phone='098932535',address='sakamoto@sakamorto',question='コンニチは';
       Where id=:id";
  $stmt = $dbh->prepare($sql);
  $stmt->bindValue(":name", $name, PDO::PARAM_STR);
   $stmt->bindValue(":kana", $kana, PDO::PARAM_STR);
   $stmt->bindValue(":phone", $phone, PDO::PARAM_STR);
   $stmt->bindValue(":address", $address, PDO::PARAM_STR);
   $stmt->bindValue(":question", $question, PDO::PARAM_STR);
   $stmt->bindValue(":id", $id, PDO::PARAM_INT);
   $stmt->execute();
 

  echo "編集が完了しました。" . "<br/>";
  echo "<a href='contact.php'>一覧に戻る</a>";
} catch (Exception $e) {
  echo "エラーが発生しました:" . ($e->getMessage()) . "<br>";
  exit;
}

?>

<!DOCTYPE html>
<html lang="ja" dir="ltr">

<head>
  <meta charset="utf-8">
  <title>Lesson Sample Site</title>
</head>

<body>
</body>

</html>

0

No Answers yet.

Your answer might help someone💌