header location が飛びません。

このQ&Aのポイント
  • header locationが正しく機能せず、エラー表示もされない問題が起きています。
  • sessionを保存し、ログイン情報を取得した後、ユーザー名とパスワードの一致確認を行います。
  • 一致しない場合は、ユーザー名又はパスワードが正しくない旨を表示します。
回答を見る
  • ベストアンサー

header location が飛びません。

お世話になります。 header location がなぜが飛びません。 お分かりになる方ご教授お願いいたします。 ・<?php の前にはスペースなどを入れておりません。 ・エラー表示にはなりませんが、飛びません。 <?php session_save_path("sess"); session_name("deri_user"); session_start(); require("class/User.class.php"); $end=null; if($_POST[submit]=="送信"){ if(session_is_registered("sesdata1")){unset($_SESSION[sesdata1]);session_register("sesdata1");} if(session_is_registered("sesdata2")){unset($_SESSION[sesdata2]);session_register("sesdata2");} $_SESSION[sesdata1]=htmlspecialchars($_POST[user_name]); $_SESSION[sesdata2]=htmlspecialchars($_POST[user_pass]); $user=new User(); $usn=$user->owner_name(); $usp=$user->owner_pass(); if(trim($usn)==trim($_SESSION[sesdata1]) and trim($usp)==trim($_SESSION[sesdata2])){ header('location:./kanri_gamen.php'); exit(); }else{ $end= "<br>ユーザー名又はパスワードが正しくありません。"; } $user->__destruct(); } ?> <html lang="ja"> <head> <title></title> </head> <body> <center> <h3>管理者ログイン画面</h3> <form action="user_login.php" method="post"> <table style="border:3px ridge #333333"> <tr> <td>名前 </td> <td> <input type="text" name="user_name" size="20"> </td> </tr> <tr> <td>パスワード </td> <td> <input type="text" name="user_pass" size="20"> </td> </tr> <tr> <td colspan="2" style="text-align:center"> <input type="submit" name="submit" value="送信"> </table> </form> <?=$end?> </center> </body> </html>

  • PHP
  • 回答数3
  • ありがとう数9

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

  • ベストアンサー
noname#244856
noname#244856
回答No.3

ちなみに、最初に error_reporting(-1); ini_set('display_errors', 'On'); を実行しておくと全てのエラーが表示されるようになります。ご提示のソースコードにはエラーを引き起こす要因が3種類含まれています。2つに関しては以下を読まれれば分かると思います。 PHP Manual - 配列ですべきこととしてはならないこと http://php.net/manual/ja/language.types.array.php#language.types.array.donts Qiita - $_GET, $_POSTなどを受け取る際の処理 http://qiita.com/mpyw/items/2f9955db1c02eeef43ea もう1つ問題なのは、session_is_registered関数を使用していることです。 PHP Manual - session_is_registered http://php.net/manual/ja/function.session-is-registered.php この関数はPHP5.3の時点で非推奨です。PHP5.4以降では使用することすら出来ません。isset構文を使って調べましょう。なお、PHP5.3系のサポートももう切れていおり、認められる最も古いバージョンはPHP5.4系です。古いバージョンでは言語自体に脆弱性が発見されても修正が行われない等の問題点があります。「サポートの切れたWindowsXPを使っている」ぐらいの危機感を持ってください。

takechanGOGO
質問者

お礼

ありがとうございます。 大変ためになるご指導に心から感謝いたします。 早速に調べて対応していこうと思っております。 ありがとうございました。

その他の回答 (2)

noname#244856
noname#244856
回答No.2

ソースはUTF-8ですよね?「BOM無し」と「BOM有り」の両方を扱えるテキストエディタでソースコードを閲覧して、どっちが適用されているかを確認してください。もしくはバイナリエディタでファイイルを開き、先頭3バイトにBOMが混入していないかどうかを確かめてください。Windowsのメモ帳では「BOM有り」しか扱えませんが、PHPのソースコードは全て「BOM無し」であることが前提条件とされます。 header関数を使う場合、まだ1バイトも出力していない状態でなければなりません。BOMが含まれている場合それだけで3バイト出力していることになるので実行に失敗します。

