• ベストアンサー

ある条件に当てはまったときに別ページにジャンプする ?

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にすべての入力情報を引き渡す方法とか、実のところ他にもわからないことだらけなのですが、今回はこの点に関して、質問させていただきます。記述や考え方の間違い等、ご指摘いただければと思います。 よろしくお願いいたします。

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

  • ベストアンサー
回答No.4

なるほど。未入力エラーはページ遷移をさせないのですね。 入力されたスクリプトだと、<html>タグの前にエラーメッセージが 出てしまいますよ。 手順としては、以下のような方法などでいいと思います。 1.[ここからPHP]POSTデータの取得 2.郵便番号の未入力&形式チェック   正常ならフラグを0、未入力エラーならフラグを1、形式エラーならフラグを2 3.電話番号の未入力&形式チェック   正常ならフラグを0、未入力エラーならフラグを1、形式エラーならフラグを2 4.未入力エラーが存在せず形式エラーが存在する場合はheader(エラーページ)   [ここまでPHP] 5.<html><head><body>(PHPスクリプトで出してもいいけど) 6.[ここからPHP]郵便番号、電話番号の未入力エラーが存在していたら   エラーメッセージを出力[ここまでPHP] 7.HTML書きまくり どちらが形式エラーか判別するのは、入力された内容も保持したいならば セッションにしてしまえば良いでしょう。

blatt
質問者

お礼

お礼が遅くなってしまって申し訳ありません;; 丁寧なご説明、感謝いたします! 教えていただいたとおりに組んだらうまく走りました。順番がおかしかったんですね… 本当にありがとうございました! あとは入力されたデータを確認画面にもってくとこのみです^-^; 引き続き試行錯誤しつつがんばりたいと思います。 ご回答くださった皆様、どうもありがとうございました!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

回答No.3

<html> <body> こいつらは、入力チェックが通った後に記述すればいいでしょう。 つまり、<?php ~ ?>の括りは上部1つ、以降は全てHTMLという形。 チェックして、チェックにひっかかったらheader()の流れでは? それと、エラーチェックするのはいいのですが、エラーだったら エラーページに飛んでエラーである旨を記すんですよね? そしたら、echoの~を入力して下さいというメッセージは ここで出すべきメッセージではないのでは? そこにechoではなくheader()が来るんではないのですか? そこでメッセージを出しているからheader()が先頭にないと などと悩むのだと思います。 a.phpで一度エラーメッセージを出してから、自動的に error.phpへ飛ばしたいという事ですか?

blatt
質問者

お礼

こんなところにすみません、上記の訂正です。 スクリプト内の$postcheck = 1;/0;・$telcheck = 1;/0;はこの場合不要ですね。失礼しました;

blatt
質問者

補足

