• ベストアンサー

空文字のエラーチェック(問い合わせフォーム)について

宜しくお願いします。 書籍を参考にして、PHPにて問い合わせフォームを作成しております。 初心者のレベルです。 問い合わせフォームに入力されたデーターの、 エラーチェック処理について、1点不明なところがあり、質問させて頂きます。 コメント入力欄があり、そこは1000文字以内で必須入力してもらいます。 そのためエラーチェックとして、下記のコードが書籍にあります。 function erro_check($check_data){ if(isset($check_date["comment"]) && $check_date["comment"]= = ="") {   $error_list[ ]="コメントを入力してください。";  }elseif(trim($check_date["comment"]) = = =""){ $error_list[ ]="コメントを入力して下さい。";  }elseif(mb_strlen($check_date["comment"]) > 1000){     $error_list[ ]="コメントは1000文字以内で入力してくださ     い。";  }  return $error_list; } 空文字入力のチェックが二度にわたって行われているような気がします。最初のif判定だけで、十分なような気が・・・。 もしくは、 if(isset($check_data["commento"]) && trim($check_data["comment"]) === ""){ ... } とすればいいのでは?と。。。 でも書籍の中のコードは、何か意味があってのものだと思います。 どなたか宜しくご教授くださいませ。 お願いします。

  • PHP
  • 回答数2
  • ありがとう数6

質問者が選んだベストアンサー

  • ベストアンサー
  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.1