takechanGOGO
質問者

お礼

ありがとうございます。 BOM無しでUTF-8で作成しております。 session_is_registered関数が、PHP5.4では削除されていることにたどり着き、その部分を書き換えましたら、lolipopサーバーでは問題なく動作しました。サクラサーバーでは、依然headerが飛ばない状況ですが、lolipopで使用しようと思います。 ご迷惑をおかけいたしました。 ご指導に感謝いたします。

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.1

>header('location:./kanri_gamen.php'); ./ という相対指定はどうなんでしょうね。 header('location: kanri_gamen.php'); ではどうなりますか?あるいはホスト名込みのURLで指定したらどうなりますか? header('location: http://example.om/kanri_gamen.php'); >exit(); exit(); の代わりに、die('location header sent'); としたら、そのメッセージは表示されますか?

takechanGOGO
質問者

お礼

ありがとうございます。 全て試したのですが、やはり、飛びません><。 die()で試しますと、location header sent は表示されます。 何故なのか・・・>< 苦戦しそうです><

関連するQ&A

  • header(Location: next.php) だとPOSTした値が渡らない?

    文末は(だいぶ端折ってますが), (1) エラーがあればエラー表示, (2) エラーがなければnext.phpに飛ぶ という動作をするのですが, next.php 内に echo $_POST["Name"]; とか echo $_POST["reg"]; とか書いても valueの中身が渡ってきていません. header("Location: next.php"); で飛ばすとだめなのでしょうか. http://oshiete1.goo.ne.jp/qa2706500.html でも,#2さんのアドバイスのようにしようとしましたが, #1さんのご教示のように,セッションを利用するしかないですか? ちょっとセッションで値の渡し方がチンプンカンプンなのですが・・・ <?php session_cache_limiter('none'); session_start(); header("Cache-control:no-cache"); header("Pragma:no-cache"); $errFlg=false; if ( $_POST["reg"] == "" ) $errFlg = true; if ( !$errFlg ) { if ( $_POST["Name"] == "" ) { $errFlg = true; $errStr["Name"] = "未入力"; } } if ( $errFlg ) { ?> <html><body> <form method="post" action="<?php $_SERVER["PHP_SELF"] ?>"> <?= $errStr["Name"] ?></td> <input type="text" name="Name" value="<?php echo $_POST["Name"]; ?>"> <input type="submit" name="reg" value="登録"></td> </form> </body></html> <?php } else { header("Location: next.php"); } ?>

    • ベストアンサー
    • PHP
  • $_SESSION['submit']の自動生成

    <form>タグの中にあるsubmitボタンをクリックすると、post先の.phpに、$_SESSION['submit']変数が自動生成されると聞いたので、テストプログラムを作ってみましたが、自動生成されません。 具体的には、test02.phpのprint_r($_SESSION);において、何も表示されません。 つまり、$_SESSION['submit']が作られていません。 詳しい方、ご教授をおねがいします。 test01.phpのソース <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <?php session_start(); ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> <title>test01</title> </head> <body> <?php print <<< EOH1 <form action="test02.php" method="post" name="form1"> <table> <tr> <td>会社名</td> <td> <input type="text" name="company" size="30" value="東京電気株式会社"> </td> </tr> </table> <br> <input type="submit" value="登録" name="submit">&nbsp;<input type="reset"> </form> EOH1; ?> </body> </html> test02.phpのソース <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <?php session_start(); ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> <title>test02</title> </head> <body> <?php print_r($_SESSION); if(isset($_SESSION['submit'])) { dispRequest(); } if(isset($_SESSION['submit'])) { unset($_SESSION['submit']); session_unset(); session_write_close(); } function dispRequest() { if (isset($_REQUEST['company'])) { echo "会社名:", $_REQUEST['company'], "<br>\n"; } else { echo "companyが未定義<br>\n"; } } ?> </body> </html>

    • ベストアンサー
    • PHP
  • 表の枠組み表示

    下記、ソースで表から表へデータを飛ばしています。 textboxに入力した値を別のファイルで受け取り 同じような表内で表示しています。 text入力したデーターがないときにも受け取り側の 表の枠組みだけは、表示させたいのですが 何か良い方法ないでしょうか? //送り側ソース <html> <head><title>session.html</title></head> <body> 商品登録 <form action="register.php" method="post"> <table border="1"> <tr> <td><input type="text" name="syouhin"></td> <td><input type="text" name="conto"></td> <td><input type="text" name="thank"></td> </tr> <tr> <td><input type="text" name="xyz"></td> <td><input type="text" name="opq"></td> <td><input type="text" name="stu"></td> </tr> </table> <input type="submit" value="登録"> </body> </html> //受け取り側ソース <?php session_start(); ?> <html> <head><title>register.php</title></head> <body> <?php $syouhin=$_POST['syouhin']; $_SESSION['syouhin'].=$_POST['syouhin']; $conto=$_POST['conto']; $_SESSION['conto'].=$_POST['conto']; $thank=$_POST['thank']; $_SESSION['thank'].=$_POST['thank']; $xyz=$_POST['xyz']; $_SESSION['xyz'].=$_POST['xyz']; $opq=$_POST['opq']; $_SESSION['opq'].=$_POST['opq']; $stu=$_POST['stu']; $_SESSION['stu'].=$_POST['stu']; print("次の商品を登録しました<br />"); print "<table border=1>"; print"<tr><td width=50>適用</td><td width=50>商品</td><td width=50>数量</td></tr>"; print"<tr><td width=50>".$syouhin."</td>"; print"<td width=50>".$conto."</td>"; print"<td width=50>".$thank."</td>"; print "</tr>" ; print"<tr><td width=50>".$xyz."</td>"; print"<td width=50>".$opq."</td>"; print"<td width=50>".$stu."</td>"; print "</tr>" ; print "</table>"; ?> </body> </html>

    • 締切済み
    • PHP
  • Ifが正常に動作しない。

    下記のコードで、login.htmlからデータを適当に入力し てかえってくる処理が全て、空の表示になってしまう。 Ifが正常に動作しません、正常に動作するようにするにはどうすればいいのでしょうか? <login.html> <html> <body> <table> <tr> <td>id:</td> <td><input type="text" name="id"></td></tr> <tr><td>password:</td> <td><input type="password" name="pass"></td></tr> </table> <form methed="post" action="http://session.asp"> <input type="submit" name ="sb" value="login" > </form> </body> </html> session.asp <html> <body> <% if session("id")="" Or session("id")= null then if request("pass")="" Or request("id")= null then response.write "空" elseif request("pass")= "1234" then session("id")="login" response.write "ログインしました。" else response.write "違う" end if else response.write "ログインしました" response.write session("id") end if %> </body> </html>

  • header(Location:~)で$_SESSION[" "]が保持されない。

    自宅サーバー(apache2+php5+mysql5)のlocalhost環境で、 header(Lcation:~)の記述をすると、 セッションが保持されない現象が起きています。 本番環境のレンタルサーバーは、同じ記述で、 しっかりとセッションが保持されます。 この原因は、何でしょうか? php.iniの設定など、何か考えられることがあれば、 是非教えて下さい。 【やりたいこと】 ■a.php **************************************** <?php echo<<<EOD <form method="POST" action="./b.php"> <INPUT type="text" name="test"> <INPUT type="submit" name="Submit" value="確認画面へ"> </form> EOD; ?> ■b.php **************************************** <?php $_SESSION["test"]=$_POST["test"]; header("Location:./c.php"); ?> ■c.php **************************************** <?php echo $_SESSION["test"]; ?> 自宅サーバーだと、 a.phpで入れたデータが、c.phpで表示されません。 レンタルサーバーだと、 セッションが保持され、表示されます。

    • ベストアンサー
    • PHP
  • phpのプログラムに関する質問です。

    今、ログインシステムを作っている途中なのですが、以下のプログラムでやってみると、 登録してある名前とパスワードを打ち込むと、最初「パスワードが違います。」と出て、 戻ってもう一度同じものを打ち込むと、うまく先へ進みます。 (login.php)のファイルで↓ <html> <head> <title>ログイン画面Var.1</title> </head> <body > <form method="POST" action="get_login.php"> <table> <tr> <td>名前:</td> <td><input type=text name="name"></td> </tr> <tr> <td>パスワード:</td> <td><input type=password name="pass"></td> </tr> <tr> <td></td> <td> <input type=submit value="ログイン"> <input type=reset value=" 取消 "> <input type=submit name="regist" value="新規登録"> </td> </tr> </table> </form> </body> </html> (get_login.php)のファイルで↓ <? setcookie("name2", $_POST["name"]); $contents = @file_get_contents('name_list.txt'); //ファイルから読み込んだ文字列 $name=$_COOKIE['name2'];//名前 if($_POST["regist"]=="新規登録"){ readfile("regist.php"); }else{ if(ereg('<name>'.$name.'</name><pass>[a-z0-9]+</pass>',$contents,$a)){ $pass=ereg_replace('[^ ]+<pass>','',$a[0]); $pass=ereg_replace('</pass>','',$pass); if($pass==$_POST['pass']){ readfile("phptxtwrite2.php"); }else{ echo ("パスワードが違います。<br>". "<a href=\"./login.php\">戻る</a>"); } }else{ echo("登録されていません。<br>". "<a href=\"./login.php\">戻る</a>"); } } ?> (name_list)のファイルで↓ <name>会</name><pass>ss</pass> <name>さめ</name><pass>kk</pass> <name>やす</name><pass>ii</pass> <name>のり</name><pass>kk</pass> <name>あ</name><pass>a</pass> <name>あああ</name><pass>aaa</pass> <name>dda</name><pass>ds</pass> こんな感じなのですが、なぜ一発でうまくいかないのでしょうか?宜しくお願いします。 また、改良点などがありましたら、アドバイス宜しくお願いします。

    • ベストアンサー
    • PHP
  • 会員専用のログインページを作っているのですが、分からない事があります。

    会員専用のログインページを作っているのですが、分からない事があります。 1.フォームにIDとPASSWORDを入力 2.login.phpで会員データーベースに入りIDとPASSWORDが存在すれば会員専用ページに移動 ----form.html---- <form action="" method="post"> <table> <tr> <td>あなたのID:</td> <td><input type="text" name="usrid" size="15" value="<?php echo htmlspecialchars($_POST['usrid']); ?>" /></td> </tr> <tr> <td>パスワード:</td> <td><input type="password" name="usrpw" size="16" value="<?php echo htmlspecialchars($_POST['usrpw']); ?>" /></td> </tr> <tr> <td><input type="submit" value="ログイン" /></td><td> </td> </table> </form> ----login.php---- //MYSQLに接続 require_once('sql.php'); //セッションを開始します。 session_start(); $_SESSION["usrid"] = ""; //自分のID $_SESSION["usrpw"] = ""; //自分のPASS //変数の初期化 $usrid = ''; //ユーザーID $usrpw = ''; //パスワード //POSTされたとき if ($_SERVER["REQUEST_METHOD"]=="POST") { //ログインボタンが押されたとき if (isset($_POST["submit"])) { //POSTされたデータを取得 $usrid = htmlspecialchars($_POST["usrid"], ENT_QUOTES); //ID $usrpw = htmlspecialchars($_POST["usrpw"], ENT_QUOTES); //パスワード //入力内容チェック if (strlen($usrid)==0){$error = "ユーザIDが入力されていません";} if (strlen($usrpw)==0){$error = "パスワードが入力されていません";} //エラーがない場合 if (strlen($error)==0){ //meiboテーブルをチェック $mysql->query("SELECT usrid,usrpw FROM meibo"); if ($mysql->rows()>0){ //行が存在した場合 $row = $mysql->fetch(); if ($row["usrpw"] == $usrpw){ $_SESSION["usrid"] = $usrid; header("Location: http://$host/php/page.php"); exit; } } } $error = "ユーザIDかパスワードに誤りがあります"; } } 教科書を参考に作ったコードです。 フォームにIDとPASSを入力後ログインボタンを押してもそのままフォーム画面のままになってしまいます。 data.txtだと比較的簡単に出来たのですがMYSQLを使いだしたとたん分からなくなってしまいました。 どなたか親切な方、お教えください。

    • ベストアンサー
    • PHP
  • 入力チェックについて

    今、メールフォームを作っているのですがHTMLで入力してもらいkakunin.phpでチェックします。入力ミスがあれば、error.htmlへミスが無ければそのままkakunin.phpで表示したいのですが、中々上手くいきません。長い文で恐縮ですがよろしければご教授ください。 ★HTML★ <form name="form1" method="post" action="kakunin.php"> <td width="64">お名前</td> <td width=<input type="text" name="name"></td> </tr> </table> <input type="submit" name="Submit" value="送信"> </form> ★kakunin.php★ <?php $name=$_POST["name"] $Submit=$_POST["Submit"] //記入チェック if($Submit=="送信") { if (empty ($name)){ header("Location: error.html"); exit; } } ?>

    • ベストアンサー
    • PHP
  • ボタンクリックでフォーカス移動

    JavaScript超ビギナーなので方法がよくわかりません。 フォームにテキストボックス(配列)4個あり ボタンを押すたびに未記入のテキストボックスにカーソルを移動したいのですが。どのようにしたらいいでしょうか。 <form name="form1" method="post"> <table width="200" border="1"> <tr><td ><input type="submit" name="Submit" value="送信"></td></tr> <tr><td ><input type="text" name="name1"></td></tr> <tr><td><input type="text" name="name1"></td></tr> <tr><td><input type="text" name="name1"></td></tr> <tr><td><input type="text" name="name1"></td></tr> </table> </form>

  • [PHP初心者] フォームのエラーチェック

    PHPやデータベースに全く疎い者です。 皆様にご指導頂きたく投稿致します。質問内容もレベルが低いですがどうが宜しくお願いします。 メールフォームにてフォームのボタンを押下し、 エラーチェックをして、エラー項目を同一画面上の上の辺りに表示させたいのですが、、参考書を読んだり、過去スレを拝見しても、どうもわかりません。 <body> //↓この辺をどう書けばいいのか、さっぱりなんです。 <?php if(isset($_POST['mailform'])) { if($_POST['name'] == "") { echo("名前を入力して下さい。<br>"); }} ?> //↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ <form method="POST" action="kakunin.php"> <table border="0" cellpadding="5"> <tr> <td colspan="2"></td> </tr> <tr> <td>名前</td> <td><input type="text" name="name" size="20"></td> </tr> <tr> <td>メールアドレス</td> <td><input name="mail" type="text" id="mail" size="20"></td> </tr> <tr> <td>項目</td> <td>     <input type="checkbox" name="check[]" value="PHP">PHP <input type="checkbox" name="check[]" value="Perl">Perl <input type="checkbox" name="check[]" value="ASP">ASP <input type="checkbox" name="check[]" value="JSP">JSP</td> </tr> <tr> <td>お問い合わせ内容</td> <td><textarea rows="5" name="naiyou" cols="40"></textarea></td> </tr> <tr> <td colspan="2"><input name="mailform" type="submit" id="mailform" value="::入力内容を確認::">  <input type="reset" name="Submit" value="リセット"></td> </tr> </table> </form> </body>

    • 締切済み
    • PHP

専門家に質問してみよう