現在メールフォームの作成にて困っていることがあります。
form.php
<?php
//エラー表示設定
if(isset($_SESSION['error'])) {
foreach ($_SESSION['error'] as $value) {
print ' <span style="color:#FF0000; font-size:13px;">' . h($value) . '</span><br />' . "\n";
}
}
?>
<!--FORMタグここから-->
<form method="post" action="confirm.php">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td><label for="name">名前</label><span class="indispensable_color">*</span></td>
<td><input type="text" size="50" name="name" id="name" value="<?php print h(@$_SESSION['name']); ?>" /></td>
<td>例:goo 太郎</td>
</tr>
<tr>
<td><label for="kana">フリガナ</label><span class="indispensable_color">*</span></td>
<td><input type="text" size="50" name="kana" id="kana" value="<?php print h(@$_SESSION['kana']); ?>" /></td>
<td>例:グー タロウ</td>
</tr>
</table>
</form>
confirm.php
// 名前欄をチェックします。
if (trim($name) == '') {
$error[] = 'お名前は必須項目です。';
} else if (mb_strlen($name) > 100) {
$error[] = 'お名前は100文字以内でお願い致します。';
}
// フリガナ欄をチェック
if (trim($kana) == '') {
$error[] = 'フリガナは必須項目です。';
}
// エラー数を確認します。
if(count($error) > 0) {
// エラーがある場合は、入力フォームに戻る
$dirname = dirname($_SERVER['SCRIPT_NAME']);
$dirname = $dirname == DIRECTORY_SEPARATOR ? '' : $dirname;
$uri = 'http://' . $_SERVER['SERVER_NAME'] . $dirname . '/form.php';
header('HTTP/1.1 303 See Other');
header('Location: ' . $uri);
// 確認画面を表示します。
} else {
と記載しています。
これですと、エラーがあった場合の表示はtableの上にまとめて表示されます。
まとめて表示されるのではなく個別に表示されるにはどうしたらよろしいでしょうか?
例→名前の項目のテキストボックスの下に「お名前は必須項目です。」
カナの項目のテキストボックスの下に「カナは必須項目です。」
と表示されるようにしたい。
ご教授お願いします。
No.2ベストアンサー
- 回答日時:
では手っ取り早い方法で、form.phpの1ファイルでやります。
<?php
session_start();
$error = FALSE;
echo "<html><head></head><body>";
// POSTで受信したら
if ($_POST['submit'] == '送信') {
$name = trim($_POST['name']);
$kana = trim($_POST['kana']);
$_SESSION['name'] = $name;
$_SESSION['kana'] = $kana;
// 名前欄をチェックします。
if ($name == '') {
$_SESSION['err_name_req'] = 'お名前は必須項目です。';
$error = TRUE;
} else {
// 問題無ければSESSIONのエラー内容をクリア
unset($_SESSION['err_name_req']);
}
// 名前欄のサイズをチェック
if (mb_strlen($name) > 100) {
$_SESSION['err_name_len'] = 'お名前は100文字以内でお願い致します。';
$error = TRUE;
} else {
// 問題無ければSESSION内容のエラーをクリア
unset($_SESSION['err_name_len']);
}
// フリガナ欄をチェック
if ($kana == '') {
$_SESSION['err_kana_req'] = 'フリガナは必須項目です。';
$error = TRUE;
} else {
// 問題無ければSESSION内容のエラーをクリア
unset($_SESSION['err_kana_req']);
}
// エラーが無ければ登録などをする。エラーならそのまま処理を続行する。
if ($error == FALSE) {
//
// 送信内容の表示や登録処理など記述
//
echo "<h2>登録が完了しますた。</h2>";
echo "<p><a href='".$_SERVER['PHP_SELF']."'>戻る</a></p>";
// SESSION内容破棄
session_destroy();
// 処理を終了させる。formは表示されない。
exit();
}
}
// fromを表示する。
// あらかじめエラー時に表示させたい所に、<?php echo $_SESSION['err_kana_req']; ?> などを入れておく。
// 初回アクセス時はSESSION内容が空なので表示されない。
// formのactionは自分自身
?>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td><label for="name">名前</label><span class="indispensable_color">*</span></td>
<td><input type="text" size="50" name="name" id="name" value="<?php print $_SESSION['name']; ?>" /></td>
<td>例:goo 太郎 <span style="color:red;"><?php echo $_SESSION['err_name_req'].$_SESSION['err_name_len']; ?></span></td>
</tr>
<tr>
<td><label for="kana">フリガナ</label><span class="indispensable_color">*</span></td>
<td><input type="text" size="50" name="kana" id="kana" value="<?php print $_SESSION['kana']; ?>" /></td>
<td>例:グー タロウ <span style="color:red;"><?php echo $_SESSION['err_kana_req']; ?></td>
</tr>
<tr><td colspan="3"><input type="submit" name="submit" value="送信"></td></tr>
</table>
</form>
</body>
</html>
この回答への補足
有難う御座います。
できました。
ただ、メールアドレスのチェックとエラー出力方法ですが、
// メールアドレス欄をチェック
if (trim($mail) == '') {
$_SESSION['err_mail_req'] = 'メールアドレスは必須項目です。';
$error = TRUE;
} else {
unset($_SESSION['err_mail_req']);
}
if (!preg_match('/^[a-zA-Z0-9_\.\-]+@[A-Za-z0-9]+\.[A-Za-z0-9]+$/', $mail)) {
$_SESSION['err_mail_preg']= 'メールアドレスの形式が正しくありません。';
$error = TRUE;
} else {
unset($_SESSION['err_mail_preg']);
}
のように記述しています。
出力するところには
<span style="color:red; font-size:13px;"><?php print $_SESSION['err_mail_req'].$_SESSION['err_mail_preg']; ?></span>
と記述しています。
ですが、空白で確認ボタンを押すと画像のようになります。
空白で確認ボタンを押すと、必須項目です。
メアドの形式が間違っていたらアドレスの形式が違いますと別々にだしたいのですが、どうしたらよろしいでしょうか?
調べてやってみたのですが、!preg_matchの!をはずしてみるなどためしてみましたが、!をはずすとアドレスの形式はあっているのに形式が違いますとでます。
初心者なものですからご質問ばかりで申し訳ありませんが、宜しくお願いします。
No.3
- 回答日時:
> 出力するところには
> <span style="color:red; font-size:13px;"><?php print $_SESSION['err_mail_req'].$_SESSION['err_mail_preg']; ?></span>
> と記述しています。
>
> ですが、空白で確認ボタンを押すと画像のようになります。
>
> 空白で確認ボタンを押すと、必須項目です。
> メアドの形式が間違っていたらアドレスの形式が違いますと別々にだしたいのですが、どうしたらよろしいでしょうか?
>
> 調べてやってみたのですが、!preg_matchの!をはずしてみるなどためしてみましたが、!をはずすとアドレスの形式はあっているのに形式が違いますとでます。
えーと、ちょっと質問の意味が分かりませんが
メールアドレス欄になにも入れず送信した時に必須項目のエラーが出るのは良いが、
形式のエラーを出したくないということでしょうか?
でしたら、必須項目のチェックでOKとなった時だけ形式をチェックすればいいですね。
必須項目チェックのelse文の中でメールアドレス形式をチェックするという事です。
preg_match関数は返り値にマッチした回数を返します。(1回マッチしたら処理が終わるので1(回)か0(回)のどちらかです。)
http://www.php.net/manual/ja/function.preg-match …
ですから、if (preg_match('/^[a-zA-Z0-9_\.\-]+@[A-Za-z0-9]+\.[A-Za-z0-9]+$/', $mail) == 0) {
がマッチしなかった時になります。
また、PHPは数値型の0をブーリアン型のFALSEと解釈します。
http://www.php.net/manual/ja/language.types.bool …
また、論理演算子 ! は否定しますので、if (!preg_match は
preg_matchがマッチしないなら0だからFALSE → ! がFALSEを否定しますのでTRUE→if文はTRUEで実行されます。
http://www.php.net/manual/ja/language.operators. …
あと、公開フォームとなるでしょうからセキュリティには十分注意して下さい。
http://www.php.net/manual/ja/security.variables. …
http://gihyo.jp/dev/serial/01/php-security
ご返信が遅くなり申し訳ありません。
また、参考URLをみながらいろいろとためしたのですが、まったくわからなかったため、諦めます。
いろいろと有難う御座いました。
No.1
- 回答日時:
エラーがあった場合は入力フォームにhtmlヘッダーのLocationで飛ばさずに、
form.phpのエラーがあった場合のhtml出力で各フォームエレメントのそばにエラー内容をそれぞれ書き出す方法があります。
その際は$_SESSION['error']は要らなくなりますね。
ただし静的にhtmlにエラー内容を書いているので表示されたままですが。
他にjavascriptでフォーム内容をチェックしてエラー内容を表示させる。正しく入力されたらエラーを消すという事も出来ます。
jQueryなどのライブラリを使用すれば比較的簡単に出来ます。
たとえば、
「A jQuery inline form validation, because validation is a mess」
http://www.position-absolute.com/articles/jquery …
などはクライアントのブラウザ上のjavascriptでの検証とSubmit先のphpにAJAX通信で検証してもらう両方が簡単に出来ます。
デモはこちら、
http://www.position-relative.net/creation/formVa …
http://www.position-relative.net/creation/formVa …
参考までに
この回答への補足
ご回答有難う御座います。
このままの状態で記述し、動作をおこなうのは無理なのでしょうか?
今はjavascriptに興味がなく、知識もないため最低限は避けております。
このphpにて、エラーを出力する記述をご教授いただけないでしょうか?
宜しくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ポインタ配列をfscanfで読み込...
-
複数条件での検索について教え...
-
PHPからHTMLへの変数の受け...
-
VBA で、スペースを含むファイ...
-
Smartyを利用したファイルアッ...
-
WordのIDataObject::GetData呼...
-
phpで変数を使ってcopyできない
-
openCVのトラックバーについて
-
UPDATEできない
-
POSTの項目に追加
-
重複を防ぐ記述について教えて...
-
Flaskでサーバー立ち上げに関して
-
検索結果の出力先を違うフレー...
-
csvファイルチェック
-
laravelを利用してコントロール...
-
phpでのセレクトボックスの値を...
-
検索時の選択内容を保持する方法
-
PHPでURLにジャンプするには?
-
PHP ボタンが押されたら処理を...
-
phpで分からないエラーが出てし...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Flaskでサーバー立ち上げに関して
-
重複を防ぐ記述について教えて...
-
VBA で、スペースを含むファイ...
-
phpで変数を使ってcopyできない
-
PHPで入力フォームでデータを確...
-
PHPからHTMLへの変数の受け...
-
POSTの項目に追加
-
PHP MySql 画像を取得
-
MySQL,PHPのリロードによる二重...
-
UPDATEできない
-
ファイル名を変更してアップロ...
-
php、sqlite3にデーター追加で...
-
openCVのトラックバーについて
-
複数条件での検索について教え...
-
PHP5でsimple_xml_load_fileす...
-
PHPのリロード時の処理
-
連想配列を複数条件で比較して...
-
PDOのprepareでLIKEの部分一致...
-
POSTされない
-
アップロードしたファイルの絶...
おすすめ情報