• ベストアンサー

下記プログラムの問題点は? 次のPHP(WEB画面)に飛びません。

このユーザ認証プログラムが最後の2行(ページを(userpage)に飛ばす)の命令が実行しません。※最後の2行を追加する前の部分は正常動作するのは確認済みです。  ちなみに、この2行をこのプログラムの上部に移動すると指示通りのページに移ります。  まる2日間、この問題解決が見えません。どなたか御指南下さい。 <? /*========================================= ユーザ認証(Login処理) loginexe.php ===========================================*/ session_start(); // テーブルに uid とpasswdの組が存在するかどうかを調べる。 $con = mysql_connect("サーバー名","データベース名","パスワード"); //データベースを選択する。 $selectdb = mysql_select_db("データベース名",$con); $sql = "select passwd from tbl_user where uid='$uid'"; $r = mysql_query($sql,$con); if( mysql_num_rows($r) != 1) { print "アカウントが違う、もしくはユーザ登録されていません。"; print '<a href="reguser.php">こちらから登録してください。</a>'; session_destroy(); exit; } print "tbl_user1のパスワード:".mysql_result($r, 0, "passwd1")."<br>"; if( mysql_result($r, 0, "passwd1") != $passwd1) { print "パスワードが違います。"; print '<a href="index.php">戻る</a>' ; session_destroy(); exit; } //$_SESSION[セッション変数名] = 値; $_SESSION[suid] = $uid; //ページをuserpageに飛ばす header("Location: userpage.php"); ?>

  • PHP
  • 回答数4
  • ありがとう数0

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

  • ベストアンサー
  • elf2000
  • ベストアンサー率50% (6/12)
回答No.3

お二人とも現象について書いていらっしゃるので私はマニュアルから引用しておきます. ちなみに同様にマニュアルに書いていますが,Locationは絶対URIでなければなりませんので,マニュアルを参考に絶対URIの生成方法を習得されることをお勧めいたします. 下記引用>> 覚えておいて頂きたいのは、header() 関数は、 通常の HTML タグまたは PHP からの出力にかかわらず、すべての実際の 出力の前にコールする必要があることです。 頻出するエラーとして、include() または require() 関数、他のファイルをアクセスする関数に 空白または空行があり、header() の前に出力が 行われてしまうというものがあります。同じ問題は、単一の PHP/HTML ファイルを使用している場合でも存在します。

参考URL:
http://php.net/header

その他の回答 (3)

  • php504
  • ベストアンサー率42% (926/2160)
回答No.4

Locationで次の処理に移って変数を渡せないとかうまくいかないという質問を良く見かけますがrequire()かinclude()の方が適切な場合が多いようです。 ご質問のケースも header("Location: userpage.php"); ではなく include "userpage.php"; で良いのではないでしょうか

  • galluda
  • ベストアンサー率35% (440/1242)
回答No.2

がると申します。 #1さんもおっしゃってますが、本質的には「ヘッダとボディの出力タイミング」による問題です。 直接的に解決する方法はいくつかあるのですが。 とりあえず、 ob_start、ob_end_flush という関数を調べてみてください。 具体的には…物凄くアバウトですが、プログラム行頭でob_start()、exit直前を含むプログラム終了直前にob_end_flush() を埋め込みます。

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.1

途中でprintしているので動きません。 headerはprintする前に置かないと動きません。

