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

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

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

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

Q&A

解決済

1回答

1346閲覧

PHP入力フォームでのmysqlに登録ができない

TAKAYUKIM

総合スコア3

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

0グッド

0クリップ

投稿2020/06/15 08:02

前提・実現したいこと

PHPとmysqlで初心者ながら日報の入力システムを作っています。
入力画面→確認画面→登録完了画面という画面遷移で作成しています。
入力画面→確認画面へと遷移はきちんと行くのですが、確認画面で登録をクリックしても画面が変わらず(本来は登録完了画面へ行くはず)、mysqlにも登録されません。いろいろと調べてみたのですが原因がわかりません。お手数ですが、教えていただけないでしょうか。
入力画面はindex.php、確認画面はcheck.php、登録完了画面はthanks.phpです。ほかにdb接続用にdbconnect.phpを作成しています。

参考テキスト)よくわかるPHPの教科書(PHP7対応版)

発生している問題・エラーメッセージ

mysqlへデータが登録されない。勤務日をカレンダーから選択して入力の形をとっていますがそこも原因かなと考えています。

index.php

<?php session_start(); if (!empty($_POST)){ //エラー項目のチェック if($_POST['kinmu']==''){ $error['kinmu']='blank'; } if($_POST['kdate']==''){ $error['kdate']='blank'; } if($_POST['gyomu']==''){ $error['gyomu']='blank'; } if($_POST['commute']==''){ $error['commute']='blank'; } if($_POST['section']==''){ $error['section']='blank'; } if(empty($error)){ $_SESSION['join']=$_POST; header('Location:check.php'); exit(); } } //書き直しrewrite if ($_REQUEST['action']=='rewrite'){ $_POST=$_SESSION['join']; $error['rewrite']=true; } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>日報入力</title> <link rel="stylesheet" href="style.css" /> </head> <body> <div id="wrap"> <div id="head"> <h1>日報入力</h1> </div> <div id="content"> <p>次のフォームに必要事項を記入してください </p> <form action="" method="post" enctype="multipart/form-data"> <dl> <dt>勤務者<span class="required">必須</span></dt> <dd> <select name="kinmu" value="<?php echo htmlspecialchars($_POST['kinmu'],ENT_QUOTES);?>"/> <option value="" selected style="display:none;"<?php if(empty($_POST['kinmu'])) echo 'selected'; ?>>勤務者を選択してください</option> <option value="あああ">あああ</option> <option value="いいい">いいい</option> </select> <?php if($error['kinmu']=='blank'):?> <p class="error">*勤務者を選択してください</p> <?php endif; ?> </dd> <dt>勤務日<span class="required">必須</span></dt> <dd> <input type="date" name="kdate" style="width:200px" value="<?php echo htmlspecialchars($_POST['date'],ENT_QUOTES);?>"/> <?php if($error['kdate']=='blank'):?> <p class="error">*勤務日を選択してください</p> <?php endif; ?> </dd> <dt>勤務開始時間<span class="required">必須</span></dt> <dd> <select name="start_hour"> <?php for ($i=1; $i<=24; $i++){ print('<option value="' .$i. '">' .$i . '時</option>'); } ?> </select> <select name="start_min"> <?php for ($i=0; $i<=59; $i++){ print('<option value="' .$i. '">' .$i . '分</option>'); } ?> </select> </dd> <dt>勤務終了時間<span class="required">必須</span></dt> <dd> <select name="end_hour"> <?php for ($i=1; $i<=24; $i++){ print('<option value="' .$i. '">' .$i . '時</option>'); } ?> </select> <select name="end_min"> <?php for ($i=0; $i<=59; $i++){ print('<option value="' .$i. '">' .$i . '分</option>'); } ?> </select> </dd> <dt>休憩時間<span class="required">必須</span></dt> <dd> <select name="rest_hour"> <?php for ($i=1; $i<=24; $i++){ print('<option value="' .$i. '">' .$i . '時間</option>'); } ?> </select> <select name="rest_min"> <?php for ($i=0; $i<=59; $i++){ print('<option value="' .$i. '">' .$i . '分</option>'); } ?> </select> </dd> <dt>業務内容<span class="required">必須</span></dt> <dd> <select name="gyomu" value="<?php echo htmlspecialchars($_POST['gyomu'],ENT_QUOTES);?>"/> <option value="" selected style="display:none;">業務内容を選択してください</option> <option value="ええ">ええ</option> <option value="おお">おお</option> </select> <?php if($error['gyomu']=='blank'):?> <p class="error">*業務内容を選択してください</p> <?php endif; ?> </dd> <dt>その他を選択した場合、業務内容を入力</dt> <dd> <input id="other" type="text" name="other"> </dd> <dt>通勤区間<span class="required">必須</span></dt> <dd> <input type="text" name="commute" > <?php if($error['commute']=='blank'):?>value="<?php echo htmlspecialchars($_POST['commute'],ENT_QUOTES);?>"/ <p class="error">*通勤区間を入力してください</p> <?php endif; ?> </dd> <dt>通勤距離(km)<span class="required">必須</span></dt> <dd> <input id="section" type="number" name="section" value="<?php echo htmlspecialchars($_POST['section'],ENT_QUOTES);?>"/> <?php if($error['section']=='blank'):?> <p class="error">*通勤距離を入力してください</p> <?php endif; ?> </dd> </dl> <input type="submit" value="確認画面へ"> </form> </body> </html>

check.php

<?php session_start(); if(!isset($_SESSION['join'])){ header('Location:index.php'); exit(); require('../dbconnect.php'); } if(!empty($_POST)){ //登録処理をする $statement=$db->prepare('INSERT INTO syuho SET kinmu=?, kdate=?, start_hour=?, start_min=?, end_hour=?, end_min=?, rest_hour=?, rest_min=?, gyomu=?, other=?, commute=?, section=?'); $ret=$statement->execute(array( $_SESSION['join']['kinmu'], $_SESSION['join']['kdate'], $_SESSION['join']['start_hour'], $_SESSION['join']['start_min'], $_SESSION['join']['end_hour'], $_SESSION['join']['end_min'], $_SESSION['join']['rest_hour'], $_SESSION['join']['rest_min'], $_SESSION['join']['gyomu'], $_SESSION['join']['other'], $_SESSION['join']['commute'], $_SESSION['join']['section'], )); unset($_SESSION['join']); header('Location: thanks.php'); exit(); } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>日報入力</title> <link rel="stylesheet" href="style.css" /> </head> <body> <div id="wrap"> <div id="head"> <h1>日報入力確認画面</h1> </div> <div id="content"> <form action="" method="post"> <dl> <dt>勤務者</dt> <dd> <?php echo htmlspecialchars($_SESSION['join']['kinmu'],ENT_QUOTES);?> </dd> <dt>勤務日</dt> <dd> <?php echo htmlspecialchars($_SESSION['join']['kdate'],ENT_QUOTES);?> </dd> <dt>勤務開始時間</dt> <dd> <?php echo htmlspecialchars($_SESSION['join']['start_hour'],ENT_QUOTES);?>時 <?php echo htmlspecialchars($_SESSION['join']['start_min'],ENT_QUOTES);?>分 </dd> <dt>勤務終了時間</dt> <dd> <?php echo htmlspecialchars($_SESSION['join']['end_hour'],ENT_QUOTES);?>時 <?php echo htmlspecialchars($_SESSION['join']['end_min'],ENT_QUOTES);?>分 </dd> <dt>休憩時間</dt> <dd> <?php echo htmlspecialchars($_SESSION['join']['rest_hour'],ENT_QUOTES);?>時 <?php echo htmlspecialchars($_SESSION['join']['rest_min'],ENT_QUOTES);?>分 </dd> <dt>業務内容</dt> <dd> <?php echo htmlspecialchars($_SESSION['join']['gyomu'],ENT_QUOTES);?> </dd> <dt>その他を選択した場合、業務内容を入力</dt> <dd> <?php echo htmlspecialchars($_SESSION['join']['other'],ENT_QUOTES);?> </dd> <dt>通勤区間</dt> <dd> <?php echo htmlspecialchars($_SESSION['join']['commute'],ENT_QUOTES);?> </dd> <dt>通勤距離(km) <dd> <?php echo htmlspecialchars($_SESSION['join']['section'],ENT_QUOTES);?> </dd> </dl> <div><a href="index.php?action=rewrite">&laquo;&nbsp;入力をやり直す</a>|<input type="submit" value="週報を登録する"></div> </form> </body> </html>

試したこと

補足情報(FW/ツールのバージョンなど)

XAMPPを使用して開発しています。PHPは7.4.6です

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

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

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

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

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

guest

回答1

0

ベストアンサー

require('../dbconnect.php')で接続処理をしているのでしょうけど
インスタンスがちゃんと$dbで受けていますか?
また、エラーモードの設定をしてtry-catchするとエラーが拾えるようになります

投稿2020/06/15 08:19

yambejp

総合スコア114769

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

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

TAKAYUKIM

2020/06/15 12:15

回答ありがとうございます。 dbconnect.phpは以下のように記載しています。 <?php try{ $db=new PDO("mysql:dbname=nature;host=localhost;charset=utf8",'root',''); } catch (PDOException $e){ echo 'DB接続エラー: ' .$e->getMessage(); } ?> mysqlにはDB natureは存在しています。 インスタンスが$dbで受けているということは何かで表示できるのでしょうか。無知な質問で申し訳ありません。
TAKAYUKIM

2020/06/15 12:24

追記です。きちんとDBに接続している確認するよう以下を実行してみました。 ファイル名:test.php <?php // ドライバ呼び出しを使用して MySQL データベースに接続します $dsn = 'mysql:dbname=nature;host=127.0.0.1'; $user = 'root'; $password = ''; try { $dbh = new PDO($dsn, $user, $password); echo "接続成功\n"; } catch (PDOException $e) { echo "接続失敗: " . $e->getMessage() . "\n"; exit(); } ブラウザ上では接続成功と出ているので接続はされているようでした
m.ts10806

2020/06/15 12:26

接続時より実行時にtry-catchを。
TAKAYUKIM

2020/06/19 00:40

実行時にtry catchを追加しました。また接続の書き方を変更しましたところ、うまくDBにデータが格納されました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問