【PHP初心者】入力フォームから名前を表示するサンプル

このQ&Aのポイント
  • 入力フォームから名前を入力して送信後、その名前を表示させるサンプルコードです。
  • 名前が未入力の場合にはエラーメッセージを表示します。
  • 最初に考えた解法で使用したisset関数では、名前が未入力の場合にエラーメッセージが表示されない問題がありました。
回答を見る
  • ベストアンサー

「PHP初心者」入力フォームの件

フォームから名前を入力して 送信後、その名前を表示させ 未入力だとエラーの言葉を表示させるサンプルになります。 ------------------------------------------- <html> <body> <form action="" method="post"> <p>【お名前】<input type="text" name="name"></p> <p><input type="submit" value="送信"></p> </form> </body> </html> <?php function Aa($str){ return htmlspecialchars($str, ENT_QUOTES, "UTF-8"); } if($_POST["name"] == ""){ echo "名前を入力してください。"; }else{ $name = Aa(@$_POST["name"]); echo $name; } ?> ------------------------------------------- 上記は正しい例になりますが 最初に頭に浮かんで書いてみたのは 「isset」を使った以下の構文でした。 ------------------------------------------- if(isset($_POST["name"])){ $name = Aa(@$_POST["name"]); echo $name; }else{ echo "名前を入力してください。"; } ------------------------------------------- この構文では名前が未入力の場合でも エラーメッセージの「名前を入力してください。」が出力されず 表示されません。 (もしnameが入力されていればnameを出力。 入力されていなければechoの「名前を入力してください」を 出力という「==」と同じような解釈で 「isset」を使ってみたのですが間違いでした。 この場合「isset」はどうして使えないのでしょうか?

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

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

>「isset」は変数が存在しているかどうかの判別をすると 書いてある通り「変数」が存在しているかどうかなので 変数の中身が存在しているかどうかではありません プログラムの中で考えれば <?PHP if(isset($a)) print 1; $a=""; if(isset($a)) print 2; ?> みたいに、とにかく中身が空でも宣言がされていれば変数は存在します。 また今回のように外部からデータを送り込む場合 $_POST["name"]が空だろうがなんだろうが、フォームのポスト中に nameという要素があってそこから送られてくれば「空」でも $_POST["name"]は存在します。 中身があるかどうかはisset()ではなくempty()などでチェックしてください

okdayook
質問者

お礼

変数が存在しているのと、その中身が存在しているのかというのは 違う解釈なのですね。 issetが使われる過去の見本を再度見直して勉強します。 ありがとうございました!

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

var_dump($_POST["name"]) してみればわかりますが、長さが0の文字列がセットされている場合は issetでは「セットされている」と判断されます。 if(isset($_POST["name"]) and $_POST["name"]!==""){・・・} でチェックしてください 表記が冗長で気に入らない場合は $name=isset($_POST["name"])?$_POST["name"]:""; if($name!==""){・・・} と、一回変数に受けてもいいかもしれません

okdayook
質問者

補足

早速の回答ありがとうございます。 「isset」は変数が存在しているかどうかの判別をすると マニュアルに書いてあるのですが、 値が有るか無いかの判断ではないのでしょうか? var_dump($_POST["name"])をしてみると「string(0) ""」 になり何も値がないと表示されます。 ということでfalseになりelseのほうが実行されるのでは? と思ってしまいます。 issetを使わなければシンプルにif($_POST["name"])ですむようですが issetの使い方をはっきり知るためにも なにか具体的な解釈があればと思っています。

関連するQ&A

  • PHPの構文

    名前と年齢をフォームページから入力して 名前・年齢、そして成人・未成年の表示をするPHPのサンプルがあります。 初学者で無駄な部分が多く複雑になってしまったのですが ここをもっとこうしたほうが良いなど もっとシンプルで分かりやすい構文にできるのでしょうか? よろしくお願いいたします。 in.php ----------------------------------------------- <html> <body> <form action="out.php" method="post"> <table><tr><td>名前入力: <input type="text" name="name"></td></tr> <tr><td>年齢入力: <input type="text" name="age"></td></tr> </table> <input type="submit" value="ボタン"> </form> </body> </html> ----------------------------------------------- out.php ----------------------------------------------- <html> <body> <?php $name = htmlspecialchars($_POST["name"], ENT_QUOTES); $agen = mb_convert_kana($_POST["age"], "a"); $age = htmlspecialchars($agen, ENT_QUOTES); If($name == ""){ if($age == ""){ echo "名前、年齢の入力がありません。"; }else{ echo "名前を入力してください。"; } }else{ if($age == ""){ echo "年齢を入力してください。"; }else{ echo "あなたの名前は{$name}、年齢は{$age}です。"; if($age<20){ echo "あなたは未成年です。"; }else{ echo "あなたは成人です。"; } } } echo "<p><a href='in.php'>フォームに戻る</a>"; ?> </body> </html> -----------------------------------------------

    • ベストアンサー
    • PHP
  • PHPのシンプルな構文(初心者)

    ランダムに出る掛け算の答えを入力して 別ファイルで正解か不正解という表示をする構文なのですが 「input type="hidden"」部分の値の出力・受取りができず 正しく実行がされません。 どこが間違っているのでしょうか? よろしくお願いいたします。 in.php -------------------------------------- <?php $saki = rand(1,9); $ato = rand(1,9); echo "$saki X $ato"; $seikai = $saki*$ato; ?> <html> <body> <form method="post" action="out.php"> <input type="text" name="kotae"> <input type="hidden" name="hid" value="<?php $seikai ?>"> ←※ <input type="submit" value="回答"> </form> </body> </html> -------------------------------------- out.php -------------------------------------- <?php $kotae = $_POST["kotae"]; $seikai = $_POST["hid"];     ←※ if($kotae == $seikai){ echo "正解です"; }else{ echo "間違っています。"; } echo "<hr>正解は{$seikai}です。"; ?> --------------------------------------

    • ベストアンサー
    • PHP
  • PHPでのCookie

    PHPでクッキーを使い、下記のような入力フォームを作りました。 form.phpで入力→form2.phpで正常出力出来るのですが、 form2.phpで一度更新しないと、結果が画面に表示されません。 これをform2.phpを開いた時点で表示されるようにするには、どのように書けばいいのでしょう。 後1つあります。form.phpで 「テスト&1」と書くと「テスト」としか表示されなく、&とそれ以降が記憶されません。 これはなぜでしょうか? お願いします。 【form.php】 <?PHP parse_str($_COOKIE["city"]); parse_str($_COOKIE["city_name"]); ?> <html> <form method="post" action="form2.php"> <?PHP echo "名前1<input type=text name=name1 maxlength=16 size=12 value=$set_name1> <BR>ID<input type=text name=p1 maxlength=8 size=6 value=$set1><BR><BR>"; echo "名前2<input type=text name=name2 maxlength=16 size=12 value=$set_name2> <BR>ID<input type=text name=p2 maxlength=8 size=6 value=$set2>"; ?> <input type="submit" value="実行"> </form> </html> 【form2.php】 <?php if ($_POST) { $city1 = $_POST["p1"]; $city2 = $_POST["p2"]; $city_name1 = $_POST["name1"]; $city_name2 = $_POST["name2"]; setcookie ("city", "set1=$city1&set2=$city2",time()+3600*24*90); setcookie ("city_name", "set_name1=$city_name1&set_name2=$city_name2",time()+3600*24*90); } parse_str($_COOKIE["city"]); parse_str($_COOKIE["city_name"]); echo $set_name1; echo $set1; echo $set_name2; echo $set2; ?>

    • ベストアンサー
    • PHP
  • PHPでのクッキー

    PHPでクッキーを使い、下記のような入力フォームを作りました。 form.phpで入力→form2.phpで正常出力出来るのですが、 直接form2.phpへ飛ぶと、クッキーの値がなくなってしまいます。 setcokkieが、何の値もないのを上書きしていることは理解できるのですが、これを上書きせず回避?する方法はありますでしょうか? よろしくお願いします。 【form.php】 <?PHP parse_str($_COOKIE["city"]); parse_str($_COOKIE["city_name"]); ?> <html> <form method="post" action="form2.php"> <?PHP echo "名前1<input type=text name=name1 maxlength=16 size=12 value=$set_name1> <BR>ID<input type=text name=p1 maxlength=8 size=6 value=$set1><BR><BR>"; echo "名前2<input type=text name=name2 maxlength=16 size=12 value=$set_name2> <BR>ID<input type=text name=p2 maxlength=8 size=6 value=$set2>"; ?> <input type="submit" value="実行"> </form> </html> 【form2.php】 <?php $city1 = $_POST["p1"]; $city2 = $_POST["p2"]; $city_name1 = $_POST["name1"]; $city_name2 = $_POST["name2"]; setcookie ("city", "set1=$city1&set2=$city2",time()+3600*24*90); setcookie ("city_name", "set_name1=$city_name1&set_name2=$city_name2",time()+3600*24*90); parse_str($_COOKIE["city"]); parse_str($_COOKIE["city_name"]); echo $set_name1; echo $set1; echo $set_name2; echo $set2; ?>

    • ベストアンサー
    • PHP
  • php入力画面から確認画面へ情報の受け渡しについて

    php 参考書を見て、入力フォームを作成しているのですが、入力画面から確認表示画面へ情報の受け渡しについて。コードは下に記載してます。 最初の入力画面ではmethod=postで送信した値を$name = $_POST['name'];に格納して次ページに値を渡すそうですが、 しかし最初の入力画面のコードに$name = $_POST['name'];と、もうひとつ、$name = $_SESSION['name'];でセッションに保存して、次ページに送るそうですが、 保存したSESSIONの値は次ページの確認表示画面から戻る際に値を保持する際に使うからだそうですが、値を次ページに送る役割が$_POSTやSESSIONにあるならば、SESSIONの記述のみで 次ページに送れると思うのですが、なぜこのコードの場合、$_POSTに値を格納する必要があるのでしょうか? 以下のような解釈で正しいでしょうか?? 「$_POSTは送られた値をフォームのvalue内にechoで出力するため、SESSIONはページから戻る場合に値を保持するため」 回答よろしくお願いいたします。 コード 入力初期画面 <?php session_start(); $errors = array(); if(isset($_POST['submit'])){ $name = $_POST['name']; if($name === ""){ $errors['name'] = "お名前が入力されていません。"; } if(count($errors) ===0){ $_SESSION['name'] = $name; header('Location:https:次ページへform2.php'); exit(); } } ?> <body> <form action="form1.php" method="post"> お名前 <input type="text" name="name" value="<?php if(isset($name)){echo $name;}?>"> <input type="submit" name="submit" value="確認画面へ"> </body> コード 確認表示画面 <?php session_start(); if(isset($_SESSION['name'])){ $name = $_SESSION['name']; } <body> <form action="form3.php" method="post"> お名前 <?php echo $name;?> <input type="submit" name="submit" value="送信する"> p><a href="form1.php?action=edit">入力画面へ戻る</a></p> </body>

    • ベストアンサー
    • PHP
  • フォームの入力チェック処理について

    確認ボタンを押しエラーがあればエラーメッセージを出力し なければ確認画面に移りたいと考えているのですがうまくいきません。 具体的には 1:入力フォームを表示 2-1:送信ボタンを押しエラーがあればメッセージ出力 2-2:送信ボタンを押しエラーがなければhiddenのname="mode" value="confirm"を渡す hiddenの値はswitchのcase文の値でconfirmで確認画面を表示します。 入力フォームを表示する段階にてhiddenを渡しているのが原因なのは わかるのですがエラーチェックを通す際の構文がわかりません・・・ また、hiddenを消すとエラーチェックが通るのですが例えば名前を入力 しメールを入力しない状態で 送信ボタンを押すとメールの入力を促すエラーメッセージが表示され名前の入力も消えてしまいます。 これは回避できるのでしょか? 見づらいかと思うのですが下記のソースです。宜しくお願い致します。 function input() { if(isset($_POST{"submit"})) { if (empty($_POST["name"])) { $error_message[] = "お名前を入力して下さい。"; } if (empty($_POST["email"])) { $error_message[] = "メールアドレスを入力して下さい。"; }if (count($error_message)) { echo "<p style=\"color: #ff0000\">入力内容にエラーがあります。</p>\n"; foreach ($error_message as $message) { echo "<p style=\"color: #ff0000\">" . "・$message" . "</p>\n"; } } } echo "<form method=\"post\" action=\"" . $_SERVER['PHP_SELF'] . "\">\n"; echo "<table border=\"1\">\n"; echo "<tr>\n"; echo "<td>お名前</td>\n"; echo "<td><input type=\"text\" name=\"name\" size=\"20\"></td>\n"; echo "</tr>\n"; echo "<tr>\n"; echo "<td>メールアドレス</td>\n"; echo "<td><input type=\"text\" name=\"email\" size=\"20\"></td>\n"; echo "</tr>\n"; echo "<tr>\n"; echo "<td>メッセージ</td>\n"; echo "<td><textarea name=\"msg\" rows=\"5\" cols=\"40\"></textarea></td>\n"; echo "</tr>\n"; echo "<tr>\n"; echo "<td colspan=\"2\"><input type=\"submit\" name=\"submit\" value=\"内容を確認\"></td>\n"; echo "</tr>\n"; echo "</table>\n"; echo "<input type=\"hidden\" name=\"mode\" value=\"confirm\" />\n"; echo "</form>\n"; }

    • 締切済み
    • PHP
  • シンプルなPHPのフォームテスト

    ランダムにでた計算の答えの値を フォームによって送信して正解か間違っているかを表示する PHPプログラムを考えてみたのですが上手くいきません。 in.php ------------------------------------------ <html> <body> <?php $saki = rand(1,9); $ato = rand(1,9); echo "計算:{$saki}X{$ato}="; $seikai = $saki*$ato; echo '<form action="out.php" method="post">'; echo '<input type="text" name="kotae">'; echo '<input type="hidden" name="hidden" value="$seikai">'; echo '<input type="submit" value="回答"></form>'; ?> </body> </html> ------------------------------------------ out.php ------------------------------------------ <html> <body> <?php $kotae = $_POST["kotae"]; $seikai = $_POST["hidden"]; if($kotae == $seikai){ echo "正解です"; }else{ echo "間違いです"; } ?> </body> </html> ------------------------------------------ in.phpファイルのインプットタグhiddenの所と out.phpファイルでの$_POST["hidden"]の受け取り部分が 間違っているのだと思いますが 正しくはどのようにしたらいいのでしょうか? もっとシンプルで分かりやすい書き方もあれば お教えください。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 現在PHPの勉強をしています。初心者のためご教授いただければと思います

    現在PHPの勉強をしています。初心者のためご教授いただければと思います。 メールフォームを作成しており、エラーチェックで困っています。 簡単に流れを説明しますとフォーム画面で入力をしてもらったら確認画面へと移行します。 ここでエラーがあった場合、confirm.phpにてエラーチェックをし、form.phpに戻り、エラーがなければ確認画面にて入力した、項目が表示されるようにしたいと思っています。 ソースは下記のとおりになります。 form.php ---------------------- */ <html> <body> <form action="confirm.php" method="post"> 名前:<input type="text" name="name" value="" /<?php echo $errmsg['name'] ;?><br> 内容:<textarea name="comment" rows="5" cols="40"></textarea><?php echo $errmsg['comment'] ;?><br> <input type="hidden" name="contact" value="form" /> <input type="submit" name="submit" value="確認" /> </form> </body> </html> confirm.php ---------------------- */ <?php $name = $_POST['name']; $comment = $_POST['comment']; if(isset ($_POST['contact'])) { $errmsg = array(); if(empty($name)){ $errmsg['name'] = '未入力'; } if(empty($comment)){ $errmsg['comment'] = '未入力'; } if (count($errmsg) != 0) { header("Location: index.php"); exit; } } ?> <html> <body> 名前:<?php echo $name; ?><br /> 内容:<?php echo $comment; ?><br /> </body> </html> としております。 if (count($errmsg) != 0) { header("Location: form.php"); exit; 上記のようにするとエラーチェックの表示がされません。 require(form.php);にするとform.phpが表示されるのですがURLを見るとconfirm.phpの状態になっております。 header("Location: form.php");を使用してのエラーチェックをしたいのですが、どのように記述したらよろしいのでしょうか? 上記の内容でどなたかご教授いただけないでしょうか? 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • php $_SESSIONで値が消える。

    いつもお世話になり誠にありがとうございます。 標記の件。 インプット画面ー>確認画面ー>戻るー>インプット画面 インプット画面に戻った時、どうしても最初のインプット画面で打った内容が消えてしまいます。 プログラムを診て、誤りを指摘して頂けないでしょうか? どうぞよろしくお願い致します。           記 <?php session_start(); $mode = 'input'; if( isset($_POST['back']) && $_POST['back'] ){ //何もしない } else if( isset($_POST['confirm']) && $_POST['confirm'] ){ $_SESSION['name'] = $_POST['name']; $_SESSION['email'] = $_POST['email']; $_SESSION['category']= $_POST['category']; $_SESSION['message'] = $_POST['message']; $mode = 'confirm'; } else if( isset($_POST['send']) && $_POST['send'] ){ $mode = 'send'; } else { $_SESSION['name'] =""; $_SESSION['email'] =""; $_SESSION['category']=""; $_SESSION['message'] =""; } ?> <!DOCTYPE html> <html lang="ja"> <head> </head> <body> <div class="v_line_fix"> <h1>Blog K・T</h1> <h2><a href="index.html">トップページ</a></h2> <?php if( $mode=='input'){ ?> <form method=post> お名前(ニックネーム)<br> <input type="text" name="name" value="<?php echo $_SESSION['name'] ?>"><br> Eメール<br> <input type="email" name="email" value="<?php echo $_SESSION['email'] ?>"><br> カテゴリー<br> <input type="text" name="category" value="<?php echo $_SESSION['category'] ?>"><br> 本文<br> <textarea style="font-size:1.5em;" cols="30" rows="80" name="message"><?php echo $_SESSION['message'] ?></textarea><br> <input type="submit" name="confirm" value="確認" /> </form> <?php }else if( $mode=='confirm'){ ?> <!--確認画面--> <form method="post"> <?php echo $_SESSION['name']?><br> <?php echo $_SESSION['email']?><br> <?php echo $_SESSION['category']?><br> <br> <?php echo nl2br($_SESSION['message'])?><br> <input type="submit" name="back" value="戻る"/> <input type="submit" name="send" value="送信"/> } </form> <?php } else { ?> <!--完了画面--> <?php } ?> </body> </html>

    • ベストアンサー
    • PHP
  • メールフォームにある必須入力について

    こんばんは、今メールフォームを作っています。入力画面→確認画面→完了ページという流れで作ったのですがよく必須項目に何も入れなかったり、間違った文字をいれたりするとエラーページが表示されるようにしたいと思っているのですが、なかなか上手くできません。下記のスクリプトからだとどうやってやったら良いのでしょうか?よろしくおねがいします。 <?php if (! isset($_POST[btn1]) and! isset($_POST[btn2]) and! isset($_POST[cancel])) { //入力画面 $body = "必要な項目を入力して[OK]ボタンをクリックしてください。 <FORM action='$_SERVER[PHP_SELF]' method='POST'> 名前:<INPUT size='40' type='text' name='name'><BR><BR> フリガナ:<INPUT size='40' type='text' name='kana'><BR><BR> 電話番号:<INPUT size='40' type='text' name='tel'><BR><BR> E-Mailアドレス:<INPUT size='40' type='text' name='email'><BR><BR> お問い合わせ内容:<BR><TEXTAREA rows='6' cols='40' name='inquiry'></TEXTAREA><BR><BR> <INPUT type='submit' name='btn1' value=' OK '> </FORM>"; } elseif (isset($_POST[btn1])) { //入力画面で[OK]がクリックされたとき $name = htmlspecialchars(stripcslashes($_POST[name])); $kana = htmlspecialchars(stripcslashes($_POST[kana])); $tel = htmlspecialchars(stripcslashes($_POST[tel])); $email = htmlspecialchars(stripcslashes($_POST[email])); $inquiry = htmlspecialchars(stripcslashes($_POST[inquiry])); $body = "ご入力した内容でメッセージを送信します。<BR> よろしければ[送信]ボタンをクリックしてください。 <FORM action='$_SERVER[PHP_SELF]' method='POST'> 名前:$name<BR><BR> フリガナ:$kana<BR><BR> 電話番号:$tel<BR><BR> E-Mailアドレス:$email<BR><BR> お問い合わせ内容:<BR>" . nl2br($inquiry) . "<BR><BR> <INPUT type='submit' name='btn2' value=' 送信 '> <INPUT type='submit' name='cancel' value='キャンセル'> <INPUT type='hidden' name='name' value=\"$name\"> <INPUT type='hidden' name='kana' value=\"$kana\"> <INPUT type='hidden' name='tel' value=\"$tel\"> <INPUT type='hidden' name='email' value=\"$email\"> <INPUT type='hidden' name='inquiry' value=\"$inquiry\"> </FORM>"; } elseif (isset($_POST[btn2])) { //確認画面で[送信]がクリックされたとき //メールの送信処理を行う $name = stripcslashes($_POST[name]); $kana = stripcslashes($_POST[kana]); $tel = stripcslashes($_POST[tel]); $email = stripcslashes($_POST[email]); $inquiry = stripcslashes($_POST[inquiry]); $mailto = "kuma202000@yahoo.co.jp"; $mailsbj = "メールフォームからの送信"; $mailbody = "$name さんからのメールが届きました。\n" . "---------------------------------------------\n" . "名前:$name \n" . "フリガナ:$kana \n" . "電話番号:$tel \n" . "E-Mailアドレス:$email \n" . "メッセージ:$inquiry \n" . "---------------------------------------------\n"; mb_language("ja"); if (mb_send_mail($mailto, $mailsbj, $mailbody, $mailheader)) { $body = "メールを送信しました。ありがとうございました。<BR><BR>"; } else { $body = "メールの送信に失敗しました。<BR><BR>"; } $body .= "<A href='$_SERVER[PHP_SELF]'>戻る</A>"; } elseif (isset($_POST[cancel])) { //確認画面で[キャンセル]がクリックされたとき header("location: $_SERVER[PHP_SELF]"); exit(); } ?> <HTML> <HEAD> </HEAD> <BODY> <?=$body?> </BODY> </HTML>

    • 締切済み
    • PHP

専門家に質問してみよう