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の接続・保存がうまくいかない

お問い合わせフォームとphpmyadminの接続・保存

ここに解決したい内容を記載してください。

例)
phpでお問い合わせフォームからデータベースへの接続、保存について取り組んでいるのですが、フォームから入力ができて、データベース上に保存ができているか確認したところ保存ができていないことが確認できました。解決策がわからないため、どなたかご教授願います。

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

お問い合わせフォームでの入力
https://i.gyazo.com/d25f16d660b229bb91c2722760cd3a7a.gif

phpmyadminでの保存結果
https://gyazo.com/eb6ed7d91db9fd3d77fd8ed606d455aa

cafe/db_connection.phpでの出力結果
https://gyazo.com/62a64f7309006ae51180a5a3328d6a91

該当するソースコード

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

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

  <section>
    <div class="form" style= "margin-top:50px; margin-bottom:50px;">
      <div class="form-title">
        <h1 style="text-align:center;">お問い合わせ</h1>
      </div>
      <div class="complete-main">
          <p class=complete-text>
            お問い合わせ頂きありがとうございます。<br>
            送信頂いた件につきましては、当社より折り返しご連絡を差し上げます。<br>
            なお、ご連絡までに、お時間を頂く場合もございますので予めご了承ください。
          </p>
        <div class="top">
          <a href="index.php">トップへ戻る</a>
        </div>
      </form>
    </div>
  </div>
  </section>

<?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>

cafe/db_connection.php

<?php

const DB_HOST = 'mysql:dbname=cafe;host=localhost;charset=utf8';
const DB_USER = 'php_user';
const PASSWORD = 'ykb02566';


//例外処理Exeption
try{
  $pdo = new PDO(DB_HOST,DB_USER,PASSWORD, [
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, //連想配列
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, //例外
    PDO::ATTR_EMULATE_PREPARES => false, //SQLインジェクション対応
  ]);
  echo '接続成功';
} catch(PDOException $e){
  echo '接続失敗' . $e->getMessage()."\n";
  exit();
}
?>

該当するソースコード

cafe/connect.php
<?php

//DB接続 PDO
require 'db_connection.php';

// $sql = 'select * from contacts where id = 1'; //sql
// $stmt = $pdo->query($sql); //sqlステートメント

// $result = $stmt->fetchall();

// echo '<pre>';
// var_dump($result);
// echo '</pre>';

//ユーザー入力あり prepare, bind, execute 悪意ユーザー delete * SQLインジェクション
$sql = 'select * from contacts where id = id;'; //名前つきプレースホルダー
$stmt = $pdo->prepare($sql);
$stmt->bindValue('id', 5, PDO::PARAM_INT);//紐付け
$stmt->execute();//実行

$result = $stmt->fetchall();
echo '<pre>';
var_dump($result);
echo '</pre>';

$pdo->beginTransaction();

try{
  //sql処理
  $stmt = $pdo->prepare($sql);
  $stmt->bindValue('id', 5, PDO::PARAM_INT);//紐付け
  $stmt->execute();//実行
  $pdo->commit();

}catch(PDOException $e){
  $pdo->rollback();
}

該当するソースコード

cafe/mainte/insert.php
<?php

//DB接続PDO
// function insertContact($request){
require '/Applications/MAMP/htdocs/04_php_form/cafe/db_connection.php';
//入力 DB保存 prepare, bind, execute

// 入力 DB保存
 $params = [
   'id' => null,
   'name' =>['name'],
   'kana' =>['kana'],
   'tel' =>['tel'],
   'email' =>['email'],
   'body' =>['body'],
   'created_at' => null
 ];

 $count = 0;
 $columns = ',';
 $values = ',';

 foreach(array_keys($params) as $key){
   if($count++>0){
     $columns .=',';
     $values .=',';
   }
   $columns .= $key;
   $values .= ':'.$key;
 }
$sql = 'insert into contacts ('.$columns.')values('.$values.')'; 

//  var_dump($sql);
// exit;
$stmt = $pdo->query('SELECT * FROM contacts');
//  $stmt->bindValue(':tel', (int)$tel, PDO::PARAM_INT);
 $stmt->execute($params);

自分で試したこと

connect.phpが正しく実行されているなら、接続は問題ないと思います。なので、あとは保存の問題なのかどうなのか、、、
どこが原因でphpmyadminとの接続ができないのかわからないのでお願いいたします
下記参考資料
https://support.conoha.jp/v/phpmyadmin/
https://engineer-milione.com/tips/mysql-phpmyadmin.html
https://qiita.com/mpyw/items/b00b72c5c95aac573b71

0

2Answer

Comments

  1. @yopisan

    Questioner

    ありがとうございます。
    確かにinsert文を含まれておらず、insert.phpの36行目に$stmt = $pdo->prepare('INSERT INTO contacts (
    name, kana, email, tel, body
    ) VALUES (
    :name, :kana :email, :tel, :body
    )');
    $stmt = $dbh->prepare($sql);
    $params = array(':name' => '綾瀬', ':kana' => 'アヤセ', ':tel' => '090456342134', ':email' => 'a@a', ':body' =>'こんばんは' );
    // $stmt->bindValue(':tel', (int)$tel, PDO::PARAM_INT);
    $stmt->execute($params);
    を組み込みました。
    ですが、保存はできておりませんでした

executeメソッドの戻り値を確認しましょう。

戻り値
成功した場合に true を、失敗した場合に false を返します。

失敗しているならエラー情報を確認しましょう。
errorInfoメソッドは直近の操作で発生したエラーの情報を取得できます。

0Like

Your answer might help someone💌