souwasora
@souwasora (takei souwa)

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!

php フォーム作成してデータベースに登録する方法

解決したいこと

例)
現在、phpでお問い合わせフォームを作成して、入力画面、確認画面、完了画面の3つがあります。
入力画面で作成した、名前、ふりがな、電話番号、メールアドレス、問い合わせ内容をデータベースに登録して、入力画面下に表示をさせたい。
しかし、フォームに打ち込んだ内容をデータベースに登録する方法が調べても分かりません。
解決方法を教えて下さい。
下記画像のように表示させたい。
image.png
データベースに手打ちで入力したものは表示させる事はできました。
image.png
resultに代入させて表示させてます
image.png

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

なし

または、問題・エラーが起きている画像をここにドラッグアンドドロップ

該当するソースコード

<?php
// require_once('../Models/Db.php');
//  $name       = $_POST["name"];
// $kana       = $_POST["kana"];
// $tel        = $_POST["tel"];
// $email      = $_POST["email"];

$dsn = 'mysql:host=localhost;dbname=casteria;charset=utf8';
$user = 'root';
$password = '';

try {
  $dbh = new PDO($dsn, $user, $password);
  // 今あるデータを持ってきてる データは手打ち
   $sql = 'SELECT * FROM contacts';
  // ↓このコードで作成するものだと思ってる
  // $sql = "INSERT INTO contacts(name, kana, tel, email) VALUES('{$name}', '{$kana}', '{$tel}', '{$email}',)";
  // ②SQLの実行
  $stmt = $dbh->query($sql);
  // $stmt = $dbh->prepare($sql);
  // ↓このコードで作成するものだと思ってる
  // エラー Warning: PDOStatement::execute() expects parameter 1 to be array, string given
  // $stmt ->bindValue(':name',[$name], PDO::PARAM_STR);
  // $stmt ->bindValue(':kana',[$kana], PDO::PARAM_STR);
  // $stmt ->bindValue(':tel',[$tel], PDO::PARAM_STR);
  // $stmt ->bindValue(':email',[$email], PDO::PARAM_STR);
  // ③SQLの結果を受け取る
  // $stmt->execute($sql);
  $result = $stmt->fetchAll(PDO::FETCH_ASSOC);

  // var_dump($result);
} catch (PDOException $e) {
  echo "接続失敗: " . $e->getMessage() . "\n";
  exit();
}

  $error_message = array();
  if( isset($_POST["btn"] ) && $_POST["btn"] ){
    //エラー項目の確認
    //ニックネームが空の場合
    if( !$_POST['name'] ) {
	    $error_message[] = "名前を入力してください";
    } else if( mb_strlen($_POST['name']) > 100 ){
	    $error_message[] = "名前は10文字以内にしてください";
    }

    if(!$_POST['kana']) {
      $error_message[] = "フリガナを入力してください";
    } else if( mb_strlen($_POST['kana']) > 100 ) {
      $error_message[] = "カナは10文字以内にしてください";
    }
    if(! preg_match("/^[0-9]+$/", $tel)){
      $error_message[] = "数字を見直してください";
    }
    if(!$_POST['email']) {
      $error_message[] = "メールアドレスを入力してください";
    } else if(! filter_var($_POST['email'],FILTER_VALIDATE_EMAIL)) {
      $error_message[] = "正しく入力してください";
    }
    if(!$_POST['content']) {
      $error_message[] = "問い合わせ内容を記述してください";
    }
  }
  if (!empty($_POST['name']) && ($_POST['kana']) && ($_POST['email']) && ($_POST['content'])){
    header("Location: confirm.php", true, 307);
  }
?>

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>お問い合わせ</title>
  <link rel="stylesheet" href="../public/css/contact.css">
  <link rel="stylesheet" href="../public/css/css/bootstrap.min.css">
  <script type="text/javascript" src="contact.js"></script>
</head>
<body>
<div class="container">
  <h1 class="company">Company Name</h1>
  <div class="row">
    <div><h2>お問い合わせ</h2></div>
  </div>
  <?php
    if( $error_message ){
      echo '<div style="color:red;">';
      echo implode('<br>', $error_message );
      echo '</div>';
    }
  ?>
  <div class="row mt-5">
  <form action="contact.php" method="POST" name="form" onsubmit="return validate()" >
    <h1 class="contact-title">お問い合わせ 内容入力</h1>
    <p>お問い合わせ内容ご入力の上,「確認画面へ」ボタンをクリックしてください。</p>
  </div>
  <div class="col-10">
    <div class="form-row">
      <div class="form-group col-md-7">
        <label>名前<span class="btn btn-danger btn-sm">必須</span></label>
        <input type="text" name="name"  class = "form-control" placeholder="例) 水瀬いのり" value="">
      </div>
      <div class="form-group col-md-7">
        <label>フリガナ<span class="btn btn-danger btn-sm">必須</span></label>
        <input type="text" name="kana"  class = "form-control" placeholder="例) ミナセイノリ" value="">
      </div>
      <div class="form-group col-md-7">
        <label>電話番号<span class="btn btn-danger btn-sm">必須</span></label>
        <input type="text" name="tel"  class = "form-control" placeholder="例) 00000000000" value="">
      </div>
      <div class="form-group col-md-7">
        <label>メールアドレス<span class="btn btn-danger btn-sm">必須</span></label>
        <input type="text" name="email"  class = "form-control" placeholder="例) sample@sample.com" value="">
      </div>
      <div class="form-group col-7">
        <label>お問い合わせ<span class="btn btn-danger btn-sm">必須</span></label>
        <textarea name="content"  class = "form-control" placeholder="お問合せ内容を入力"></textarea>
      </div>
    </div>
    <!-- <button type="submit" name= "btn" class="btn btn-success">確認画面へ</button> -->
    <input type="submit" name="btn" class="btn btn-success"value="確認画面へ">
  </form>
  <div>
  <table class="table table-bordered">
    <tr>
      <th>id</th>
      <th>名前</th>
      <th>ふりがな</th>
      <th>電話番号</th>
      <th>メールアドレス</th>
      <th>お問い合わせ内容</th>
    </tr>
    <?php foreach($result as $column) : ?>
    <tr>
      <th><?php echo $column['id'] ?></th>
      <th><?php echo $column['name'] ?></th>
      <th><?php echo $column['kana'] ?></th>
      <th><?php echo $column['tel'] ?></th>
      <th><?php echo $column['email'] ?></th>
    </tr>
    <?php endforeach; ?>
  </table>
</div>
</body>
</html>

自分で試したこと

いろいろな記事みたり、動画見たりしました。
検索方法があってないのか、理解しなくてはいけない事を理解できてません。
解決策をお願いします。。。

0

1Answer

image.png

チラ見ですが、INSERT でデータ追加しようとしていて上手くいかなかったのであれば、それについての質問にしていけば、回答や自己解決の可能性が高まると思いますよ。

0Like

Your answer might help someone💌