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!

phpmyadminとphpの保存について

phpmyadminとphpの保存について

phpmyadminとphpの接続保存ができたが、お問い合わせフォームから送信してdbの中身を見てみると、保存内容が全てnullになってしまうのを解決したい。あと一度の送信につき1レコードが通常であれば、更新されるはずだが、膨大な量のレコードが更新されるのはなぜか。

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

1 何もない状態
https://gyazo.com/720cb4af4706f692c3cabe836c3461e4

2 フォームから送信した時の状態
https://gyazo.com/dea74b9420555e5a944adf7404a235d4

3 正常に保存できているかの確認
https://gyazo.com/da859b961f5659295e253abfaad81d92

4 データベース上の確認
https://gyazo.com/455ed18e378ecef2df4adfa77ef25000

該当するソースコード

contact.php
<!DOCTYPE html>
<html>
<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>
<body>

    <?php include 'layouts/header.php'; ?>
    <?php  session_start() ?>
    <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="" method="POST">
              <div class="form-contents">
                <div class="form-content">
                  <h3>氏名<span>*</span></h3>
                  <input type="text" name="name" 
                    value="<?php 
                      if(!empty($_SESSION["name"])){
                        echo $_SESSION["name"];
                      }
                      ?>" placeholder="山田太郎" class="inputName">
                </div>
                <div class="form-content">
                  <h3>フリガナ<span>*</span></h3>
                  <input type="text" name="kana" 
                    value="<?php 
                      if(!empty($_SESSION["kana"])){
                        echo $_SESSION["kana"];
                      }
                      ?>" placeholder="ヤマダタロウ" class="inputKana">
                </div>
                <div class="form-content">
                  <h3>電話番号</h3>
                  <input type="text" name="phone" 
                  value="<?php 
                   if(!empty($_SESSION["phone"])){
                    echo $_SESSION["phone"];
                  }
                  ?>" placeholder="09012345678" class="inputPhone">
                </div>
                <div class="form-content">
                  <h3>メールアドレス<span>*</span></h3>
                  <input type="text" name="address"
                    value="<?php 
                    if(!empty($_SESSION["address"])){
                      echo $_SESSION["address"];
                    }
                    ?>" placeholder="test@test.co.jp" class="inputAddress">
                </div>
              </div>
              <div class="back">  
                <h2>お問い合わせ内容をご記入ください<span>*</span></h2>
              </div>  
              <textarea name="question" class="inputQuestion"><?php 
                if(!empty($_SESSION["question"])){
                  echo $_SESSION["question"];
                }?></textarea><br>
              <input type="submit" value="送    信" class="form-submit" formaction="validate.php" >
            </form>
           
          </div>
        </div>
       
    </div>
    <?php include 'layouts/footer.php'; ?>
    <!-- <script type="text/javascript" src="index.js"></script>
     <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script> -->

</body>
</html>

該当するソースコード

confirm.php
<!DOCTYPE html>
<html>
<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>
<body>
<?php
  session_start();
  $referer = $_SERVER['HTTP_REFERER']; 
  $url = "contact.php"; 
  if(!strstr($referer,$url)){
    header("Location: contact.php");
    exit;
  }
  unset($_SESSION["texts"]);
    $_POST = &$_SESSION;