> 最初のif判定だけで、十分なような気が・・・。 > if(isset($check_date["comment"]) && $check_date["comment"]= = ="") { これは、「何も入力していない」の判定。 >  }elseif(trim($check_date["comment"]) = = =""){ これは、「入力したけれど、内容が空白だけ」の判定。 というわけで、両方あることには意味があると思います。 なお、 > if(isset($check_data["commento"]) && trim($check_data["comment"]) === ""){ もしもこのように書くとすれば、演算子は&&ではなくて||だと思います。

n-yuuki
質問者

お礼

有難うございます。 つまり、 最初のifでは、何も入力されずにPOSTされた場合の処置ですね。 なにも入力されずにPOSTされると、空文字がセットされるようです。 そして、2番目のifは、コメント欄に何かが入力されたのはされたが、 空白文字だけで埋められた場合に反応するような処置ですね。 じつに微妙な判定文だなと、初心者レベルで印象に残りました。 お答え有難うございました。

その他の回答 (1)

  • masa6272
  • ベストアンサー率66% (93/140)
回答No.2

確かに冗長なコードですね。 それぞれの条件式に意味はありますが・・・ isset($check_date["comment"]) は、変数自身が設定されているか。 $check_date["comment"]==="" は、空文字列か。 trim($check_date["comment"]) ==="" は空白だけでできているか。 ただ、PHPに限って言えば、emptyを使って if(empty(trim($check_data['comment']))) で十分です。

n-yuuki
質問者

お礼

お答え有難うございます。 色々と勉強になりました。 empty()は、初めてみかけました。 これまた調べてみます。 有難うございました。

関連するQ&A

  • mb_strlenはマルチバイト文字数をカウントしてくれるはずですよね?

    PHP初心者です。よろしくお願いします。 入力フォームから入力された名前を、下記のコードで エラーチェック行い、結果的に100文字以内の入力を許すように したいです。 if(isset($check_data["name"]) && trim($check_data["name"])=== ""){ $er[] = "お名前を入力して下さい。"; } elseif(mb_strlen($check_data["name"],'SJIS') > 100){ $er[] = "50文字以内でご入力下さい。"; } でも、100文字より大きくなれば・・・と判定しているのに、 51文字以上の入力で判定を受けてしまいます。 マルチバイト(2バイト)のちょうど半分です。 mb_strlenを使用しているのに、なぜ、マルチバイトの文字数を返してくれないのでしょうか? ちなみに上のコードは、>100 としつつ、出力分は50文字以内としております。 なんだかすっきりしません。

    • ベストアンサー
    • PHP
  • フォーム確認画面で文字化け

    お世話になります。 フォーム確認画面で特定の文字を入力すると、文字化けします。 流れは フォーム(ランキングと入力すると)EUC 確認画面(ラン?5)鵐 と表示されます。)EUC 送信 EUC となっております。 そこでラ・ン・キ・ン・グ と一文字づつ入力してみましたが、正常に表示されております。ランキングとつなげてが表示が出来ません。どうやら、”キ”と”き”が原因なのでは無いかと考えております。 なお、確認画面のソースは以下になります。 $comment=$_POST["comment"]; $comment= mb_convert_kana($comment, "KVKV"); $comment= htmlspecialchars($comment); $comment= stripslashes($comment); $comment= nl2br($comment); <?php print $comment;?> どなたかご教授いただける方お願いいたします。あと、”広告”の文字もだめでした。

    • 締切済み
    • PHP
  • phpのエラーについて

    phpでメールフォームを作っています。 メールフォーム(1)、(2)、(3)と3つ作っています。 (2)で確認して記入内容に間違いがなれけば送信して(3)を表示。 間違っていたら(1)に戻るというものです。 確認するページ(2)の記述でParse error: syntax error, unexpected T_STRING in……とエラーが出ます。 その問題の行は、セッションを開始したすぐ下の行の die('不正アクセスの疑いがあります。'); という部分です。 この行と、それより以前・以後を何度も確認しましたがエラーの原因となるものが発見できません…… PHP初心者なのでもうお手上げです>< どなたかご教授よろしくお願いします!!! レンタルサーバーはヘテムルでphpは5.2.8です。 <?php function checkInput($var){ if(is_array($var)){ return array_map('checkInput', $var); } else { if(get_magic_quotes_gpc()){ $var = stripslashes($var); } if(preg_match('/\0/', $var)){ die('不正な入力です。'); } if(!mb_check_encoding($var, 'UTF-8')){ die('不正な入力です。'); } return $var; } } session_start(); $_POST = checkInput($_POST); if(isset($_POST['ticket']) && isset($_SESSION['ticket'])){ $ticket = $_POST['ticket']; if(!in_array($ticket, $_SESSION['ticket'])){ die('不正アクセスの疑いがあります。'); //この行がエラーとなります。 } }else{ die('不正アクセスの疑いがあります。'); } $name = isset($_POST['name']) ? $_POST['name'] : NULL ; $email = isset($_POST['email']) ? $_POST['email'] : NULL ; $name = isset($_POST['comment']) ? $_POST['comment'] : NULL ; $error = array(); if(trim($name) == ''){ $error[] = 'お名前は必須項目です。'; } else if(mb_strlen($name) > 100){ $error[] = 'お名前は100文字以内でお願いします。'; } if(trim($email) == ''){ $error[] = 'メールアドレスは必須項目です。'; } else { $pattern = '/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/iD'; if(!preg_match($pattern, $email)){ $error[] = 'メールアドレスの形式が正しくありません'; } } if(trim($comment) == ''){ $error[] = 'コメントは必須項目です。'; } else if(mb_strlen($comment) > 500){ $error[] = 'コメントは500文字以内でお願いします。'; } $_SESSION['name'] = $name; $_SESSION['email'] = $email; $_SESSION['comment'] = $comment; $_SESSION['error'] = $error; if(count($error) > 0) { $dirname = dirname($_SERVER['SCRIPT_NAME']); $dirname = dirname == DIRECTORY_SEPARATOR ? '' : $dirname; $uri = 'http://' .$_SERVER['SERVER_NAME'] . $dirname . '/○○.php'; header('HTTP/1.1 303 See Other'); header('Location: ' . $uri); } else { ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>確認フォーム</title> </head> <body> <div id="form"> <p>以下の内容でよろしければ送信ボタンを押してください。</p> <dl> <dt>お名前:</dt> <dd><?php echo h($name);?></dd> </dl> <dl> <dt>メールアドレス:</dt> <dd><?php echo h($email);?></dd> </dl> <dl> <dt>コメント:</dt> <dd><?php echo nl2br(h($comment));?></dd> </dl> <form action="thank.php" method="post"> <input type="hidden" name="ticket" value="<?php echo h($ticket);?>" /> <input type="submit" name="submit" value="送信する" /> </form> </div> </body> </html> <?php } function h($string) { return htmlspecialchars($string, ENT_QUOTES); } ?>

    • ベストアンサー
    • PHP
  • phpのエラーチェックについて質問です!

    phpのエラーチェックについて質問です! エラーチェックについてです><; if(isset($_POST['name'])){ $name = htmlspecialchars($_POST['name']); if (empty($name)) { $message = '未入力があります'; と記入してエラーメッセージを表示したい場所に記載してます。 しかし、フォームで <form action="regist2.php" name="form" method="post"> でsubmit押すとフォームが空白でもactionでregist2.phpに送られてしまいます><; エラーがなければ、そのままsubmitでaction=regist2.phpに送りたいと考えております。 なにか解決方法はないでしょうか? ご教授お願いします!!!!!!!!

    • 締切済み
    • PHP
  • 現在PHPにてsessionを使用したフォームを作成しております。

    現在PHPにてsessionを使用したフォームを作成しております。 現在、PHPは初心者で勉強中ですが悩んでいるため、ご質問させていただきます。 ソースは下記の通りです。 /* contact.php ----------------------*/ <html> <body> <form action="confirm.php" method="POST" > コメント:<br /> <?php echo $_SESSION['error_comment']; ?> <textarea name="comment"><?php echo $_SESSION['comment']; ?></textarea> <input type="hidden" name="contact" value="<?php $contact; ?>" /> <input type="submit" name="submit" value="確認" /> </form> </body> </html> /* confirm.php ----------------------*/ <?php session_start(); $comment = htmlspecialchars($_POST['comment']); if (isset($_POST["contact"])) { if (empty($comment)) { $_SESSION['error_comment'] = "コメントを入力してください!"; } if (!count($contact)) { $_SESSION["comment"] = $comment; header("Location: contact.php"); exit; } } else { $msg = '編集しました。'; } <html> <body> <?php echo $msg; ?> </body> </html> としております。 上記の内容でテストをするとcomment欄に入力されないと「コメントを入力してください!」と表示されますが、入力(テストと入力)をして確認をすると onfirm.phpのページは表示されずcontact.phpのcomment欄にテストと表示されたままです。 入力された場合はconfirm.phpを表示されせるにはどうしたらよろしいのでしょうか? お分かりの方がいらっしゃいましたら、ご教授お願いします。

    • ベストアンサー
    • PHP
  • javaでフォーム入力の確認と文字チェック

    HPのフォームに入力してもらった後、入力された文字のチェックを行い、エラーがあった場合に「○○は半角で入力して下さい」、「○○は必須項目です」などのメッセージを出したいと思っています。 とりあえずいろいろなHPを参考に、文字制限、及びエラーメッセージを出すまでは出来たのですが、必須項目のチェックをどのように追加すればいいのかがわかりません。 最初に、入力したフォームから、フォーカスが離れた時の処理 function kanacheck() { if(document.order.kana.value.match( /[^ぁ-んァ-ン \s]+/) ) { alert("ふりがなは、「ひらがな」・「カタカナ」のみで入力して下さい。"); return 1; } return 0; } 同じ様な内容で他多数項目のチェック内容が続きます。 下は、「送信」を押したときに全体をチェックする処理です。 クリックされたときに処理を実行するようにonclick属性で呼び出しをしています。 function AllCheck() { var check = 0; check += kanacheck(); if( check > 0 ) { return false; } return check; } いずれかに「必須項目の未入力チェック」を入れたいのですが、どのようにその処理を書き足せば良いでしょうか? また、上の状態でもきちんと動作するかどうか確認はできていますが、どこかおかしな部分はありませんか? java初心者でお恥ずかしい質問ですが、どうぞよろしくお願い致します。

  • フォームのチェックについて

    今、フォームの送信ボタンを押すとチェックする 関数を作成しております。 function restChar() { if(10000 < document.F1.ご質問内容.value.length) window.alert("ご質問内容は全角5,000字以内でお願いします"); } function check(){ var flag = 0; if(document.F1.name.value == ""){ // 「お名前」の入力をチェック flag = 1; } else if(document.F1.kana.value == ""){ // 「パスワード」の入力をチェック flag = 2; } else if(document.F1.mail.value == ""){ // 「コメント」の入力をチェック flag = 3; }      else if(document.F1.ご質問内容.value == ""){ // 「コメント」の入力をチェック flag = 4; } if(flag == 1){ window.alert('お名前を入力してください'); // 入力漏れがあれば警告ダイアログを表示 return false; // 送信を中止 } if(flag == 2){ window.alert('フリガナを入力してください'); // 入力漏れがあれば警告ダイアログを表示 return false; // 送信を中止 } if(flag == 3){ window.alert('メールアドレスを入力してください'); // 入力漏れがあれば警告ダイアログを表示 return false; // 送信を中止 }      if(flag == 4){ window.alert('ご質問内容を入力して下さい'); // 入力漏れがあれば警告ダイアログを表示 return false; // 送信を中止 } fOBJ = document.F1.mail.value; check = /.+@.+\..+/; if (!fOBJ.match(check)){ window.alert("メールアドレスが正しくありません"); return false; // 送信を中止 } fOBJ = document.F1.ご質問内容.value.length; if(10000 < fOBJ){ window.alert("ご質問内容は全角5,000字以内でお願いします"); return false; // 送信を中止 } return true; // 送信を実行 } こんな感じです。 1-4のチェックは問題ないのですが、 アドレスと文字数のチェックは、一度は ダイアログがでますが、連続で押すと通ってしまいます。 何がわるいのでしょうか?

    • ベストアンサー
    • Java
  • エクセルのフォームについて(エラーが出てしまう)

    エクセルでフォームを利用してデータを入力していきたいのですが、 「リストまたはデータベースを拡張することができません」というエラーが出てしまい 入力ができません。 出るときと出ないときがあるのですが、出る理由がわかりません。 なぜ出てしまうのでしょうか? どのようにしたら直せる(入力できる)のでしょうか?

  • フォームから入力される値のチェックについて

    お世話になります。PHP勉強中の初心者です。 タイトルにありますようにフォームから入力される値のチェックについてわからないことがあるので質問いたします。 私は書籍やサイトなどの例を参考にして郵便番号の入力値チェック(ハイフンなし)を if(!preg_match("/^[0-9]{7}$/",$_POST[zipcode])){ //エラーメッセージ } else{ $zipcode = $_POST[zipcode]; } のように記述しています。 この場合、POSTのデータが改ざんされたとしても数値以外は受け付けないので、これだけで「入力された値は安全」と考えて良いのでしょうか。 また、もしもこれが安全だとするなら、かなり極端な例ですが、 if(!preg_match("/^[一-龠ぁ-んァ-ヴーa-zA-Z0-9a-zA-Z0-9\s\ \¥\(\)\(\)\「\」\!\”\’\% \%\&\&\’\~\-\-\+\+\<\>\.\,\,\、\。\_\_\;\:\:\『\』\【\】\[\]\/\@\?\=\=\÷\× \・\※\■\□\★\☆\▲\△\▼\▽\◎\○\●\〒\←\→\↑\↓\…]{1,50}$/u",$_POST[str])){ //エラーメッセージ } else{ $str = $_POST[str]; } とすれば、POSTデータをそのままHTML表示したりデータベースなどに受け渡しても問題ないのでしょうか(文字コードはサイト全体でUTF-8を使用)。もしこれで安全なら、{1,50}の箇所で文字数の上限・下限も同時にチェックできるので使う場所によってはけっこう便利かなと思うのですが。。。 ひとりで学習しているので、入力チェックやエスケープなどどのようにしたら安全なのかわからず日々手探りの状態が続いています。お時間があれば皆さんがよく使う入力チェックやエスケープのやり方などもご教授いただけると幸いです。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • メールフォームについて

    HPのリニューアルに際して、form2mailを使ったフォーム部分も変更し、入力必須項目を作りたいと考えております。 ただ配布ページのFAQを見ても、バージョンが古すぎるのか(手に入れたのは約5年前です)指定されている方法を試しても、必須項目に変更されません。 具体的には、 <input type=hidden name="_indispen" value="***"> フォームのHTMLに上記のタグを書きましたが、何も変わりませんでした。 cgiの該当すると思われる部分を下記に表記致します。 どなたか分かる方がいらっしゃいましたら、ご教授願えますでしょうか。 #----------------------------------------------------------------- # 入力データの入力チェック #----------------------------------------------------------------- undef(@ERROR); foreach $chk_tag (keys %necessary_list){ if ( !defined($import{$chk_tag}) ){ # 必須データがない push(@ERROR, $necessary_list{$chk_tag}); } elsif ( length($import{$chk_tag}) < 1 ){ # 必須データの文字数0 push(@ERROR, $necessary_list{$chk_tag}); } } &error_exit('missing_field', @ERROR) if (defined(@ERROR)); #-----------------------------------------------------------------

    • ベストアンサー
    • CGI

専門家に質問してみよう