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

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

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

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

Q&A

解決済

2回答

2339閲覧

sessionでエラーメッセージが消えなくなった

YukaSaku

総合スコア52

PHP

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

0グッド

0クリップ

投稿2017/05/05 14:14

編集2017/05/05 15:02

現在、ログインフォームを作る過程で、フォームから入力された内容をDBに入れるプログラムを作っています。15文字以上は入力できないとか、メールアドレスは@を含んだ文字列とか、Validation機能も入れたのですが、ユーザーがエラーを出した時に入力内容が消えてしまうので、session_startを使って入力内容が消えないようにするというのをネット上で見つけたのでプログラムの頭に入れました。

で、わざとエラーが出るよう入力しテストをしたら、沢山のエラーが出力され、なぜかsubmitボタンまで何かの判定をされて、エラーが表示され、さらに何をしてもエラーが消えなくなってしまったので、session_start を削除してアップデートしたにも関わらず、まだエラーが出続けています。

もうクッキーか何かがデータを保持してしまって開放できないのかと思ってdistroyを入れてみたり、全て閉じてコンピュータを再起動したり、別のコンピュータで新しく開いてみたりしてもやっぱりエラーは出続けています。

エラーメッセージはこちらになります。

**username123test is not a valid Username
username123test is not a valid Email address
test123password123 is not a valid Email address
test123password123 is not a valid password
yes is not a valid Email address
Submit is not a valid Email address
**

フォームの項目は
username
email
password
の3つになります。
今気づいたのですが、emailにはemail@test.comを入力したのですが表示されてないので、emailはスルー出来てるようです。

sessionを入れる前は普通に動いてたのに、何がいけないのでしょうか。

コードはこちらです。

php