?>


    <?php include 'layouts/header.php'; ?>

    <div class="form-wrapper">
      <div class="form">
        <div class="form-title">
          <h1 style="text-align:center;">お問い合わせ</h1>
        </div>
      <div class="confirm-group">
        <form>
          <p class=confirm-text>
            下記の内容をご確認の上送信ボタンを押してください<br>
            内容を訂正する場合は戻るを押してください。
          </p>

          <div class="confirm-contents">
            <div class="confirm-content">
              <h1>氏名</h1>
              <h2><?php echo htmlspecialchars($_POST["name"], ENT_QUOTES, 'UTF-8'); ?></h2>
            </div>
            <div class="confirm-content">
              <h1>フリガナ</h1>
              <h2><?php echo htmlspecialchars($_POST["kana"], ENT_QUOTES, 'UTF-8');  ?></h2>
            </div>
            <div class="confirm-content">
              <h1>電話番号</h1>
              <h2><?php echo htmlspecialchars($_POST["phone"], ENT_QUOTES, 'UTF-8'); ?></h2>
            </div>
            <div class="confirm-content">
              <h1>メールアドレス</h1>
              <h2><?php echo htmlspecialchars($_POST["address"], ENT_QUOTES, 'UTF-8'); ?></h2>
            </div>
            <div class="confirm-content">
              <h1>お問い合わせ内容</h1>
              <h2><?php echo nl2br(htmlspecialchars($_POST["question"], ENT_QUOTES, 'UTF-8')); ?></h2>
            </div>
          </div>
          <div class="buttons">
            <input type="submit" value="送   信" class="confirm-submit" formaction="complete.php">
            <input type="submit" value="戻   る" class="confirm-return" formaction="contact.php">
          </div>
        </form>
      </div>
    </div>
  </div>
    <?php include 'layouts/footer.php'; ?>
 <script type="text/javascript" src="index.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
</body>
</html>

該当するソースコード

complete.php
<!DOCTYPE html>
<html>
<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>
<body>
<?php
  session_start();
  $referer = $_SERVER['HTTP_REFERER']; 
  $url = "contact.php"; 
  if(!strstr($referer,$url)){
    header("Location: contact.php");
    exit;
  }
  unset($_SESSION["texts"]);
    $_POST = &$_SESSION;
?>


    <?php include 'layouts/header.php'; ?>

    <div class="form-wrapper">
      <div class="form">
        <div class="form-title">
          <h1 style="text-align:center;">お問い合わせ</h1>
        </div>
      <div class="confirm-group">
        <form>
          <p class=confirm-text>
            下記の内容をご確認の上送信ボタンを押してください<br>
            内容を訂正する場合は戻るを押してください。
          </p>

          <div class="confirm-contents">
            <div class="confirm-content">
              <h1>氏名</h1>
              <h2><?php echo htmlspecialchars($_POST["name"], ENT_QUOTES, 'UTF-8'); ?></h2>
            </div>
            <div class="confirm-content">
              <h1>フリガナ</h1>
              <h2><?php echo htmlspecialchars($_POST["kana"], ENT_QUOTES, 'UTF-8');  ?></h2>
            </div>
            <div class="confirm-content">
              <h1>電話番号</h1>
              <h2><?php echo htmlspecialchars($_POST["phone"], ENT_QUOTES, 'UTF-8'); ?></h2>
            </div>
            <div class="confirm-content">
              <h1>メールアドレス</h1>
              <h2><?php echo htmlspecialchars($_POST["address"], ENT_QUOTES, 'UTF-8'); ?></h2>
            </div>
            <div class="confirm-content">
              <h1>お問い合わせ内容</h1>
              <h2><?php echo nl2br(htmlspecialchars($_POST["question"], ENT_QUOTES, 'UTF-8')); ?></h2>
            </div>
          </div>
          <div class="buttons">
            <input type="submit" value="送   信" class="confirm-submit" formaction="complete.php">
            <input type="submit" value="戻   る" class="confirm-return" formaction="contact.php">
          </div>
        </form>
      </div>
    </div>
  </div>
    <?php include 'layouts/footer.php'; ?>
 <script type="text/javascript" src="index.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
</body>
</html>

該当するソースコード

db_connection.php
<?php
 $name = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_SPECIAL_CHARS);
 $name = filter_input(INPUT_POST, 'kana', FILTER_SANITIZE_SPECIAL_CHARS);
 $name = filter_input(INPUT_POST, 'phone', FILTER_SANITIZE_SPECIAL_CHARS);
 $name = filter_input(INPUT_POST, 'address', FILTER_SANITIZE_SPECIAL_CHARS);
 $name = filter_input(INPUT_POST, 'question', FILTER_SANITIZE_SPECIAL_CHARS);
 $db = new mysqli('localhost:8889', 'php_user', 'ykb02566', 'cafe');
 $stmt = $db->prepare('insert into contacts(name,kana,phone,address,question) values(?,?,?,?,?)');
