質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
mysqli

MySQLiはPHP5より導入されているデータベース用のドライバです。MySQL 4.1.3以降の新しい機能の利点をまとめています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

1993閲覧

フォームデータをデータベースに格納する[PHP]

mccandless

総合スコア11

mysqli

MySQLiはPHP5より導入されているデータベース用のドライバです。MySQL 4.1.3以降の新しい機能の利点をまとめています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2016/02/24 04:34

編集2016/02/24 05:13

お世話になります。

フォームでポストされたデータをデータベース(MySQL)に格納したいのですが、
下記のコードでは格納が出来ません。
修正方法をご教示お願い致します。

エラーメッセージは出ておりません。確認方法がいたらないだけかもしれませんが。

var_dump($stmt);では下記値になります。
object(PDOStatement)#2 (1) { ["queryString"]=> string(93) "INSERT INTO entries (name,email,memo,created,modified)VALUES(:name,:email,:memo,now(),now());" }

■index.php

<?php session_start(); require_once('config.php'); require_once('functions.php'); if($_SERVER['REQUEST_METHOD'] != "POST"){ //CSRF対策 setToken(); }else{ checkToken(); $name = (string)filter_input(INPUT_POST, 'name'); $email = (string)filter_input(INPUT_POST, 'email'); $memo = (string)filter_input(INPUT_POST, 'memo'); /*$name= $_POST['name']; $email= $_POST['email']; $memo= $_POST['memo'];*/ $error = array(); //エラー処理 if(!filter_var($email, FILTER_VALIDATE_EMAIL)){ $error['email'] = '※メールアドレスの形式が正しくありません'; } if($email==''){ $error['email'] = '※メールアドレスを入力して下さい。'; } if($memo==''){ $error['memo'] = '※内容を入力して下さい。'; } if(empty($error)){ //DBに格納 $dbh= connectDb(); $sql= "INSERT INTO entries (name,email,memo,created,modified)VALUES(:name,:email,:memo,now(),now());"; $stmt = $dbh->prepare($sql); $params= array(":name" => $name,":email" => $email, ":memo" => $memo); $stmt->execute($params); if (!$stmt) { echo "\nPDO::errorInfo():\n"; print_r($dbh->errorInfo()); } /* var_dump($stmt); */ //ありがとうページへ header('Location:'.SITE_URL.'thanks.html'); exit; } } ?> <!DOCTYPE html> <!--[if lt IE 7]> <html class="ie6 oldie" lang="ja"> <![endif]--> <!--[if IE 7]> <html class="ie7 oldie" lang="ja"> <![endif]--> <!--[if IE 8]> <html class="ie8 oldie" lang="ja"> <![endif]--> <!--[if gt IE 8]><!--> <html class="" lang="ja"> <!--<![endif]--> <!--[if lt IE 9]> <script src="http://css3-mediaqueries-js.googlecode.com/svn/trunk/css3-mediaqueries.js"></script> <![endif]--> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="keywords" content=""> <meta name="description" content=""> <meta name="viewport" content="width=device-width; initial-scale=1.0"> <title>フォーム</title> </head> <body> <div class="warpper"> <div class="container"> <h1>お問い合わせフォーム</h1> <form method="post" action="">
<p>会員様氏名:<input type="text" name="name" value="<?php echo h($name);?>" class="text"></p> <p>メール※:<input type="text" name="email" value="<?php echo h($email);?>" class="text"></p>

<font class="fcr" style="margin-bottom: 20px;"><?php if($error['email']){echo h($error['email']); }?></font>

<p>ご要望・ご質問等※:</p> <p><textarea name="memo" cols="40" rows="5"><?php echo h($memo);?></textarea></p>

<font class="fcr" style="margin-bottom: 20px;"><?php if($error['memo']){echo h($error['memo']); }?></font>

<p><input type="submit" value="送信" class="btnA"></p> <input type="hidden" name="token" value="<?php echo h($_SESSION['token']); ?>"> </form>
<p><a href="<?php echo ADMIN_URL; ?>">管理者メニューへ</a></p> </div><!-- /container --> </div><!-- /warpper --> </body> </html>

■config.php

<?php //定数の設定 define('DSN','mysql:host=localhost;dbname=contacts_php;charset=utf8'); define('DB_USER','dbuser'); define('DB_PASSWORD','※※※※'); define('SITE_URL','http://localhost/php/contacts_php/'); define('ADMIN_URL',SITE_URL.'admin/'); // 文字化け対策 $options=array(PDO::MYSQL_ATTR_INIT_COMMAND=>"SET CHARACTER SET'utf8'"); //エラー出力の設定「NOTICE」以外のエラー全て出力しなさい error_reporting(E_ALL & ~E_NOTICE); //セッションの有効範囲設定(contacts_phpフォルダのみに) session_set_cookie_params(0,'/contacts_php/'); ?>

■functions.php

<?php function connectDb(){ try{ return new PDO(DSN, DB_USER, DB_PASSWORD); }catch(PDOException $e){ echo $e->getMessage(); exit; } } function h($s){ return htmlspecialchars($s, ENT_QUOTES, "UTF-8"); } function setToken(){ if(!isset($_SESSION['token'])){ $_SESSION['token'] = sha1(uniqid(mt_rand(), true)); } } function checkToken(){ if(empty($_POST['token']) || $_POST['token'] != $_SESSION['token']){ echo "不正な投稿です!"; exit; } } ?>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

root_jp

2016/02/24 05:01

何か具体的にエラーが出ていれば教えてください。 $name や $email に値はちゃんと入っていますか? バリデーションはうまく動いていますか?
mccandless

2016/02/24 05:14

ご指摘ありがとうございます。 エラーメッセージは出ておりません。確認方法がいたらないだけかもしれませんが。 var_dump($stmt);では下記値になります。 object(PDOStatement)#2 (1) { ["queryString"]=> string(93) "INSERT INTO entries (name,email,memo,created,modified)VALUES(:name,:email,:memo,now(),now());" }
root_jp

2016/02/24 05:23

レコードそのものが作成されていないのか、レコードは作成されているが値が入っていないのか、どちらですか?
mccandless

2016/02/24 05:37

ご連絡ありがとうございます。 レコードそのものが作成されていないと思います。 ターミナル以下になるため。 mysql> select * from ※※※※; Empty set (0.00 sec)
guest

回答1

0

ベストアンサー

細かな点は見ていません。
最小限のコードにして確認するとか、ポイントとなる点を想定通りの値が設定されているかを確認していくことが問題解決の近道かと思います。

投稿2016/02/24 04:47

t_obara

総合スコア5488

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mccandless

2016/02/24 05:21

ご指摘ありがとうございます。 各変数ごと確認してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問