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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

データベース

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

Q&A

解決済

3回答

626閲覧

入力フォームのDBに内容を入れる前のエラーメッセージの出力先の遷移

masa354

総合スコア7

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

データベース

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

0グッド

0クリップ

投稿2020/04/02 06:44

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
入力フォームを作成中で、入力完了ページからDBに値を送る際に、DBでエラーがあった際に
コードによって違うエラーページに飛ばす処理を実装したいです。

該当のソースコード

PHP

1<?php 2 3session_start(); 4 5if($_POST['token'] != $_SESSION['token']){ 6 header('Location: senierror.php'); 7}else{ 8 //echo '遷移成功'; 9 session_destroy(); 10} 11 12$dsn = 'mysql:dbname=suject;host=localhost'; 13$user = 'root'; 14$password = ''; 15 16session_start(); 17 18 try { 19 $pdo = new PDO($dsn, $user, $password); 20 21 } catch (PDOException $e) { 22 23 $_SESSION['message'] = 'Connection failed: ' . mb_convert_encoding($e->getMessage(),'utf-8','sjis'); 24 $_SESSION['code'] = $e->getCode(); 25 26 if("int(2002)"){ 27 header('Location: system_error.php'); 28 } 29 if("int(1049)"){ 30 header('Location: system_error2.php'); 31 } 32 33} 34 35 36 37$stmt = $pdo->prepare("insert into applicant(name_1, 38 name_2, 39 name_kana_1, 40 name_kana_2, 41 birthday_year, 42 birthday_month, 43 birthday_day, 44 postalNo_1, 45 postalNo_2, 46 address_1, 47 address_2, 48 tel, 49 mail, 50 explanation_day, 51 pr, 52 question) 53 54 values(:name_1, 55 :name_2, 56 :name_kana_1, 57 :name_kana_2, 58 :birthday_year, 59 :birthday_month, 60 :birthday_day, 61 :postalNo_1, 62 :postalNo_2, 63 :address_1, 64 :address_2, 65 :tel, 66 :mail, 67 :explanation_day, 68 :pr, 69 :question)" 70 ); 71 72 73 74$stmt -> bindvalue(':name_1',$_POST["Lname"], PDO::PARAM_STR); 75$stmt -> bindvalue(':name_2',$_POST["Fname"], PDO::PARAM_STR); 76$stmt -> bindvalue(':name_kana_1',$_POST["lname"], PDO::PARAM_STR); 77$stmt -> bindvalue(':name_kana_2',$_POST["fname"], PDO::PARAM_STR); 78$stmt -> bindvalue(':birthday_year',$_POST["Year"], PDO::PARAM_STR); 79$stmt -> bindvalue(':birthday_month',$_POST["Month"], PDO::PARAM_STR); 80$stmt -> bindvalue(':birthday_day',$_POST["Day"], PDO::PARAM_STR); 81$stmt -> bindvalue(':postalNo_1',$_POST["left"], PDO::PARAM_STR); 82$stmt -> bindvalue(':postalNo_2',$_POST["right"], PDO::PARAM_STR); 83$stmt -> bindvalue(':address_1',$_POST["Jadd"], PDO::PARAM_STR); 84$stmt -> bindvalue(':address_2',$_POST["addressmin"], PDO::PARAM_STR); 85$stmt -> bindvalue(':tel',$_POST["num"], PDO::PARAM_STR); 86$stmt -> bindvalue(':mail',$_POST["mailadd"], PDO::PARAM_STR); 87$stmt -> bindvalue(':explanation_day',$_POST["rdo"], PDO::PARAM_STR); 88$stmt -> bindvalue(':pr',$_POST["PR"], PDO::PARAM_STR); 89$stmt -> bindvalue(':question',$_POST["Question"], PDO::PARAM_STR); 90 91$stmt -> execute(); 92?> 93 94<!DOCTYPE html> 95<html lang="ja"> 96<head> 97<meta charset="UTF-8"> 98<title>登録完了</title> 99</head> 100<body> 101 102<h1>お申し込みありがとうございました。</h1> 103 104<a href="input_backup.php">登録画面へ</a> 105 106</body> 107</html>

試したこと

$dsn = 'mysql:dbname=suject;host=localhost';
$user = 'root';
$password = '';

session_start();

try {
$pdo = new PDO($dsn, $user, $password);

} catch (PDOException $e) {

$_SESSION['message'] = 'Connection failed: ' . mb_convert_encoding($e->getMessage(),'utf-8','sjis'); $_SESSION['code'] = $e->getCode();

if("int(2002)"){
header('Location: system_error.php');
}
if("int(1049)"){
header('Location: system_error2.php');
}

}

上記の部分で、コードをセッションに入れ、コードがそれぞれ2002だった場合はerrorに1049だった場合はerror2に行くように
するためにif文を使用しましたが、コードが2002の場合でもerror2に遷移してしまいます。
解決方法をどうかお教え頂けないでしょうか?

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

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

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

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

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

guest

回答3

0

申し訳ありません。以下の記述で上手くいきました!

if($e->getCode() == 2002){
header('Location: system_error.php');
}

投稿2020/04/02 07:16

masa354

総合スコア7

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

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

0

自己解決

申し訳ありません。以下の記述で上手くいきました!

if($e->getCode() == 2002){
header('Location: system_error.php');
}

投稿2020/04/02 07:10

masa354

総合スコア7

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

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

0

if("int(2002)") は、"int(2002)"が文字列なので必ずtrueになります。

PHP

1if ($e->getCode() === "int(2002)" ) { 2} // こういうことをしたいのでしょうか。 3/* $e->getCode() が文字列"int(2002)"なら上記はtrue、数値2002ならfalse */

【PHP: PHP 型の比較表 - Manual】
https://www.php.net/manual/ja/types.comparisons.php

投稿2020/04/02 06:52

kei344

総合スコア69458

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

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

masa354

2020/04/02 07:06

回答ありがとうございます。 kei344様のソースで実装しましたが、 Notice: Undefined variable: pdo in C:\xampp\htdocs\EXAM\kadai1\done.php on line 43 Fatal error: Uncaught Error: Call to a member function prepare() on null in C:\xampp\htdocs\EXAM\kadai1\done.php:43 Stack trace: #0 {main} thrown in C:\xampp\htdocs\EXAM\kadai1\done.php on line 43 のエラーが出てしまいます、、。
kei344

2020/04/02 07:12

$e->getCode() の値が違うのでしょう。ifの前で var_dump($e->getCode());とでもして内容を確認してください。
kei344

2020/04/02 07:13

書いてる内容を読まれていないようだ。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問