1<?php 2/* Program name: register.php 3 * Description: Program displays the blank form and checks 4 * all the form fields for blank fields. 5 */ 6ini_set("display_errors","on"); 7error_reporting(E_ALL | E_STRICT); 8ini_set("include_path","./includes"); 9include("dbinfo.inc"); 10 11if(isset($_POST['submitted']) and $_POST['submitted'] == "yes") 12{ 13 foreach($_POST as $field => $value) 14 { 15 if(empty($value)) 16 { 17 if($field != "middle_name") 18 { 19 $blank_data[] = $field; 20 } 21 } 22 else 23 { 24 $good_data[$field] = strip_tags(trim($value)); 25 } 26 } 27 if(@sizeof($blank_data) > 0) 28 { 29 $message = "<p style='color: red; margin-bottom: 0; 30 font-weight: bold'> 31 You didn't fill in one or more required fields. 32 You must enter: 33 <ul style='color: red; margin-top: 0; 34 list-style: none' >"; 35 /* display list of missing information */ 36 foreach($blank_data as $value) 37 { 38 $message .= "<li>$value</li>"; 39 } 40 $message .= "</ul>"; 41 echo $message; 42 extract($good_data); 43 include("form.inc"); 44 exit(); 45 } 46 foreach($_POST as $field => $value) 47 { 48 if(!empty($value)) 49 { 50 //validations 51 $name_patt = "/[^\w-.]/"; 52 $email_patt = "/^.+@.+\\..+$/"; 53 $passwd_patt = "/[^\w-.]/"; 54 55 if(preg_match("/username/i",$field)) 56 { 57 if(!preg_match($name_patt,$value)) 58 { 59 $error_array[] = "$value is not a valid Username"; 60 } 61 } 62 if(!filter_var($value, FILTER_VALIDATE_EMAIL)) 63 { 64 $error_array[] = "$value is not a valid Email address"; 65 } 66 67 if(preg_match("/password/i",$field)) 68 { 69 if(!preg_match($passwd_patt,$value)) 70 { 71 $error_array[] = "$value is not a valid password"; 72 } 73 } 74 } 75 } 76 if(@sizeof($error_array) > 0) 77 { 78 $message = "<ul style='color: red; list-style: none' >"; 79 foreach($error_array as $value) 80 { 81 $message .= "<li>$value</li>"; 82 } 83 $message .= "</ul>"; 84 echo $message; 85 @extract($clean_data); 86 include("form.inc"); 87 exit(); 88 } 89 else 90 { 91 $cxn = mysqli_connect($host,$user,$passwd,$dbname) 92 or die("Couldn't connect to server"); 93 //foreach((array)$clean_data as $field => $value) 94 $clean_data = array(); 95 foreach($_POST as $field => $value) 96 { 97 $clean_data[$field] = mysqli_real_escape_string($cxn,$value); 98 } 99 $date = date("Y-m-d H:i:s"); 100 //echo date("Y/m/d H:i:s",$date); 101 //$sql = "INSERT INTO CustomerPhone (last_name,first_name,middle_name,phone) 102 //VALUES ('$clean_data[last_name]','$clean_data[first_name]', 103 // '$clean_data[middle_name]','$clean_data[phone]')"; 104 ?> 105 <form method="post"> 106 <input type="hidden" name="username" value="<?php echo $username; ?>"> 107 <input type="hidden" name="email" value="<?php echo $email; ?>"> 108 <input type="hidden" name="password" value="<?php echo $password; ?>"> 109 <input type="hidden" name="date" value="<?php echo $date; ?>"> 110 </form> 111 value= "<?php echo htmlspecialchars($_POST['username']); ?>" 112 value= "<?php echo htmlspecialchars($_POST['email']); ?>" 113 value= "<?php echo htmlspecialchars($_POST['password']); ?>" 114 <?php 115 116 /* loop that displays the form */ 117 $sql = "INSERT INTO login (username,email,password,date) 118 VALUES ('".$clean_data['username']."','".$clean_data['email']."', 119 '".$clean_data['password']."','$date')"; 120//echo $clean_data['username']; 121 $result = mysqli_query($cxn,$sql) 122 or die("Couldn't execute query"); 123 $signUpMessage = 'Registered. Your Username is '.$clean_data['username'].' Password is'.$clean_data['password'].' '; 124 echo $signUpMessage; 125 include("stored.inc"); 126 } 127} 128else 129{ 130 include("form.inc"); 131} 132?>

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

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

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

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

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

takaboo

2017/05/05 14:53

エラーには大抵の場合原因が書いてあります。なぜそれを載せないのでしょうか
YukaSaku

2017/05/05 14:56

すみません、エラーメッセージを追加しました。
takaboo

2017/05/05 15:05

あー、エラーというのはバリデーションエラーですか。「わざとエラーが出るよう入力しテストをしたら、沢山のエラーが出力され」とあるのでPHPのエラーかと思ったのですが
YukaSaku

2017/05/05 15:40

validationです。PHPのエラーはありません。
guest

回答2

0

自己解決

たまたまネットで見つけたemail の validation code

php

1if(!filter_var($value, FILTER_VALIDATE_EMAIL)) 2 { 3 $error_array[] = "$value is not a valid Email address"; 4 }

をemailだけに加えて、他はそのままで実行したことが原因だったみたいです。このEmail用のvalidaterは有効だったのですが、他に影響を与えすぎてたようです。
別の方法でinput formをキープする方法を探してみようと思います。

投稿2017/05/05 15:52

編集2017/05/05 15:54
YukaSaku

総合スコア52

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

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

0

状況がいまひとつわかりませんが、POSTデータがある状態のときにバリデーションエラーが出るようになっていますので、register.phpにPOSTした状態をリロードしているということなのでは?

フォームのほうは別のphpファイルなのだと思いますので、そちらを改めて表示&リロードした際にエラー(?)が出ますか?

ちょっとこれ以上のエスパー回答は難しいですね…

投稿2017/05/05 15:15

takaboo

総合スコア195

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

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

YukaSaku

2017/05/05 15:50

ご回答ありがとうございます。 解決できました。たまたまネットで見つけたemail の validation codeをemailだけに加えて、他はそのままで実行ことが原因だったみたいです。Email用のvalidaterは有効だったのですが、他に影響を与えすぎてたようです。ありがとうございました。別の方法でinput formをキープする方法を探してみようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問