• 締切済み

プログラムの挙動が・・・

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のソースは載せきれないので、補足要求があれば載せます。

  • rusya
  • お礼率56% (167/295)
  • PHP
  • 回答数1
  • ありがとう数2

みんなの回答

  • maura
  • ベストアンサー率46% (48/104)
回答No.1

SESSIONの問題でなく HTMLとの受け取りである$_POST['family']; が値を取得できているか?  出来てなければ、なぜ出来ないかを考えてください。

rusya
質問者

補足

 回答ありがとうございます。  問題は$_POST['huri_fami']なのですが(上の説明だとfamilyになってますね・・・)該当する関係箇所を抜き出すと現在以下のような流れになっています。 $huri_fami=$_POST['huri_fami']; if(isset($huri_fami)){ $_SESSION['huri_fami']=$huri_fami; } if(!$_SESSION['huri_fami']==""){ header("Location: next.php"); } このソースだとnext.phpにジャンプできないのですが、最後のif文の条件を(!$huri_fami=="")にすると条件が成立してnext.phpにジャンプするので、少なくとも$huri_famiには値があると思うのですが・・・。

関連するQ&A

  • このプログラムの改善点を教えてください!

    このプログラムの改善点を教えてください! <?php print ログインID: $name = $_POST[ID]; echo $name; ?> <br/> <?php print ニックネーム: $name = $_POST[name]; echo $name; ?> <br/> <?php print パスワード: $name = $_POST[password]; echo $name; ?> <br/> <?php if(isset($_POST[sex]) && ($_POST[sex] == 男性 || $_POST[sex] == 女性)){ print 性別: print $_POST[sex]; ?> <br/> <?php if($_POST[blood type]<>){ print 血液型: print $_POST[blood type]; ?> <br/> <?php print 生年月日; print 年; $name = $_POST[year]; ?> <?php print 月; $name = $_POST[month]; echo $name; ?> <?php print 日; $name = $_POST[day]; echo $name; ?> <br/> <?php print メールアドレス(PC); $name = $_POST[address1]; echo $name; ?> <br/> <?php print メールアドレス(携帯); $name = $_POST[address2]; echo $name; ?> <br/> <?php print 郵便番号; $name = $_POST[zip code]; echo $name: ?> <br/> <?php if($_POST[prefecture]<>){ print 都道府県; print $_POST[prefecture]; } ?> <?php print 住所; $name = $_POST[text]; echo $name; ?> <br/> <?php if(isset($_POST[fhobby])){ $fhobby = implode('と',$_POST[fhobby]); print 趣味; } ?> <br/> 早めの回答と詳しい解説をお願いします><

  • ブラウザ終了時にセッションを削除する方法

    ログイン入力画面を作成し、以下の動作を確認しています。 (1)正常にログインしてブラウザを終了する。 (2)再びブラウザを起動してログイン後の画面を表示する。 (3)セッションがないため自動的にログイン入力画面へ移動する。 IEだとセッションが消えてログイン入力画面へ移動しますが、 Firefoxではセッションが消えず、ログイン入力画面へ移動しません。 Firefoxでもブラウザ終了後にセッションを消す方法はないでしょうか? 下記のプログラムで確認しました。 -------------------------------------------------------------------- login.php <?php session_start(); $error_message = ""; if(isset($_POST["login"])){ if($_POST["member_name"] == "php" && $_POST["pass"] == "pass"){ $_SESSION["login_name"] = $_POST["member_name"]; $login_url = "http://{$_SERVER["HTTP_HOST"]}/admin/anq_result.php"; header("Location: {$login_url}"); exit; } $error_message = "メンバー名かパスワードが間違ってます。"; } ?> <html> <body> <?php if($error_message){ print '<font color="red">'. $error_message. '</font>'; } ?> <form name="form1" method="post" action="login.php"> <p>メンバー名 <input type="text" name="member_name" value=""> <br> パスワード <input type="password" name="pass" value=""> <br> <input type="submit" name="login" value="ログイン"> </p> </form> </body> </html> ------------------------------------------------------------------------------------------------------------------------- anq_result.php <?php session_start(); if (!isset($_COOKIE["member_name"])) { unset($_SESSION["login_name"]); } if (!isset($_SESSION{"login_name"})) { $no_login_url = "http://{$_SERVER["HTTP_HOST"]}/admin/login.php"; header("Location: {$no_login_url}"); exit; } else { print "ログイン成功です。"; } ?>

    • ベストアンサー
    • 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
  • php ファイルの書き込み読みだし

    htmlフォームから回答 phpで処理計算しlog.csvに保存、log.csvファイルを読みだしその結果をブラウザに表示するスクリプトを書いておりますが、log.csvファイルを読みだして結果を表示の部分が調べてもできなくて困っております。どなたか知恵を貸してほしいです。批判や中傷などは書かないでください。 <HTML> <HEAD> <TITLE>テキスト送信のテスト></TITLE> </HEAD> <FORM name="toi_5.html"method="post" action="toi5.php"> <Div Align="center">名前:<BR> <INPUT type="text"name="onamae"> <BR> 性別:<BR> <INPUT type="radio"name="gender" value="男">男<BR> <INPUT type="radio"name="gender" value="女">女<BR> <BR> <SELECT name="syokugyou"> <OPTION value""selectd>職業をえらんでください</OPTION> <OPTION value"学生">学生</OPTION> <OPTION value"会社員">会社員</OPTION> <OPTION value"公務員">公務員</OPTION> <OPTION value"自営業">自営業</OPTION> <OPTION value"その他">その他</OPTION> </SELECT><BR> <p></p> 満足度を答えてください:<BR> <INPUT type="checkbox" name="hobby[]" value="満足"> 満足<BR> <INPUT type="checkbox" name="hobby[]" value="やや満足"> やや満足<BR> <INPUT type="checkbox" name="hobby[]" value="普通"> 普通<BR> <INPUT type="checkbox" name="hobby[]" value="やや不満"> やや不満<BR> <INPUT type="checkbox" name="hobby[]" value="不満"> 不満<BR> <BR> <INPUT type="submit" value="回答"> </div> </FORM> </BOBY> </HTML> <HTML> <HEAD> <TITLE>PHPのテスト</TITLE> </HEAD> <BOBY> <p> <Div Align="center">名前</p> <?php print $_POST["onamae"]; ?> <p> <?php if(isset($_POST["gender"])&&($_POST["gender"]=="男"|| $_POST["gender"]=="女")){ print"性別:<BR>"; print $_POST["gender"]; }else{ print"性別を選んでください。<BR>"; } ?> <?php session_start(); if (isset($_SESSION["gender"])) { $_SESSION["gender"]++; print($_SESSION["gender"]."回目"); } else { $_SESSION["gender"] = 0; } ?> <p> </p> <?php if($_POST["syokugyou"]<>""){ print"職業:<BR>"; print$_POST["syokugyou"]; }else{ print"職業をえらんでください<BR>"; } ?> <?php if (isset($_SESSION["syokugyou"])) { $_SESSION["syokugyou"]++; print($_SESSION["syokugyou"]."回目"); } else { $_SESSION["syokugyou"] = 0; } ?> <p> </p> 満足度を答えてください<BR> <?php if(isset($_POST["hobby"])){ $hobby=implode($_POST["hobby"]); print $hobby; }else{ } ?> <?php if (isset($_SESSION["hobby"])) { $_SESSION["hobby"]++; print($_SESSION["hobby"]."回目"); } else { $_SESSION["hobby"] = 0; } ?> <?php // 出力 $fileName = "log.csv"; header('Content-Disposition: attachment; filename=' . $fileName); ?> </div> </body> </html> </BOBY> </HTML>

    • ベストアンサー
    • PHP
  • php フォーム入力のあと同じページ内に移行

    <?php session_start(); $error_message = ""; if(isset($_POST["login"])) { if($_POST["user_name"] == "webtan" && $_POST["password"] == "webtan_pass") { $_SESSION["user_name"] = $_POST["user_name"]; $login_success_url = "login_success.php"; header("Location: {$login_success_url}"); exit; } $error_message = "※ID、もしくはパスワードが間違っています。<br> もう一度入力して下さい。"; } ?> ① $login_success_url = "login_success.php"; ② $error_message = "※ID、もしくはパスワードが間違っています。<br> もう一度入力して下さい。"; 同ページ内でのPOSTの受け渡しをしたいのですが、どうしたら良いでしょうか?

    • 締切済み
    • 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
  • PHPに詳しい方、教えてください

    スクリプトの以下の部分の意味がわかりません。 「 if ○○○ : 」 は、どういう解釈すればよいのでしょうか。 わかるかたがいましたら、教えてください。よろしくお願いします。 <?php if (isset($error['name']) ? $error['name'] :''): ?> <p class="error">* ニックネームを入力してください</p> <?php endif; ?> --------スクリプトの解釈-------- $_POSTが空かどうかを確認し、空でなかったら、 $_POST['name'] が空かどうかを確認し、空だったら、、 $error[name] に"blank"という文字列を入れる //最初、読み込んだときは、$_POST の中身は空なので、上記の処理は行われない。 $error['name'] を確認し、値が入って入れば、$error['name']、入っていなかったら’’  ニックネームを入力してくださいと表示する。 ----------スクリプト------------------ <?php session_start(); if (!empty($_POST)){ //エラー項目の確認 if ($_POST['name'] == ''){ $error['name'] = 'blank'; } } ?> <p>次のフォームに必要事項をご記入ください。</p> <form action="" method="post" enctype="multipart/form-data"> <dl> <dt>ニックネーム<span class="required">必須</span></dt> <dd> <input type="text" name="name" size="35" maxlength="255" value="<?php echo isset($_POST['name']) ? htmlspecialchars($_POST['name'],ENT_QUOTES,'UTF-8') : ''; ?>" /> <?php if (isset($error['name']) ? $error['name'] :''): ?> <p class="error">* ニックネームを入力してください</p> <?php endif; ?> </dd> </dl> <div><input type="submit" value="入力内容を確認する"></div> </form>

    • ベストアンサー
    • PHP
  • <?php

    <?php session_start(); $_SESSION['name'] = $_POST['name']; $_SESSION['kana'] = $_POST['kana']; $_SESSION['nick'] = $_POST['nick']; $_SESSION['sex'] = $_POST['sex']; $_SESSION['pass'] = $_POST['pass']; $_SESSION['pass2'] = $_POST['pass2']; $_SESSION['mail'] = $_POST['mail']; if(empty($_SESSION['name'])) { $_SESSION['error'] = '名前を入力して下さい'; } if(empty($_SESSION['kana'])) { $_SESSION['error'] = 'フリガナを入力して下さい'; } if(empty($_SESSION['pass'])) { $_SESSION['error'] = 'パスワードを入力して下さい'; } if(empty($_SESSION['pass2'])) { $_SESSION['error'] = '確認用パスワードを入力して下さい'; } if($_SESSION['pass'] and $_SESSION['pass2'] and ($_SESSION['pass'] != $_SESSION['pass2'])){ $_SESSION['error'] = 'パスワードが一致しません'; } if (preg_match("/^[a-zA-Z0-9]{4,12}$/", $_SESSION["pass"])){ $_SESSION['error'] = 'パスワードは半角英数字で入力して下さい'; } if(isset($_SESSION["error"])) { header("Location: regist.php"); exit; } else { header("Location: index.php"); exit; } ?> で、PCからみるとエラーメッセージがでるのですが、自分の携帯(ドコモ)でみるとエラーメッセージが表示されていません・・・ なぜでしょうか?><; フォーム画面のソースは <?php if (isset($_SESSION["error"])) { echo $_SESSION["error"]; session_destroy(); } ?> </font> <font size="2"> <form action="error_check.php" name="form" method="post"> //ここからフォーム内容 です。 ご教授のほど宜しくお願い致します><;;;;;;; 補足 >GETで、セッション名に、session_id()で取得した値を渡してやる必要があります。 それはいったいどうやるんですか?><; 簡単でいいのでソースとか記述してくださればわかりやすいです><; お願い致します><;

    • 締切済み
    • PHP
  • Parse errorの対処法について

    はじめて質問をさせて頂きます。 個人でWEBのデザインをさせて頂いているものですが、個人のプログラマーの方に開発をお願いしていたのですが、体の不調を訴えてここ数日連絡がとれなくて困ってます。 お客様のコンタクトフォームに以下のようなエラーが出てしまう現象が起きてその対処をどうしたら良いか、どなたかご指示頂けると助かります。宜しくお願いします。 Parse error: syntax error, unexpected '@' in /export/sd209/www/jp/r/e/gmoserver/0/0/********/******.co.jp/contact/index.php on line 9 -------------------------------------以下、index.php------------------------------------------- <?php require_once './b2smarty.php'; require_once '../lib/qdmail.php'; $smaty = new b2smarty(); $from_addr = "xxxx@xxxx.co.jp"; $from_name = "xxxxxxxxxx"; $mail_subject = "お問い合わせ"; $error_message = ""; $cmd = isset($_POST['cmd'])?$_POST['cmd']:''; $data['name'] = isset($_POST['name']) ?trim($_POST['name' ]):''; $data['rname'] = isset($_POST['rname']) ?trim($_POST['rname' ]):''; $data['post01'] = isset($_POST['post01']) ?trim($_POST['post01' ]):''; $data['post02'] = isset($_POST['post02']) ?trim($_POST['post02' ]):''; $data['pref'] = isset($_POST['pref']) ?trim($_POST['pref' ]):''; $data['add'] = isset($_POST['add']) ?trim($_POST['add' ]):''; $data['tel'] = isset($_POST['tel']) ?trim($_POST['tel' ]):''; $data['fax'] = isset($_POST['fax']) ?trim($_POST['fax' ]):''; $data['mail'] = isset($_POST['mail']) ?trim($_POST['mail' ]):''; $data['age'] = isset($_POST['age']) ?trim($_POST['age' ]):''; $data['ctype'] = isset($_POST['ctype']) ?trim($_POST['ctype' ]):''; $data['body1'] = isset($_POST['body1']) ?trim($_POST['body1' ]):''; $data['body2'] = isset($_POST['body2']) ?trim($_POST['body2' ]):''; $data['body3'] = isset($_POST['body3']) ?trim($_POST['body3' ]):''; $smaty->assign("data",$data); switch ($cmd){ case 'send': $mail_body = $smaty->fetch('./mail.html'); $mail = new Qdmail(); $mail -> from( $from_addr , $from_name ); $mail -> to( $data['mail'] ); $mail -> cc( $from_addr ); $mail -> subject( $mail_subject); $mail -> text( $mail_body ); $ret = $mail ->send(); $mail_subject02 = $mail_subject . "【" .$data['body1']. "】"; $mail02 = new Qdmail(); $mail02 -> from( $data['mail'] ); $mail02 -> to( $from_addr); $mail02 -> subject( $mail_subject02); $mail02 -> text( $mail_body ); $ret = $mail02 ->send(); $template = './thanks.html'; break; case 'check': $template = './check.html'; break; default: $template = './input.html'; break; } $contents = $smaty->fetch($template); $smaty->assign("contents",$contents); $smaty->display('./base.html');

    • 締切済み
    • PHP
  • ある条件に当てはまったときに別ページにジャンプする ?

    PHPを勉強し始めて日の浅い初心者です。 恐らくとても初歩的な質問で恐縮なのですが、おわかりになる方がいらっしゃればぜひご教授いただきたいです(>_<。 今、試験的に個人情報入力の画面を作ってみているのですが、困っているのが、「入力された郵便番号と電話番号に半角数字とハイフン以外の文字が使われていないかチェックして、使われていた場合はエラーページに飛んで『郵便番号(or電話番号)に半角数字とハイフン以外の文字が使われています』というメッセージを表示する」というものです。 半角数字とハイフン以外が使われていなかった場合(このふたつの項目の他に名前・住所の欄もあるので、それらを含めた全てがきちんと入力された場合、ということなのですが)は、確認画面に飛んですべての入力情報を出力、で完了です。 使うファイルは3つで、a.php(入力画面・エラーチェック)、b.php(入力結果表示画面)、error.php(上記、郵便or電話番号のエラーがひっかかったとき飛ぶ画面)です。(ファイル数はこの数に指定されているのですが、上記a,bのファイルが負う役割は自分が割り当ててみたものです。) 正規表現を使ってエラーチェック自体はできたのですが、そのエラーの場合に別のページに飛ばせる、というのがどういう操作をすればいいのかわかりません;; こちらで過去の質問を参考にして、headerを使えばいいのかなと思ったのですが… リンクやボタンのように『どこかをクリックすると飛ぶ』ならわかるんですけど、『ある条件に合ったときに自動で(?)飛ぶ』というのをどう組めばいいのかうまく想像できなくて困っています…。そもそもそういう操作自体が可能かどうなのかもわからなくて。 以下、とりあえず今打ってみたところまでです。↓ 必要と思われるところのみ抜き出します。 <?php if ($_SERVER["REQUEST_METHOD"]=="POST"){ if($postchk=="0" or $telchk=="0"){ header("Location: error.php"); exit; } } ?> <html> <body> <?php ★ if(isset($_POST['post'])){ $post=htmlspecialchars($_POST['post']); if(get_magic_quotes_gpc()) $post = stripslashes($post); if(isset($_POST['tel'])){ $tel =htmlspecialchars($_POST['tel']); if(get_magic_quotes_gpc()) $tel = stripslashes($tel); ★ if($post==""){ echo "郵便番号を入力してください<br>"; }elseif(ereg("[^0-9\-]",$post)){ $postcheck="0"; } if($tel==""){ echo "電話番号を入力してください<br>"; }elseif(ereg("[^0-9\-]",$tel)){ $telcheck="0"; } ?> ■個人情報を入力して確認ボタンを押してください<br> <form method="POST" action="a.php"> 郵便番号 : <input type="text" name="post"><br> 電話番号 : <input type="text" name="tel"><br><br> <input type="submit" value="確認" name="submit"> <input type="reset" value="取り消し"> </form> </body> </html> 『郵便/電話番号に半角数字・ハイフン以外が使われている場合』に、それぞれの事象に用意した変数$postchk、$telchkにゼロを当てはめておいて、そのどちらか一方、もしくは両方の条件がそろえばエラー画面に遷移、と考えて打ったつもりなのですが、いかがでしょう… 今はxamppを使って勉強しているので、header()内は相対パスでもかまわないかなと思ったのですがどうなのでしょうか。(どちらを書いても、現時点ではそもそもどこかおかしくて上手くいかないので判断のつけようがないのです;) それと、余談ですが、★~★の部分というのはこの場合(…入力を半角数字限定に促す場合、でしょうか…)必要でしょうか?参照したスクリプトから引っ張ってきて真似して書いたものなのでちょっとよくわからないでいます…名前や住所の欄の分も書いてあるのですが、いかがでしょうか。 長い上に話の焦点が左右してしまってすみません… エラー画面に飛べてもそのとき表示するメッセージをまた区別しないといけないとか、最終的にb.phpにすべての入力情報を引き渡す方法とか、実のところ他にもわからないことだらけなのですが、今回はこの点に関して、質問させていただきます。記述や考え方の間違い等、ご指摘いただければと思います。 よろしくお願いいたします。

    • ベストアンサー
    • PHP

専門家に質問してみよう