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

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

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

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

Q&A

解決済

1回答

4745閲覧

[PHP]die()ではなくエラーメッセージを画面に表示させたい

kodama_h

総合スコア28

PHP

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

0グッド

0クリップ

投稿2014/12/13 16:43

PHPで登録ページを作成中です。

そのページはパスワードのハッシュも認証も含まれています。die関数を使うとフォームは停止され、エラーが表示されます。

そのエラーメッセージを同じページに表示したいのです。

lang

1<?php 2 3$ErrorTest =""; 4 5if(!empty($_POST)) 6{ 7 if(empty($_POST['username'])) 8 { 9 $ErrorTest = "ユーザー名を入力してください"; 10 } 11 12 if(empty($_POST['password'])) 13 { 14 $ErrorTest = "パスワードを入力してください"; 15 } 16 17 $query = "SELECT 1 FROM users WHERE username = :username"; 18 19 $params = array(':username' => $_POST['username']); 20 21 try 22 { 23 $stmt = $db->prepare($query); 24 $result = $stmt->execute($params); 25 } 26 catch(PDOException $e) 27 { 28 $ErrorTest = "エラーが発生しました" . $e->getMessage(); 29 } 30 $row = $stmt->fetch(); 31 32 if($row) 33 { 34 $ErrorTest = "その名前はすでに登録されています"; 35 } 36 37 $query = "SELECT 1 FROM user WHERE email = :email"; 38 39 $params = array(':email' => $_POST['email']); 40 41 try 42 { 43 $stmt = $db->prepare($query); 44 $result = $stmt->execute($params); 45 } 46 catch(PDOException $x) 47 { 48 $ErrorTest ="エラーが発生しました" . $e->getMessage(); 49 } 50 51 $row = $stmt->fetch(); 52 53 if($row) 54 { 55 $ErrorTest = "そのアドレスはすでに登録されています"; 56 } 57 58 $query = " 59 INSERT INTO users ( 60 username, 61 password, 62 salt 63 ) VALUES ( 64 :username, 65 :password, 66 :salt 67 ) 68 "; 69 70 $salt = time(); 71 72 $password = hash('sha256', $_POST['password'] . $salt); 73 74 $params = array( 75 ':username' => $_POST['username'], 76 ':password' => $password, 77 ':salt' => $salt 78 ); 79 80 try 81 { 82 $stmt = $db->prepare($query); 83 $result = $stmt->execute($params); 84 } 85 catch(PDOException $e) 86 { 87 $ErrorTest = "エラーが発生しました" . $e->getMessage(); 88 } 89} 90?>

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

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

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

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

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

guest

回答1

0

ベストアンサー

die()は使用せずに、エラーメッセージの変数にエラー内容を格納するのがよいと思います。

lang

1$errMsg = "";

としておいて

lang

1echo $e->getMessage(); 2die(); 3

などを

lang

1 $errMsg .= "クエリを実行するのに失敗しました。(" . $ex->getMessage() . ")<br />\n";

などのようにします。
この$errMsgを同一画面上に表示したり、どうしても他のページに遷移させられてしまうようなら、

lang

1if ( $errMsg != "" ) { 2 header ( "Location: hoge.php?error=" . urlencode(errMsg) ); 3 exit; 4}

のようにGETの引数で渡すこともできるかと思います。

投稿2014/12/14 12:30

muraokarobot

総合スコア45

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問