if (!$stmt):
  die($db->error);
endif;
$stmt ->bind_param('ssiss', $name, $kana, $phone, $address, $question);
$ret = $stmt->execute();
  if ($ret):
    echo 'データを挿入しました';
  else:
    echo $db->error;
    endif;
//  if($records){
//   while($record =$records->fetch_assoc()){
//     echo $record['name'].'<br>';
//   }
//  }
//  var_dump( $records);
?>

自分で試したこと

まず、phpmyadmin上に直接クエリでやれば、保存はできていることを確認
フォームからの送信のみ、nullになるのはどうしてか。
以下調べてみたが、ヒントになりそうなものはなさそう。
https://excel-ubara.com/vba_sql/vba_SQL010.html
https://lukesilvia.hatenablog.com/entry/20100322/p1

あとフォームから一度だけ送信したのに、phpmyadmin上では、何個か更新されているのはなぜか。どなたか教授願います。

0

2Answer

どちらの質問もdb_connection.phpがどのように呼び出されているのか分からないので、なんとも言えないところです。

フォームからの送信のみ、nullになるのはどうしてか。

値は正しく送信されていますか?
変数に値が入っていますか?
まずはそれらを確認しましょう。
少なくとも、コードを見る限りは$nameにしか値がセットされないようです。

 $name = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_SPECIAL_CHARS);
 $name = filter_input(INPUT_POST, 'kana', FILTER_SANITIZE_SPECIAL_CHARS);
 $name = filter_input(INPUT_POST, 'phone', FILTER_SANITIZE_SPECIAL_CHARS);
 $name = filter_input(INPUT_POST, 'address', FILTER_SANITIZE_SPECIAL_CHARS);
 $name = filter_input(INPUT_POST, 'question', FILTER_SANITIZE_SPECIAL_CHARS);

あとフォームから一度だけ送信したのに、phpmyadmin上では、何個か更新されているのはなぜか。

よくあるのは次の事例です。

  • 送信ボタンを複数回押す
  • 登録しているページで画面リロード

これらの操作をすることで登録処理が何度も実行されている可能性は考えられます。

0Like

Comments

  1. @yopisan

    Questioner

    ありがとうございます。
    db_connection.phpのの呼び出しができていないとはどういうことでしょうか。
    ただ言えることは
    3 正常に保存できているかの確認(db_connectio.php)の呼び出し部分ですが、これでいけていますでしょうか。
    https://gyazo.com/da859b961f5659295e253abfaad81d92

  2. 「どのように呼び出されているのか分からない」です。

    例えばrequireやincludeメソッドで読み込んだり、リクエストが発生しているような箇所が見られません。
    formタグにaction属性も指定されていませんし、リダイレクト先もcontact.phpだけのようです。
    javascriptで何かやっているのかもしれませんが、コードがないので分かりません。

    このように示されているコードからdb_connection.phpにつながるものが無いので、どのようにしてスクリーンショットの状態になっているのか分かりません。

    なので先の回答については、その部分を想像した推測でしかありません。

中途半端にコードを出すより、すべてのコードを提示したほうが良いと思いますよ。
※+DB定義もあったほうが良いかと思います

「自分で試したこと」を確認する限り、PHPやJS側は何も確認していように思います。
PHPやJSのデバッグの仕方から勉強したほうが良いかと思います。
(このままだと物が出来てもご自身が何も分からない状態が変わらないです)

せめて「echo」や「var_dump」等でPOST値が正しく渡されている事を確認はしたほうが良いです。
また、エラーが発生しているなら「エラーコード」や「エラーメッセージ」も提示したほうが良いですよ。
(エラーコードを提示できるなら最低限の調査は自分でも可能だとは思います)

0Like

Comments

  1. @yopisan

    Questioner

    ご指導ありがとうございます。
    確かに自分でも、デバッグの方法など外部検索し調べたり、youtubeで調べたりしていますが、結局のところあまり理解できていないです。
    もう一度、しっかりと調べなおして意味を理解するところから始めてみます

Your answer might help someone💌