0
0

More than 3 years have passed since last update.

【Php】フォームからDBへデータ保存(2)

Posted at

初めに

phpでフォームの入力内容をDBに保存する方法について学習した内容のoutput用記事です。

※内容に間違いなどがある場合はご指摘をよろしくお願いします。
※こちらの記事はあくまでも個人で学習した内容のoutputとしての記事になります。

前回の記事:
https://qiita.com/redrabbit1104/items/a6e57aa1fd1771ef90ff
https://qiita.com/redrabbit1104/items/a3eaf2bba51fac0b3c51
https://qiita.com/redrabbit1104/items/6e9c85c7503ed9043f38
https://qiita.com/redrabbit1104/items/c9b7bb7a89922521c003
https://qiita.com/redrabbit1104/items/3c83883ab811d7bd1337

phpファイルの読み込みとDB保存のための関数

入力フォームの完了画面のあたりに前回作成したデータベースへ保存処理が書かれているphpファイルを読み込みます。

 <?php require 'insert.php'; ?>

また、insert.phpファイルにはDBに入力フォームの内容を保存する関数を作成します。関数の引数にはフォームの入力値が入っている\$_POSTを渡します。

 <?php require 'insert.php'; 
   insertPost($_POST);
 ?>

insertPost()関数の作成と$paramsのvalueを修正

insert.phpファイルのデータベースにデータを保存する処理が書かれている部分をinsertPost関数の処理部分として{}で囲みます。

// insert.php
<?php

    const DB_HOST = 'mysql:dbname=udemy_php;host=localhost:8889;charset=utf8';
    const DB_USER = 'php_user';
    const DB_PASSWORD = 'wlfkfakfk12';

function insertPost($request){                  //追記
    try{
        $pdo = new PDO(DB_HOST, DB_USER, DB_PASSWORD, [ 
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, 
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_EMULATE_PREPARES => false,
        ]);
    }catch(PDOException $e){
        echo $e -> getMessage() . "\n";
        exit();
    }

     $params = [
        'id' => null,
        'your_name' => '田中',
        'email' => 'test@test.com',
        'url' => 'http://www.abc.com',
        'gender' => '1',
        'age' => '2',
        'contact' => 'いい',
        'created_at' => null
    ];

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

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

    var_dump($columns);
    var_dump($values);

    $pdo->beginTransaction();

    try {

        $sql = 'insert into contacts ('. $columns .')values('. $values .')';
        var_dump($sql);  
        //string(143) "insert into contacts (id,your_name,email,url,gender,age,contact,created_at)values(:id,:your_name,:email,:url,:gender,:age,:contact,:created_at)"
        $stmt = $pdo->prepare($sql);     
        $stmt->execute($params);

        $pdo->commit();
        $result = $stmt->fetchall();
        var_dump($result);
    } catch (PDOException $e) {
        $pdo->rollback();    
        echo $e;
    }
}
?>

また、\$paramsのキーに対するvalueの値を修正します。

//中略
    $params = [
        'id' => null,
        'your_name' => $request['your_name'],     //修正
        'email' => $request['email'],
        'url' => $request['url'],
        'gender' => $request['gender'],
        'age' => $request['age'],
        'contact' => $request['contact'],
        'created_at' => null
    ];
//中略

参考サイト

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0