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

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

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

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

Q&A

2回答

1128閲覧

php バインドについて

banianizm

総合スコア92

PHP

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

0グッド

1クリップ

投稿2018/09/14 09:09

お世話になります。
php,mysqlで学習中です。
値を追加させたいのですがうまくいきません。
どのようなことが考えられるのでしょうか?
insert intoで何か抜けている個所などありますでしょうか?

php

1<!DOCTYPE html> 2<html> 3<head> 4<meta charset="UTF-8"> 5<title>testauto</title> 6<!-- Bootstrap core CSS --> 7 <link href="../css/bootstrap.min.css" rel="stylesheet"> 8 <link href="../css/update.css" rel="stylesheet"> 9 <!-- Custom styles for this template --> 10 <link href="../css/dashboard.css" rel="stylesheet"> 11 12</head> 13<body> 14 15<?php 16 17 18require_once '../lib/login.php'; 19require_once '../lib/sidemenu.html'; 20 21 22 23 24try 25{ 26 27//データベース接続 28$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8','root',''); 29 30$stmt = $pdo -> prepare("INSERT INTO holidays(id,h_year,h_month,h_day,holiday_name) VALUES ('', :h_year,:h_month,:h_day,:holiday_name)"); 31$stmt -> bindParam(':h_year', $pro_year, PDO::PARAM_INT); 32$stmt -> bindParam(':h_month', $pro_month, PDO::PARAM_INT); 33$stmt -> bindParam(':h_day', $pro_days, PDO::PARAM_INT); 34$stmt -> bindParam(':holiday_name', $pro_name, PDO::PARAM_STR); 35 36 37$stmt -> execute(); 38// 39$dbh=null; 40 41 42 43 44 45print 'を追加しました。<br />'; 46 47} 48catch (Exception $e) 49{ 50 print 'ただいま障害により大変ご迷惑をお掛けしております。'; 51 exit(); 52} 53 54?> 55 56 57 58 59 60<main role="main" class="col-md-9 ml-sm-auto col-lg-10 pt-3 px-4"> 61 <div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pb-2 mb-3"> 62 <h1>休日の追加</h1> 63 <div class="btn-toolbar mb-2 mb-md-0"> 64 <div class="btn-group mr-2"> 65 <form action="pro_add.php" method="post"> 66 <button class="btn btn-sm btn-outline-secondary">新規追加</button> 67 68 </form> 69 </div> 70 </div> 71 </div> 72<?php 73//変数定義 74$pro_year=$_POST['h_year']; 75$pro_month=$_POST['h_month']; 76$pro_days=$_POST['h_day']; 77$pro_name = $_POST["holiday_name"]; 78 79 80print '年:'; 81print $pro_year; 82print '月:'; 83print $pro_month; 84print '日:'; 85print $pro_days; 86print '休日名:'; 87print $pro_name; 88 89print '<br />'; 90print 'を追加しました。<br />'; 91 92 93 94print '<a class="btn btn-primary" href="pro_list.php" role="button">戻る</a>'; 95 96 97 98 99 100 101 102 103 104 105//$pro_id=htmlspecialchars($pro_id,ENT_QUOTES,'UTF-8'); 106$pro_name=htmlspecialchars($pro_name,ENT_QUOTES,'UTF-8'); 107//$pro_created=htmlspecialchars($pro_created,ENT_QUOTES,'UTF-8'); 108//$pro_modified=htmlspecialchars($pro_modified,ENT_QUOTES,'UTF-8'); 109//$pro_delflg=htmlspecialchars($pro_delflg,ENT_QUOTES,'UTF-8'); 110//$pro_user=htmlspecialchars($pro_user,ENT_QUOTES,'UTF-8'); 111 112 113 114print'<div class="container">'; 115print'<div class="row">'; 116print'<div class="col">'; 117 118if($pro_name=='') 119{ 120 print '休日名が入力されていません。<br />'; 121} 122elseif($pro_year=='') 123{ 124 print '時間が入力されていません。<br />'; 125} 126else 127{ 128 129 130 131} 132 133 134?> 135 136</div> 137</div> 138</div> 139 140</body> 141</html>``` 142 143 144 145 146エラーにはなりません。 147事情がありすべてのファイルはお見せできないのですが、何か気になる点などありましたらお願いします。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/09/14 09:22 編集

みづらい。コードブロックの```の付け方がおかしいので直してほしい。「うまくいきません」というのは具体的のどういうことなのか。データベースへの接続は成功しているのか。webサーバーのエラーログにどんなエラーメッセージが出ているのか。php.iniのdisplay_errorsやerror_reportingをデバッグ向け設定値に変更の上実行してみてください。
guest

回答2

0

PHPのエラー表示設定について - Qiita
を参照しながら、display_errorsをOnに、error_reportingをE_ALLにして実行してみてください。
php.iniの直接変更が難しければ、実行するphpコードの冒頭に

php

1<?php 2// 最初の最初に下記2行を挿入 3ini_set('display_errors', "On"); 4ini_set('error_reporting', E_ALL); 5

などとします。
そうすることで、webブラウザー上にエラーメッセージが表示されるようになります。

まずはそれから。

投稿2018/09/14 09:33

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

いろいろおかしいです。
とりあえず、エラーが出ないというのがおかしいです。

全体像が見えないので、ピンポイントの指摘は無理ですが。。。

まず、エラーの表示を抑止してませんか?

php

1error_reporting(-1); 2ini_set('display_errors', 'On');

これをスクリプトの先頭に入れてください。
で、

php

1//データベース接続 $pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8','root','');

途中に改行がないとすると、接続箇所がコメントになっているので、おかしいです。

php

1$stmt = $pdo -> prepare("INSERT INTO holidays(id,h_year,h_month,h_day,holiday_name) VALUES ('', :h_year,:h_month,:h_day,:holiday_name)");

多分、id は AUTOINCREMENT じゃないですかね?

php

1$stmt = $pdo -> prepare("INSERT INTO holidays(h_year,h_month,h_day,holiday_name) VALUES (:h_year,:h_month,:h_day,:holiday_name)");

としてみては?

全体として、「よくわかってない状態で、書き換えてみました!」ってスクリプトだと思うので、「エラー吐くようにした上で」もっといろいろ試してみると良いです。

投稿2018/09/14 09:27

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2018/09/14 09:34

数値しか許容しないidに対して、カラ文字列を代入しようとしてエラーなのかな、とこの回答を見て思いました。
退会済みユーザー

退会済みユーザー

2018/09/14 09:38

質問だけ見るとエラー吐くスクリプトなんで、なんとも言えないんですよねぇ。。。 コードもホントに正しくコピーされているのか分からんし^^; エラー見てからかなぁ。
退会済みユーザー

退会済みユーザー

2018/09/14 10:25 編集

個人的には $dbh がジワる($pdoじゃないんかいっ)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問