関連するQ&A

  • PHPでテスト形式のプログラムを作ってます

    ラジオボタンA,B,C,Dを使って選択し、NEXTボタンを押したら次の問題を表示し、回答をSESSIONの配列に書き込むプログラムを作っています。 クリックしたときにprint_r($_SESSION)で配列を表示するようにしたのですが、配列の番号と中身がそのときクリックしたときの一つしか表示されないので全部きちんと入っているのか分かりません。 きちんとSESSIONに保存されているのでしょうか? <html> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <body> <p>&nbsp;</p> <p> <?php $qno=$_POST["next"]; if($qno==null){ $qno=1; }else{ $qno++; } ?> </p> <p>&nbsp; </p> <form method="post" action="session.php"> <input TYPE="radio" NAME="answer" VALUE="1" CHECKED>ア <input TYPE="radio" NAME="answer" VALUE="2">イ <input TYPE="radio" NAME="answer" VALUE="3" CHECKED>ウ <input TYPE="radio" NAME="answer" VALUE="4">エ <input type="submit" name="submit" value="Next"> <input type="button" value="最初から" onClick="location.href='session.php'"> <input type="button" value="Back" onClick="history.back()"> <input type="hidden" name="next" value="<?php print $qno?>"> </form> <TEXTAREA readonly cols="100" rows="20" name="e"> <? mb_language("uni"); mb_internal_encoding("utf-8"); //内部文字コードを変更 mb_http_input("auto"); mb_http_output("utf-8"); $db=mysql_connect("localhost","接続ID","パスワード"); mysql_query("SET NAMES utf8",$db); //クエリの文字コードを設定 mysql_select_db("データベース名"); //データベースに接続 if (!$con = mysql_connect("localhost", "接続ID", "パスワード")) { echo "接続失敗" ;   exit ; } //データベースを選択 if (!mysql_select_db("データベース名", $con)) { echo "データベース選択失敗" ;   exit ; } $sikenbango=111; if (!$res = mysql_query("SELECT * FROM `MONDAI` WHERE SIKENBANGO='$sikenbango' AND MONDAIBANGO='$qno'",$con)) { echo "SQL失敗<BR>" ;   exit ; } //検索した結果を全部表示 while ($row = mysql_fetch_array($res)) { echo $row["mondai"]; echo "<BR>" ; } //結果セットの開放 mysql_free_result ($res) ; //データベースから切断 mysql_close($con) ; ?> </textarea> <?php session_start(); if (!isset($_SESSION[$mondaibango])) { $_SESSION[$mondaibango] = array(); } if (isset($_POST['submit'])) { $qno = intval($_POST['next']); if (($qno >= 1)and($qno <=80)) { $_SESSION['answer'][$qno] = $_POST['answer']; // セッションに追加 // データベースへも保存したければここに記述 print_r($_SESSION); } } else { $qno = 0; } if ($qno == 80) { // 全問題終了時の処理 } else { $qno=$_POST["next"]; if($qno==null){ $qno=1; }else{ $qno++; } } ?> </body> </html>

    • ベストアンサー
    • PHP
  • 下記バグ("SQL:\"$sql\"の実行に失敗しました。")が表示されます

    ※以下プラグラムが走りません。どこに問題があるか教えて下さい。 <?php /*==   ユーザ履歴確認  dis_career.php ==*/ session_start(); print <<<EOD <HTML> <HEAD> <TITLE>ユーザ履歴の表示</TITLE> EOD; //データベースに接続する $con = mysql_connect("","",""); $selectdb = mysql_select_db("",$con); if ($con == false) { print("データベースに接続できませんでした。"); exit; } $sql = "select * from tbl_user order by uid'"; $result = mysql_query($sql,$con); if ($result == false) { printf("SQL:\"$sql\"の実行に失敗しました。"); exit; } $rows = mysql_num_rows($result); //行数を取得 printf("<CENTER><H2><ユーザ履歴確認></H2></CENTER>"); print("<table border=\"1\" align=\"center\" >\n"); print("<TR><TH><ユーザID></TH><TH>名前</TH><TH>コース名</TH><TH>履歴表示</TH></TR>\n"); if ($rows > 0){ for ($j = 0;$j < $rows;$j++) { print("<FORM ACTION=\"career.php\" METHOD=\"post\" TARGET=\"right\">"); $data=mysql_fetch_object($result); $uid=$data->uid; $name=$data->name; $course=$data->course; print("<TR>"); print("<TD>$uid</TD>"); print("<TD>$name</TD>"); print("<TD>$course</TD>"); print("<INPUT TYPE = \"hidden\" NAME = \"uid\ VALUE=\"$uid\">"); print("<TD><INPUT TYPE = \"submit\" NAME = \"career\ VALUE = \"履歴表示\"></TD>"); print("</TR>"); print("</FORM>"); } } ?> </BODY> </HTML>

    • ベストアンサー
    • PHP
  • Windows、Apache、PHP、MySQLを使ったwebアプリケーションのエラー

    widows環境でMySQLで作ったデータベースをApache+PHPでwebページで見れるようにしたいと思い、 http://www.yamada-lab.org/doc/win/mysql5/4/0401.html#a2 このページの通りに進めていました (データベースの内容は少し変更しました) しかし、いざページを開いてみると 「Parse error: syntax error, unexpected T_STRING in C:\test\connect01.php on line 8」 とでてきて、うまく表示されません。 syntax errorなので、文法ミスだとは思いますが、どこが違うかがわからないので、どなたか教えてください。 使用しているPCは   OS:Windows XP professional MySQL:5.1.38 PHP:5.2.10 apache:2.2.13 です。 --以下、connect01.phpの中身の途中まで-- <html> <head> <title>connect.php</title> </head> <body> <?php  //データベースサーバ名の設定  $db_host  = "localhost";  //ユーザ名の設定  $db_user  = "webapl";  //パスワードの設定  $db_passwd = "pass1234";  //データベースサーバへの接続  $db = mysql_connect($db_host,$db_user,$db_passwd); ---- エラーが出ているのは、「 $db_host  = "localhost";」の行ですが、 サーバー名、ユーザー名、パスワードに関する3項目を消し、 データベースサーバへの接続を $db = mysql_connect(localhost,webapl,pass1234); と書きかえても、この行でエラーが出ていました。

    • ベストアンサー
    • PHP
  • PHP-mysql フィールドの値を取得

    認証ページを作成していますが、 フィールドの値を取得できずに困っています。 $r = ?????????????????????; の部分の記述が分かりません。 ($rに、フォームで入力した$idのデータを参照して、もしあったら、その行のPasswdフィールドとフォームで入力した$passを比較したい) よろしくお願いいたします。 $id・・・formの入力内容(Emailフィールドに該当) $pass・・・formの入力内容(Passwdフィールドに該当) <? $hostname = "*"; $username = "*"; $password = "*"; $dbname = "*"; $tablename = "*"; $connect = mysql_connect($hostname, $username, $password) or die ("サーバに接続できません"); mysql_select_db($dbname) or die ("データベースに接続できません"); $sql = "SELECT Passwd FROM $tablename where Email='$id'"; $result = mysql_query($sql, $connect) or die ("クエリーを実行できません"); $num_rows = mysql_num_rows($result); $r = ?????????????????????; print "$num_rows\n"; print "$r\n"; if( $num_rows = 0 ) { print "ユーザ登録されていません。"; print '<a href="">こちらから登録してください。</a>'; session_destroy(); exit; } if( $r != $pass ) { print "パスワードが違います。"; session_destroy(); exit; } print "認証OK"; mysql_close($connect); ?>

    • ベストアンサー
    • PHP
  • PHPで作成したプログラムをレンタルサーバ上に置き、同じサーバ上にある

    PHPで作成したプログラムをレンタルサーバ上に置き、同じサーバ上にあるMySQLからデータを取り出して表示するプログラムを作成しています。 今回、それとは別に社内LAN上にMySQLサーバがあり、レンタルサーバ上のPHPから社内LAN上のMySQLサーバにアクセスしたいと思い、次のようにプログラムしました。 $CON = mysql_connect('localhost', "ユーザ名", "パスワード"); mysql_select_db("データベース名"); $SQL = "SELECT * FROM tablename"; $RST = mysql_query($SQL); $DMAX = mysql_num_rows($RST); mysql_free_result($RST); $CON = mysql_close($CON); しかし、「データベースに接続出来ませんでした」と表示されてしまいます。 社内LANのMySQLサーバ上にPHPプログラムを置いたときはこれでアクセスできるので、レンタルサーバからは[localhost]ではまずいのかなとは思うのですが、どうしたらいいのか見当がつきません。 そのMySQLサーバのあるパソコンのLAN上での名前は分かっていますが、ネットワークの知識に乏しいもので・・・ どなたかヒントだけでもお願いできないでしょうか。

    • 締切済み
    • PHP
  • 次のエラーメッセージ検証 テーブルtbl_user1は確認済

    SQL:"select uid from tbl_user1 order by uid'"の実行に失敗しました。→SQLエラーを表示させて見ました。You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near ''' at line 1 <?php /* ユーザ履歴確認  dis_career.php */ session_start(); print <<<EOD <HTML> <HEAD> <TITLE>ユーザ履歴の表示</TITLE> <meta http-equiv="Content-Type" content="text/html;CHARSET=Shift_JIS"> </HEAD> <BODY BGCOLOR="#E6E6FA" text="#000066" link="#A020F0" body alink="#FF00FF" body vlink="#9400D3"> EOD; //データベースに接続する $con = mysql_connect("","接続確認済","); $selectdb = mysql_select_db("接続確認済",$con); if ($con == false) { print("データベースに接続できませんでした。"); exit; } $sql = "select * from tbl_user1 order by uid'"; $result = mysql_query($sql,$con); if ($result == false) { printf("SQL:\"$sql\"の実行に失敗しました。"); print mysql_error(); exit; } $rows = mysql_num_rows($result); //行数を取得 printf("<CENTER><H2><ユーザ履歴確認></H2></CENTER>"); print("<table border=\"1\" align=\"center\" >\n"); print("<TR><TH><学科名></TH><TH>名前</TH><TH>コース名</TH><TH>履歴表示</TH></TR>\n"); if ($rows > 0){ for ($j = 0;$j < $rows;$j++) { print("<FORM ACTION=\"career.php\" METHOD=\"post\" TARGET=\"right\">"); $data=mysql_fetch_object($result); $uid=$data->uid; ~省略してます。~ print("</TR>"); print("</FORM>"); } } ?> </BODY> </HTML>

    • 締切済み
    • PHP
  • 以下プログラム(php)のバグについて

    以下の自作プログラムが上手くいきません。 おかしいですか? <? /* 分野別問題表示(session管理)  sess_fprob.php*/ $include_path="/home/○○/sess_fprob.php"; require("$include_path/dbconnect.ini"); require("$include_path/pgselect.ini"); class myDbConnect extends DbConnect { var $dbname = "-----"; //データベース名 } if (!isset($direction)) { // はじめての表示? @session_destroy(); // セッション情報を破棄 $sel = new PgSlect; } // セッション変数登録 session_register("sel"); //$_SESSION[セッション変数名] = 値; //$_SESSION[sel] = $uid; ?> <HTML> <HEAD><TITLE>出題</TITLE></HEAD> <BODY> <? $d = new MyDbConnect; $sel->doSelect("select pid,prob,ca,ia01,ia02,ia03 from tbl_prob where field_id='$field_id' and year_id='$year_id' order by pid"); $d->doClose(); ?> </BODY> </HTML>

    • 締切済み
    • PHP
  • Parse errorなんですが・・・

    Parse error: syntax error, unexpected '&' in C:\Program Files\Apache Group\Apache2\htdocs\php10\dbtest1.php on line 2 というエラーがでます。 ホスト名、ユーザー名、パスワードはあっていると思うんですが・・・ というかホスト名とはなんのことでしょうか?? ユーザー名、パスワードはデータベースでの設定ですよね? <?php &con=mysql_connect("localhost","sample","password") or die("接続できません。"); print"接続に成功しました。"; mysql_close(&con); ?> 本当に初心者ですみません ご教授、お願いいたします。

    • ベストアンサー
    • PHP
  • PHPで検索画面を作成していますが上手に動きません

    PHP超!初心者です。よろしくお願いいたします。 行いたい事は、 HTML上にあるドロップダウンリストから項目を選択し実行すると、一致する項目をPHPMysql DBより抽出し表形式で表示したい。です。 PHPmysql→ ユーザー名:user パスワード:passwd データベース名:dbnameテーブル名:table_nm 検索画面→kensaku.html 検索結果→kensaku.php ●kensaku.html <html> <head> <title>検索</title> </head> <body> <br> <h1>種類</h1> <br> <form action = "http://localhost/lesson/kensaku.php" method="POST"> <p> 種類:<br /> <select name="betu" style="width:200" id="search_process"> <option value="" selected="selected">一覧から選択</option> <option value="あ">あ</option> <option value="い">い</option> <option value="う">う</option> <option value="え">え</option> <option value="お">お</option> </select></p> <p>    <input type="submit" name="exec" value="検索"> </form> </body> </html> ●kensaku.php <html> <body> <? if (!$con = mysql_connect("localhost", "user", "passwd")) {    print "接続エラー" ;    exit ; } mysql_select_db("dbname", $con) $sql = "select sid, name, price, betu, area, memo from table_nm" ; $sql . = "where betu like '$betu'" ; if (!$res = mysql_query($sql)) {    print "SQLエラー<BR>" ;    exit } <table border=1> <tr> <th>NO</th><th>名前</th><th>金額</th><th>種別</th> /tr> while($row = mysql_fetch_array($res)){    <tr>    <td><?php ($row['sid']); ?></td>    <td><?php ($row['name']); ?></td>    <td><?php ($row['price']); ?></td>    <td><?php ($row['betu']); ?></td>    </tr> } </table> </body> </html> 説明不足の部分がありましたら、申し訳ございません。 よろしくご教授お願いいたします。

    • ベストアンサー
    • 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

専門家に質問してみよう