ご回答ありがとうございます。 <?php~?> はひとつにまとめてしまっても構わないのですね。 <HTML>上部に書かないと動かないものは大体わかるのですが、<HTML>内に書くものとそれとの区別が頭の中でいまいちつけられていないのです…。 エラーメッセージについてですが、エラーページで出すメッセージは『郵便/電話番号に半角数字とハイフン以外の文字が使われています』というメッセージで、上記スクリプトの中にechoされてる『郵便/電話番号を入力してください』のメッセージは、a.php側で処理しようと思っているものです。 質問に直接関係ないと思ったので省いたのですが、その場合はfunction(){}とJavascriptを使ってポップアップでメッセージが出るように設定してあります(こちらはできたのですが・・・)。 なので実際打ってるスクリプトでは、上記のecho"";の代わりにそれを実行する命令を入れています。言葉足らずでわかりづらくてすみません。 『郵便/電話番号に半角数字とハイフン以外の文字が使われています』のメッセージは、naktakさんのご意見のように、a.phpではなくerror.phpのほうでメッセージを出すよう命令する方法を考えていました。 そのとき、エラーメッセージは『郵便番号に~』と『電話番号に~』と、それぞれの場合で出力されるものを区別したいのですが、ただチェックに引っかかったときエラーページに飛ばしただけではそれはできないですよね…? この操作というのは、エラーにひっかかったらエラーページに遷移、と共に、それぞれの値(?)をセッションでerror.phpに引渡し、それらを使ってerror.php側で出力するメッセージを設定する、という形では可能なのでしょうか。ちょっと、伝わりにくいかもしれないのですが・・・ とりあえず書き直してみたのですけれど、いかがでしょう;;↓ ひとまずerror.phpで出すメッセージは無視で、単に、半角数字とハイフン以外が使われていたときにこの記述でerror.phpに飛べるのかどうかを見ていただけますでしょうか。 お願いします。 <?php if ($_SERVER["REQUEST_METHOD"]=="POST"){ $postcheck = 1; if(($post!="") and (ereg("[^0-9\-]",$post))){ $postcheck = 0; header("Location: error.php"); }elseif($post!=""){ echo "郵便番号 : ". $post; //本当はこの処理はb.phpでしたいのですが、今は自分がわかりやすいようにこれでやってみてます><; }else{ echo "郵便番号を入力してください<br>"; //ここの処理が、実際はポップアップで出そうとしているところです。 } $telcheck = 1; if(($tel!="") and (ereg("[^0-9\-]",$tel))){ $telcheck = 0; header("Location: error.php"); }elseif($tel!=""){ echo "電話番号 : ". $tel; }else{ echo "電話番号を入力してください<br>"; } } ?> <html> <body> ■個人情報を入力して確認ボタンを押してください<br> <form method="POST" action="a.php"> 郵便番号 : <input type="text" name="post"><br> 電話番号 : <input type="text" name="tel"><br><br> <input type="submit" value="submit" name="確認"> <input type="reset" value="取り消し"> </form> </body> </html> 思いの外ごちゃごちゃしてしまいました…すみません。

全文を見る
すると、全ての回答が全文表示されます。
  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.2

header()をうまく先頭配置に出来ないときは、出力をバッファリングして、先にheader情報が送信されるようにします。 バッファリング用関数 ob_start () ページの最後に出力 ob_end_flush() http://php.s3.to/man/function.header.html http://php.s3.to/man/function.ob-start.html

参考URL:
http://php.s3.to/man/function.header.html,http://php.s3.to/man/function.ob-start.html
blatt
質問者

お礼

ご意見ありがとうございます! 添えていただいたURL,しっかり読んで試してみたいと思います。 どうもありがとうございました*

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

抜き出したのは全てa.phpで一つのファイルでしょうか。 if ($_SERVER["REQUEST_METHOD"]=="POST"){ が最初にあって、チェックしてるのが下にある状態であればおかしな感じだと思います。 これをチェックの次に入れるといいんじゃないかと思います。 また、チェックをする前に $telcheck=1; $postcheck=1; のように値を入れておかないとおかしなことになりそうです。 ★の部分は別にいらなそうですが、あっても良さそうです。

blatt
質問者

お礼

ご回答、ありがとうございます! 抜き出したのは、仰るとおりa.phpのみからです。 ご意見の前半部分に関して、たしかに言われてみると順番がおかしいかも、と思います。 なのですが、たしかheader()はスクリプトの一番上に書かないといけないんでしたよね…? <html>の前のphp部分全部をチェック下に持っていくとおかしいでしょうか? もしheader()部分だけは<html>より上に置いておかなければならないとしたら、この場合どう記述すればよいでしょうか… それからこちらの記述ミスなのですが、$postchkは$postcheck、$telchkは$telcheckとそれぞれ同じもののつもりです。 凡ミスすみません;;

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 電話番号のチェック ハイフン無しの場合について

    Webサイトに問い合わせフォームを設けているのですが、電話番号のチェックで改善したいことがあります。 現状の問い合わせフォームでは、桁数が異なる場合と数字以外が入力されたら「エラー」を返しているのですが、次のように、ハイフン無しの数字だけで入力した場合、「エラー」になってしまいます。 090******** 03******** 現状、ハイフン有りで入力した場合でしか「正確」にならないので、ハイフン無しで入力した場合も「正確」にしたいです。 ちなみに、電話番号のコードは次の通りです。 $tel = htmlspecialchars($_POST['tel'], ENT_QUOTES, "UTF-8"); $telError = false; if (!preg_match( '/^[0-9]{2,4}-[0-9]{2,4}-[0-9]{3,4}$/', $tel)) { $telError = true; $tel='※正しい電話番号を指定してください。'; } どのようなコードにしたら、ハイフンなしでもエラーチェックができるでしょうか?

    • ベストアンサー
    • PHP
  • フォームによるデータの受け渡しについて

    フォームを作っているのですが、思ったように動作しません。 [希望動作] 1.電話番号をフォームで入力 <input name="tel" type="text" id="tel" size="15" maxlength="13" /> POSTで受け渡し 2.kakunin.phpで受け取り、内容を確認。 if (isset($_POST["tel"])) { $tel=$_POST["tel"]; $tel=mb_convert_kana($tel, 'as', 'utf-8'); if (!preg_match("/^\d{2,3}\-\d{3,4}\-\d{3,4}$/", $tel)){ $tel="電話番号は数字で入力してください。(例)000-0000-0000"; $flag_tel=1; }else{ $tel=$_POST['tel']; $flag_tel=0; } }else{ $tel="入力されていません"; $flag_tel=1; } 受け取った$_POST["tel"]が空の場合は$telに入力されていませんが代入されます。 受け取った$_POST["tel"]に値が入っている場合、全角を半角に変換し、正規表現で電話番号をチェックする。 正規表現で合っていない場合は、電話番号は数字で入力して・・・・の部分が代入される。 正規表現で問題なければ$telに代入。 3.テーブルで表示したい部分に<?php echo $tel;?>もしくは<?=$tel?>で表示し、$flag_telがFALSEの場合、送信ボタンが表示されないようにします。 2.の部分できちんと入力された場合のみ、プログラムは動きますが、空の状態で渡しても$tel="入力されていません";が表示されず"電話番号は数字で入力・・・"の部分が入力されます。 フォームに何も入力していない状態でも、値が入っているのでしょうか? 完全に行き詰っているのでよろしくお願いします。

    • ベストアンサー
    • PHP
  • inputでの文字種類制限

    郵便番号、電話番号に使う文字の種類を制限したいのだけど、 どうすればいいですか? <html> <body> <form action="./aa.cgi" method="post"> <input type="text" name="郵便番号" size="15" pattern="[0-9-]" title="郵便番号は、数字およびハイフン(-)のみで記入してください。"><br> <input type="text" name="電話番号" size="15" pattern="[0-9+-()]" title="電話番号は、数字、-+()のみで記入してください。"><br> <input type="submit" value="確認"> </form> </body> </html>

  • メールフォームにある必須入力について

    こんばんは、今メールフォームを作っています。入力画面→確認画面→完了ページという流れで作ったのですがよく必須項目に何も入れなかったり、間違った文字をいれたりするとエラーページが表示されるようにしたいと思っているのですが、なかなか上手くできません。下記のスクリプトからだとどうやってやったら良いのでしょうか?よろしくおねがいします。 <?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の勉強をはじめました。 今お店の情報をデータベースに書き込むPHPを作成しています。 概要としては、form.phpからinputで入力された値をPOSTでform.htmlに送りそれぞれの項目の記入忘れがないかをチェックし、すべて記入されていれば確認のページへジャンプするというページを作成しています。 入力チェックをしたときに、記入忘れの項目を指摘し、ちゃんと入力するようにメッセージを表示するようにしたいのですが、何も表示されずに困っています。(記入忘れがあるときはすでに入力したものがフォームに入力されたままの状態になるようにしたいと重いinputにはvalueを設定しています) form.phpは以下のように記述されています。 form.php----------------------------------------------------------- <?php $error_message = array(); $listname = array( "tenmei" => "店名", "tenmei_y" => "店名のよみがな", "zipcode" => "郵便番号", "address" => "住所", "address_y" => "住所の読み仮名", "tel" => "電話番号" ); if (isset($_POST["regist"])) { foreach($_POST as $key => $val){ if (isset($val)) { $value[$key] = "$val"; } else { $i = $listname["$val"]; $error_message[] = "$iを入力して下さい"; } } } $tenmei = $value[tenmei]; $tenmei_y = $value[tenmei_y]; $zipcode = $value[zipcode]; $address = $value[address]; $address_y = $value[address_y]; $tel = $value[tel]; ?> <HTML> <BODY> <?php if (count($error_message)) { foreach ($error_message as $message) { print ($message<br>); } } print <<<eot <form method="POST" action="form.php"> 店名:<input type="text" name="tenmei" value="$tenmei"><br> 店名のよみがな:<input type="text" name="tenmei_y" value="$tenmei_y"><br> 郵便番号:<input type="text" name="zipcode" value="$zipcode"><br> 住所:<input type="text" name="address" value="$address"><br> 住所のよみがな:<input type="text" name="address_y" value="$address_y"><br> 電話番号:<input type="text" name="tel" value="$tel"><br> <input type="submit" name="regist" value="入力完了"> </form> eot; ?> ------------------------------------------------------------------- まだ、入力チェックすらできない状態なので、ちゃんと入力した場合に確認のページへジャンプする機能はまだつけていません。 情報が不足している部分がありましたら補足いたします。 文法が間違っている部分がたくさんあるかもしれませんが その部分を指摘していただけたら幸いです。 どうかご教授のほどよろしくおねがいします。

    • ベストアンサー
    • 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
  • 電話番号かどうかを判断したい(Perl)

    フォームに入力された文字が電話番号かどうかを判断したいと考えています。 ハイフンは使いません。 if ($$in{tel} =‾ /¥-/) { &error("電話番号はハイフン( - )なしの10桁または11桁でご記入ください"); } if ($$in{tel} =‾ /^\d{10,}+$/) { &error("電話番号はハイフン( - )なしの市外局番からご記入ください"); } このようにしてみたのですが、うまく動きません。 どうすればいいんでしょうか... よければ教えてください。

    • ベストアンサー
    • Perl
  • フォームからMYSQLへの接続

    フォームからの入力で登録ボタンを押して MYSQLへデータの書き込み、そして削除ボタンを押して データを削除するという勉強をしています。 削除の場合は、番号か名前、電話番号のいずれかを入力して 削除ボタンを押せば該当するデータが削除されるようにしたいのですが 番号指定以外の名前指定や電話番号指定での削除ができません。 「DELETE FROM address where no=$no or name='$name' or tel='$tel'」の 書き方に問題があるようですが どのようにしたらよいのでしょうか? ---------------------------------------------- <html> <body> <form action="" method="post"> 番号:<br><input type="text" name="no"><br> 氏名:<br><input type="text" name="name"><br> 電話番号:<br><input type="text" name="tel"><br><br> <input type="submit" value="登録" name="submit"> <input type="submit" value="削除" name="submit"> </form> <?php error_reporting(1); $con = mysql_connect("127.0.0.1", "root", ""); if(!$con){ exit("データベースに接続できませんでした。"); } $result = mysql_select_db("test", $con); if(!$result){ exit("データベースを選択できませんでした。"); } $no = $_POST["no"]; $name = $_POST["name"]; $tel = $_POST["tel"]; $submit = $_POST["submit"]; if($no != null){ if($submit == "登録"){ $result = mysql_query("INSERT INTO address(no, name, tel) VALUES ('$no', '$name', '$tel')", $con); if($result){ echo "<p>登録が完了しました。<br>"; }else{ echo "<p>登録失敗</p>"; } }elseif($submit == "削除"){ $result = mysql_query("DELETE FROM address where no=$no or name='$name' or tel='$tel'", $con); if($result){ echo "<p>削除が完了しました。<br>"; }else{ echo "<p>削除失敗</p>"; } } } ?> </body> </html> ---------------------------------------------- あと「header("Location: {$_SERVER['PHP_SELF']}");」を使って 2重投稿を回避したいのですが 書く場所により「登録が完了しました。」「削除が完了しました。」の メッセージが表示されなくなってしまいます。 どこに記入したらよいのでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 他ページの内容を出力するには

    PHPあまり詳しくないです。 会員登録ページなるものを作っています。 register.phpというページで入力した会員情報をconfirm.phpというページで最終確認させたいのですが、その際に入力した情報がconfirm.phpに反映されません。 regiser.php <?php $a = (!empty($_POST['name'])); $b = (!empty($_POST['email'])); $c = (!empty($_POST['password'])); $d = (!strlen($_POST['password']) < 4); if (isset($_POST['check'])) { if ($a && $b && $c && $d) { header('Location: confirm.php'); } } ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> </head> <body> <h3>新規登録</h3> <form method="POST" action=""> <div class="container"> <label for="name">ユーザ名(20文字以内)</label> <br /> <input type="text" id="name" name="name" maxlength="20" /> </div> <?php if (isset($_POST['check'])) { if (empty($_POST['name'])) { print('※ユーザ名を入力してください'); } } ?> <br /><br /> <div class="container"> <label for="email">メールアドレス(100文字以内)</label> <br /> <input type="text" id="email" name="email" maxlength="100" /> </div> <?php if (isset($_POST['check'])) { if (empty($_POST['email'])) { print('※メールアドレスを入力してください'); } } ?> <br /><br /> <div class="container"> <label for="password">パスワード(4文字以上20文字以内)</label> <br /> <input type="password" id="password" name="password" maxlength="20"/> </div> <?php if (isset($_POST['check'])) { if (empty($_POST['password'])) { print('※パスワードを入力してください'); } elseif (strlen($_POST['password']) < 4) { print('※パスワードは4文字以上で入力してください'); } } ?> <br /><br /> <input type="submit" name="check" value="確認する" /> </form> </body> </html> confirm.php <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>確認画面</title> </head> <body> <h3>入力内容を確認してください</h3> <form method="POST" action=""> <br /><br /> <p>ユーザ名</p> <br /> <?php print htmlspecialchars($_POST['name'], ENT_QUOTES, 'UTF-8'); ?> <br /> <p>メールアドレス</p> <?php print htmlspecialchars($_POST['email'], ENT_QUOTES, 'UTF-8'); ?> <br /> <p>パスワード</p> <?php print htmlspecialchars($_POST['password'], ENT_QUOTES, 'UTF-8'); ?> <br /><br /><br /> <?php print('この内容でよろしければ下の登録ボタンを押してください'); ?> <br /> <form method="POST" action="dbconnect.php"> <input type="submit" name="completion" value="登録する" /> </form> <br /><br /> <?php print('変更がある場合は下の戻るボタンを押してください'); ?> <br /> <form method="POST" action="register.php"> <input type="submit" value="戻る" /> </form> </body> </html> できればあまりこの形は変えたくありません…。 action部分をconfirm.phpに変えると、入力値が空だったりするエラー時にconfirm.phpに飛ばないようにする方法が分かりません。 回答よろしくお願いします。 色々と間違えていたのであげ直させていただきました。

    • 締切済み
    • PHP
  • 半角英数判定

    こんにちわ。最近PHPをやりはじめた者です。 下記のスクリプトを使用して空白判定はできたのですが、半角英数文字 を判定できなくて困っています。エラーが出てしまい、画面遷移できないのです。したいことは、半角英数文字以外がユーザーIDとパスワードに入力されたとき、「半角英数で入力してください」という判定をしたいのです。画面遷移後のスクリプトは文字制限の都合で記載できませんでした。  ユーザー名<br> <form method = "post" action = "subject02-01.php" > <input type = "text" name = "USERNAME"><br> パスワード<br> <input type = "password" name = "PASS"> <input type = "submit" name = "submit" value = "ログイン"> <?php $str = mb_convert_kana($str,"rna") if($_POST["submit"] == "ログイン") if($_POST["USERNAME"] == "root" && $_POST["PASS"] == "admin") { echo "認証に成功しました。"; } else if( $UserName == "" || $Password == "") else if(ereg("[A-Za-z0-9\-]",$str)) else { echo "認証に失敗しました。"; }

    • ベストアンサー
    • PHP