• ベストアンサー

セッション変数に対するエラー表示

こんにちは。いつもお世話になっています shingetsuです。 PHPをただいま勉強中で、わからないことがあったので質問させていただきます。よろしくお願いします。 現在自分でサイトを作っているのですが、ユーザー登録フォームに空欄があった場合空欄があります、というようなエラーを表示させたいのですが、その表示方法がよくわかりません。 <?php //入力されたデータを読み取る $_SESSION['name'] = $_POST['name']; $_SESSION['passwd'] = $_POST['passwd']; $_SESSION['address'] = $_POST['address']; $_SESSION['tel'] = $_POST['tel']; $_SESSION['email'] = $_POST['email']; このように読み取ってから、ここでif文を使ってエラーを表示させればいいのでしょうか?それとももっと簡単な方法がありますでしょうか?PHPの本を読んでみましたが載ってなく、ネット検索してみようにも検索方法がよくわからないのでヒントやアドバイスをよろしければ教えてください。お願いします

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

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

  • ベストアンサー
  • cybert
  • ベストアンサー率56% (18/32)
回答No.2

amountainblastさんの改造版です。 >後は何回も同じような分を書くのがめんどくさければこれをfroeachで処理をすれば~ isset()を使わなくても、 if(!$_POST['name']){ //エラー処理 } でNULLか否かを判定できます。 また項目別にエラー表示を出さなくても良いのなら if(!$_POST['name'] AND !$_POST['passwd'] AND !$_POST['address'] AND 。。。){} これでも良いかも。長くなりますね。。。

shingetsu
質問者

補足

ご回答ありがとうございます! このような方法もあるのですね、勉強になります。 現在はこのエラーを表示するページをつくり、そこへのリンクがうまくいかないので四苦八苦しておりますが、空欄か否かの判定はできたと思います。ありがとうございます。

その他の回答 (4)

回答No.5

こんにちは。 PHPページにフォームからのリンクがちゃんと出来ていないと言う事でしょうか? 登録フォームが指定されているとのことですので、HTMLを直接さわれるのかわかりませんが、もしさわれるのでしたら、フォームのページのところに <form name="XXX" method="post" action="XXX"> みたいな感じになっているところがないですか? あれば、ここのaction="XXX"のXXXのところに リンク先のURLを指定してください。

shingetsu
質問者

お礼

ええと、送ったデータがきちんと送れないのか、リンクがおかしかったのかわからない状態だったので追加で質問した次第です。無事改善したのでよかったです。回答ありがとうございました!

  • cybert
  • ベストアンサー率56% (18/32)
回答No.4

No.3の回答者のcybertです。 回答に誤りがありました。 index.htmlをエラーページにと書き込んでおきながら コードに書いてなかったですね。間違えました。 正しくは以下のようになります。 header("Location: http://hoge.com/index.html"); exit;

shingetsu
質問者

お礼

なるほど。ありがとうございます。 みなさんに教えていただいた内容をいろいろ試してみて、利用したいと思います。 ありがとうございました。

  • cybert
  • ベストアンサー率56% (18/32)
回答No.3

ついでにー >現在はこのエラーを表示するページをつくり、そこへのリンクがうまくいかないので四苦八苦~ header("Location: http://hoge.hoge"); exit; でうまくいきませんか?index.html部分をエラーページに書き換えて。 ※ジャンプ先は絶対パスで。 ※ヘッダーを出力するので、headerの前に何も出力してはいけません。 悪い例(headerの前に<html>が出力されてる。) <html> <?PHP header("Location: http://hoge.hoge"); exit;

shingetsu
質問者

補足

2度も回答ありがとうございます。 説明しただいたのですが、いまいち理解できないです; >>index.html部分をエラーページに書き換えて とありますが、index.htmlとはどの部分を指しているのでしょうか? 私の場合、index.htmlはユーザ登録ページと商品ページへのリンクがあるTOPページなのですが・・その部分をエラーページにすることになってしまうので、よろしければその部分を教えていただけないでしょうか。

回答No.1

POSTでデータを取得するときにデータがあるか無いかで処理をしたらいいかと思います。 nameですと if(!isset($_POST['name'])){ $_SESSION['name'] = $_POST['name']; } else { print("必須項目に空欄があります"); } (試していないので、スペル等にミスがあるかもしれません。) みたいな感じですかね。 isset関数は変数に値が格納されているかどうかでTRUEかFOLSE(?)を返すのでこんな場合には結構便利だと思います。 後は何回も同じような分を書くのがめんどくさければこれをfroeachで処理をすればOK牧場ですかね!! お粗末ながら・・・

shingetsu
質問者

補足

お早い回答ありがとうございます! さらにお聞きしたいのですが、あまりにも初歩的なことかもしれませんが、よろしければ教えていただきたいです。 HTMLでユーザー登録フォームを書いているのですがこの登録フォームは指定されたものを変えて利用しています。 <TD><INPUT TYPE="submit" VALUE="送信"><INPUT TYPE="reset" VALUE="クリア"></TD> ここからif(!isset($_POST['name'])){ $_SESSION['name'] = $_POST['name']; } else { print("必須項目に空欄があります"); } を表示させるために新しいPHPページを作ったのですがそのページへのリンクがうまくいかず、表示されませんでした。リンクさせるにはどの部分に書き込めばよろしいのでしょうか?

関連するQ&A

  • SESSIONを使ったログイン画面

    今、ログイン画面を作っているのですが、 $sql="select name from users where email='$email' and passwd='$passwd'"; $_SESSION["name"]=$name; 上記のように行い、 こんにちは<?= $_SESSION["name"]?>さん と表示したいのですが、どうしても name が表示されません DBから読み取ったメールアドレスとパスワードに合った名前を読み取るものにしたいのですが、どのようにしたらいいでしょうか。

    • 締切済み
    • PHP
  • PHPについて教えてください。

    こんにちは。いつもお世話になります。shingetsuです。先日もPHPについて質問させていただいたのですが、また別のことで行き詰ったのでよろしければアドバイスをいただければと思います。よろしくお願いします。 if(!$_POST['name'] OR !$_POST['passwd'] OR !$_POST['address'] OR !$_POST['tel'] OR !$_POST['email']){ echo ("空欄があります。すべて記入して下さい。"); }else{ echo ("登録ありがとうございます。"); } というプログラムで、「登録ありがとうございます。」という箇所を別のPHPに誘導できるリンクにしたいのですが、どのような方法がありますでしょうか。 HTMLを使えば可能なわけですが、PHPとなるとどうなるのかわからなくなりました。簡単なヒントなどでもよろしいので教えてください。お願いします。

    • ベストアンサー
    • PHP
  • $_SESSIONの取りだし方、使い方PHP

    質問失礼いたします。 【1.html】から【A.php】に$_POSTされた値を、$_SESSIONにて下記の通りに格納しています。 $name = $_POST['name']; $_SESSION['name'] = $_POST['name']; $address = $_POST['address']; $_SESSION['address'] = $_POST['address']; $gender = $_POST['gender']; $_SESSION['gender'] = $_POST['gender']; そして、上記の$_POSTされた値を使って、データを検索し20件ずつ表示させて改ページを行っています。 <?php if ($page > 1) { ?> <li><a href="search2.php?page=<?php print($page - 1); ?>">前のページへ</a></li> <?php } else { ?> <li>前のページへ</li> <?php } ?> <?php if ($page < $maxPage) { ?> <li><a href="search2.php?page=<?php print($page + 1); ?>">次のページへ</a></li> <?php } else { ?> <li>次のページへ</li> <?php } ?> 違うかもしれませんが、 アドレスに  &name=○&address=○&gender=○  という風にして、次のページではアドレスにある値を使う みたいなこととは思うのですが、   &name=<?php print($name; ?> とすると、アドレスでは  &name=Array となってしまいます。 セッションに格納した検索条件を次のページにも使うようにはどのようにすればよいのでしょうか。 また、上記の次ページのアドレスに、  &name=○&address=○&gender=○  と表示しないようなやり方もあるのでしょうか?

    • ベストアンサー
    • PHP
  • エラーの意味

    $con=mysql_connect(localhost,***,***); mysql_select_db("shopdb"); $passwd=mysql_real_escape_string($_POST['passwd']); $email=mysql_real_escape_string($_POST['email']); $name=mysql_real_escape_string($_POST['name']); $sql="select * from users where email={$email} and passwd={$passwd}"; $_SESSION['name']=$name; $rs=mysql_query($sql); if(mysql_num_rows($rs)>0){ $_session['login']=1; header("localhost:". "top.php"); exit; } を入力したら Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource が出てしまいました・・・ なんのエラーでしょうか?

    • ベストアンサー
    • PHP
  • ログイン認証で

    ログイン認証で <? session_start(); $con=mysql_connect(localhost,***,***); mysql_select_db("***"); $passwd=addslashes($_POST['passwd']); $email=addslashes($_POST['email']); $name=addslashes($_POST['name']); $sql="select * from users where email='{$_POST['email']}' and passwd='{$_POST['passwd']}'"; $_session['name']=$name; $rs=mysql_query($sql); if(mysql_num_rows($rs)>0){ $_session['login']=1; header('location:'. "top.php"); exit; } mysql_close($con); ?> <html> <head> <title> </title> </head> 認証失敗 <br> <a href="login.php"> 戻る</a> <body> と入力したのですが、 emailとpasswdに合ったnameを違うページに表示したいのに、それができないんです・・・ ようこそ<? $_SESSION['name']?> さん<br> どこかおかしなところありますか?

    • ベストアンサー
    • PHP
  • HTMLとPHP

    こんにちは。いつもお世話になっています。 PHPとHTMLを勉強していてわからないことがあったのでよろしければ教えてください。 POSTでデータを取得するときにデータがあるか無いか判定してから、項目すべてに記入してあれば登録確認ページへ、空欄があればエラーページへいくようなサイトをつくったのですが、確認ページでデータが表示されませんでした。 if(!$_POST['name'] OR !$_POST['passwd'] OR !$_POST['address'] OR !$_POST['tel'] OR !$_POST['email']){ echo ("空欄があります。すべて記入して下さい。"); }else{ header("Location: http://localhost/my/myshop/confirm_user.php"); } エラー表示ページ(error.php)でこのように判定し、空欄がなければエラーページから確認ページ(confirm_user.php)へいくようにしました。 登録フォーム(input.php)で<FORM ACTION="error.php","confirm_user.php" METHOD="post"> としたのですが、2つの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
  • お問い合わせフォーム sessionについて

    自分でお問い合わせフォームを作ってみようと思い、 PHPでちょこちょこと色々なサイトを参考に作成してみています。 なかなか進まず、今つまずいているのが、sessionです。 お問い合わせを書き込んだ画面から確認画面に移行したいのですが、 移行した後の入力情報がうまく表示できません。 <?php session_start(); $check = 1; $em = ""; $name = $_POST["name"]; $mail = $_POST["mail"]; $tel = $_POST["tel"]; $naiyo = $_POST["naiyo"]; //エラーチェック if ($name == "") { $check = 0; $em = "<li>お名前をご記入ください。</li>"; } if ($mail == "" && $tel == "") { $check = 0; $em .= "<li>メールアドレスまたは、電話番号をご記入ください。</li>"; } if ($mail != "") { if (!ereg("[a-zA-Z0-9_.¥-]+@[a-zA-Z0-9_.¥-]+", $mail)) { $check = 0; $em .= "<li>メールアドレスをお確かめください。</li>"; } } if ($naiyo == "") { $check = 0; $em .= "<li>お問い合わせ内容をご記入ください。</li>"; } if (!$check) { $em = "<ul>".$em."</ul>"; } else { $_SESSION["name"] = $name; $_SESSION["mail"] = $mail; $_SESSION["tel"] = tel; $_SESSION["naiyo"]= naiyo; header("Location: confirm.php"); } ?> 確認ページ <?php session_start(); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML> <HEAD> <META name="GENERATOR" content="IBM WebSphere Studio Homepage Builder Version 10.0.0.0 for Windows"> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <META http-equiv="Content-Style-Type" content="text/css"> <TITLE></TITLE> </HEAD> <BODY> 名前 <?php echo($_SESSION["name"]); ?><br> メールアドレス<?php echo($_SESSION["mail"]); ?><br> </BODY> </HTML> 全くの初心者ですので根本的に分かっておらず、教えがいがないかも 知れませんが...。すみません。よろしくお願いします。

    • ベストアンサー
    • PHP
  • プログラムの挙動が・・・

    orderform1.php→orderform2.php(form action="confirm_form2.php")→orderform3.php→complete.phpという流れの、ショッピングカート的なものを作っています。 そこで問題が起こっているのですが、 1,orderform2.php→orderform3.phpに遷移する時、入力したはずの$_SESSION['family']が表示されない。(同じ手順を踏んでいる他の$_SESSION['']は表示される) 2,orderform3.phpはいわゆる確認ページなのですが、そのページのリンクからorderform1.phpに戻り、手順に従って再びorderform2.phpにアクセスすると内容が表示されない(orderform3.phpからorderform2.phpに戻った場合は表示される) 3,テキストボックスの内容はsessionで表示させられるが、オプションボタン・チェックボックス・プルダウンメニューを入力時の状態に保持することができない(分からない) 1は恐らく、orderform2.phpかconfirm_form2.phpどちらかが原因だと思うのですが・・・ ▼confirm_form2.php session_start(); $_SESSION['error']=""; $family=$_POST['family']; $name=$_POST['name']; $huri_fami=$_POST['huri_fami']; $huri_fir=$_POST['huri_fir']; $zip=$_POST['zip']; $pref=$_POST['pref']; $add1=$_POST['add1']; $add2=$_POST['add2']; if($_POST['add3']==""){ $add3=""; }else{ $add3=$_POST['add3']; } $tel=$_POST['tel']; $email=$_POST['email']; $time=$_POST['time']; if(isset($family)){ $_SESSION['family']=$family; } if(isset($name)){ $_SESSION['name']=$name; } if(isset($huri_fami)){ $_SESSION['furi_fami']=$huri_fami; } if(isset($huri_fir)){ $_SESSION['huri_fir']=$huri_fir; } if(isset($zip)){ $_SESSION['zip']=$zip; } if(isset($pref)){ $_SESSION['pref']=$pref; } if(isset($add1)){ $_SESSION['add1']=$add1; } if(isset($add2)){ $_SESSION['add2']=$add2; } if(isset($add3)){ $_SESSION['add3']=$add3; } if(isset($tel)){ $_SESSION['tel']=$tel; } if(isset($email)){ $_SESSION['email']=$email; } if(isset($time)){ $_SESSION['time']=$time; } if($_SESSION['family']=="" && $_SESSION['name']==""){ $error.= "名字、名前が入力されていません。<br>"; }else if($_SESSION['family']==""){ $error.= "名字が入力されていません。<br>"; }else if($_SESSION['name']==""){ $error.= "名前が入力されていません。<br>"; } if($_SESSION['huri_fami']=="" && $_SESSION['huri_fir']==""){ $error.= "名字、名前のフリガナが入力されていません。<br>"; }else if($_SESSION['huri_fami']==""){ $error.= "名字のフリガナが入力されていません。<br>"; }else if($_SESSION['huri_fir']==""){ $error.= "名前のフリガナが入力されていません。<br>"; } if(!eregi('[0-9][0-9][0-9]-?[0-9][0-9][0-9][0-9]', $_SESSION['zip'])){ $error.= "郵便番号が正しく入力されていません。<br>"; } if($_SESSION['add1']==""){ $error.= "市区町村が入力されていません。<br>"; } if($_SESSION['add2']==""){ $error.= "番地が入力されていません。<br>"; } if($_SESSION['pref']==""){ $error.= "都道府県が選択されていません。<br>"; } if(!eregi('[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]', $_SESSION['tel'])){ $error.= "電話番号が正しく入力されていません。<br>"; } if(!eregi('[a-z0-9._\-]+', $_SESSION['email'])){ $error.= "メールアドレスが正しく入力されていません。<br>"; } if($_SESSION['time']==""){ $error.= "時間帯指定が選択されていません。<br>"; } if(isset($_SESSION['error'])){ $_SESSION['error']=""; $_SESSION['error']=$error; }else{ $_SESSION['error']=$error; } header("Location: orderform2.php"); if(!$family=="" && !$name=="" && !$huri_fami=="" && !$huri_fir=="" && !$zip=="" && !$pref=="" && !$add1=="" && !$add2=="" && !$tel=="" && !$email=="" && !$time==""){ header("Location: orderform3.php"); }  長くて申し訳ないですが、少しでも分かる方、どなたか知恵をお貸しください。  他のPHPのソースは載せきれないので、補足要求があれば載せます。

    • 締切済み
    • PHP
  • ローカル環境で動くのに本番環境で動かない(セッション変数が渡せず)

    以下は、 (1) テキストフォームに記入された値をPOSTすると (2) 文字列はSESSION変数としてセットされてpage2に遷移し (3) page2 に書き出される というものですが、 ローカルのWInXP(SP3)+IIS+PHP5.2.6では動作するプログラムが 今般レンタルしたサーバー上で(FreeBSD+Apache1.3.37+PHP5.2.2) では動作しません。 具体的には、page2.phpに遷移できずに Warning: Cannot modify header information - headers already sent by (output started at /usr/home/myaccountname/public_html/page1.php:7) in /usr/home/myaccountname/public_html/page1.php on line 14 となります。 ちなみに、page1.phpの<?php $_SERVER["PHP_SELF"] ?>を page1.phpに書き換えても改善ありませんでした。 ローカルで動いていたものがそのまま動作するとも思っていませんが、 見直すべき設定項目として、何がありますでしょうか? ---------------------------page1.php <?php session_cache_limiter('none'); session_start(); ?> <html> <body> <form method="post" action="<?php $_SERVER["PHP_SELF"] ?>"> <input type="text" name="email"> <input type="submit" name="reg"> </form> <?php if ($_POST['email'] != "") { $_SESSION["email"] = $_POST["email"]; header("Location: page2.php"); } ?> </body> </html> ---------------------------page2.php <?php session_cache_limiter('none'); session_start(); ?> <html><body> <?php echo $_SESSION["email"]; ?> </body></html>

    • ベストアンサー
    • PHP

専門家に質問してみよう