悪戦苦闘PHP セッション変数

このQ&Aのポイント
  • セッション変数の保存フォルダのパスを設定しているが、エラーが出てしまう
  • ユーザーがログイン情報を入力し、データベースと一致するか確認するプログラムを実行
  • ログイン情報が正しくない場合はエラーメッセージを表示し、正しければセッション変数を設定して別のページにリダイレクト
回答を見る
  • ベストアンサー

悪戦苦闘PHP セッション変数

毎日悪戦苦闘しながらすごしずつプログラムができるようになって来ました。今越えられないで困っている問題がありまして、ご教授していただきたくて投稿しました。下のようなプログラムを実行しますと Warning: session_register() [function.session-register]: Cannot send session cookie - headers already sent by (output started at C:\Apache Group\Apache2\htdocs\sample\test.php:3) in C:\Apache Group\Apache2\htdocs\sample\test.php on line 30 となってしまいます。なぜか昨日は上手く行っていたのですが、今日こんなエラーがでて解決できないでいます。ためしにtmpに保存されていたセッションファイルを削除してみたりしたのですがだめでした。原因が分かる方是非ご教授お願いいたします。 <?php //セッション変数の保存フォルダのパス session_save_path("C:/Apache Group/Apache2/htdocs/sample/tmp"); if(isset($_POST[simei]) and isset($_POST[pass])){ $con=sqlite_open("../SQLiteManager/php_db"); $sql = "select * from **** where **** = '$_POST[****]' and **** = '$_POST[*****]'"; $result = sqlite_query($con,$sql); $row = sqlite_num_rows($result); if($row==0){ $not= "正しくありません"; } else{ //////////セッション変数設定//////////// session_start(); session_register("simeix","passx"); $_SESSION[simeix]=$_POST[simei]; $_SESSION[passx]=$_POST[pass]; //////////////////////////////////////// header("location: abcdefg.php"); exit(); } } else{ echo "ハンドルネーム、パスワードを入力してください。"; } ?> <html> <body> <div id=a> <table><tr><td><font color="#ffffff"> <B>ログイン</b></font></td> </tr> <tr><td> <form action="acntop.php" method="post"> <font color="#ffffff">HDネーム:</font><input type="text" name="simei"value="" > <font color="#ffffff">パスワード:</font><input type="password" name="pass" value=""> <input type="submit" value="送信"> </form> </td> </tr></table> <?=$not;?> </div> </body> </html>

  • PHP
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • masa6272
  • ベストアンサー率66% (93/140)
回答No.1

echoもprintもなさそうですので・・・ <?php の前に、空行でも入っていませんか? 空行があると、それが出力されてしまいます。 <?php が1バイト目から始まっている必要があります。

ityounomi
質問者

お礼

ありがとうございます。あの後悪戦苦闘しながら、何とか解決できました。session_start()を一番上に持っていったら、なぜかエラーがでなくなりました。まだまだ沢山勉強しないとだめです。お世話になりました。

関連するQ&A

  • セッション変数について

    48歳独学でプログラムを勉強しているものです。誰も教えてくれる人がいないので、教えてgooさんには大変お世話になっております。 現在PHPを使用して無料レンタルサーバーに会員画面を作ろうとしているのですが、一般的に無料レンタルサーバーでもセッション変数は使えるものなのでしょうか。どうも上手くセッション変数がフォルダに保存されません。無料レンタルサーバーでは不可なのでしょうか。 セッション保存先に「kaiintmp」というフォルダを作成しています。 そして、 session_start(); session_save_path("kaiintmp"); session_register("simei","pass"); $_SESSION[simei]=$simei; $_SESSION[pass]=$pass; のようにしていますが・・・。 自分のパソコンでは、セッション変数が作成されますがレンタルサーバーにUPしても作成されません。 レンタルサーバーにUPしたときのpathがダメなのでしょうか? レンタルサーバーでセッション変数を使用されている方おりましたら宜しくご教授お願いいたします。

    • ベストアンサー
    • 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
  • PHPのログイン処理について

    PHPのログイン処理について教えてください。 「login_auth.phpファイル」 <?php //session開始 session_start(); session_regenerate_id(true); //エラーメッセージを格納する変数を初期化 $error_message=""; //ログインボタンが押されたかを確認 if(isset($_post["sub"])){ if($_post["auth_id"] == "auth" && $_post["auth_pass"] == "1234"){ //ログインが成功した証拠をセッションに保持する $_session["login_name"] = $_post["auth_id"]; //管理者トップへWebブラウザをリダイレクトさせる $login_url = "http://{$_server["http_host"]}/reservation/auth_top.php"; header("Location: {$login_url}"); exit; } $error_message = "IDかPASSが間違えています"; } ?> <html> <body> <?php if($error_message){ print '<font color="red">'.$error_message.'</font>'; } ?> <center> <hr size="2" color="blue" width="50%"><br><br> <font size="4"><b>管理者認証画面</b></font> <br><br><hr size="2" color="blue" width="50%"><br><br> ユーザID/パスワードを入力してください。 <form action="login_auth.php" method="post"> <table border="2"> <tr> <td bgcolor="cyan">ユーザID</td> <td><input type="text" name="auth_id" value=""></td> </tr> <tr> <td bgcolor="cyan">パスワード</td> <td><input type="password" name="auth_pass" value=""></td> </tr> </table> <input type="submit" name="sub" value="ログイン"> </form> <a href="javascript:window.close();" target=_parent>閉じる</a> </center> </body> </html> 「auth_top.phpファイル」 <?php //セッションを開始する session_start(); //ログインが成功した証拠である変数のチェックを行なう if (!isset($_SESSION["login_name"])) { //変数に値がセットされていない場合は不正な処理とみなし、ブラウザをログイン画面へリダイレクトさせます $no_login_url ="http://{$_server["http_host"]}/reservation/login_auth.php"; header("Location: {$no_login_url}"); exit; } ?> 管理者画面です。 この簡単なプログラムなんですが、IDとPASSを入力しても画面が切り替わりません。 今、そこで行き詰っています。 どなたか教えていただけないでしょうか??

    • 締切済み
    • 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
  • PHPのセッションについて

    PHPのセッションについて 現在ログインフォームを作成しているのですが、 ログインフォームからIDとパスワードを送信して、合っていれば セッションを発行してロケーションで飛ばそうと思っているのですが、 初回時にIDとパスワードを入力して送信しても、セッションが引き継がれず 2回目以降だとセッションが引き継がれる症状に悩んでおります。 どなたかご教授ください。 宜しくお願いいたします。 【login.php】-------------------------------- <?php session_name("stock"); session_start(); $error_flag = 0; if(isset($_POST["login"])){ $id = htmlentities($_POST["id"],ENT_COMPAT); $password = trim(htmlentities($_POST["password"],ENT_COMPAT)); if($login_id == $id && $login_pass == $password){ $_SESSION["id"] = $id; $_SESSION["password"] = $password; header("Location:stock.php"); exit; }else{ $error_flag = 1; } } echo <<<EOD <form method="post" action="login.php" id="login"> <input type="text" name="id" id="id" > <input type="password" name="password" id="password"> <input type="submit" name="login" value="ログイン" /> </form> EOD; 【stock.php】--------------------------------- <?php session_name("stock"); session_start(); echo $_SESSION["id"]; echo $_SESSION["password"]; ?>

    • ベストアンサー
    • PHP
  • 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
  • クッキーを使わないセッションPHP

    を作ったのですがまずい点があったら教えて下さい 入力を一行ずつ並べるものです <?php session_name('asdsddzddzfssd'); session_start(); session_register('lines'); $self=$_SERVER['PHP_SELF'].'?'.htmlspecialchars(SID); $line=isset($_POST['line'])?htmlspecialchars($_POST['line']):''; if($line!='')$_SESSION['lines'] .= $line.'<br/>'; echo' <form action="'.$self.'" method="post"> <p>1行: <input name="line"/></p> </form> 過去の全行:<br/>'.$_SESSION['lines']; ?>

    • ベストアンサー
    • PHP
  • php $_SESSIONでデータが残らない。

    いつもお世話になり誠にありがとうございます。 標記の件。 インプット画面ー>確認画面ー>戻るー>インプット画面 インプット画面に戻った時、どうしても最初のインプット画面で打った内容が消えてしまいます。 プログラムを診て、誤りを指摘して頂けないでしょうか? 今度はCSSなども書きます。 どうぞよろしくお願い致します。 記 <?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> <meta charset="utf-8"> <meta http-equiv="content-type" content="text/html" charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>ブログ</title> <meta name="description" content="このWebサイトは、初めてHTMLで作るブログページです。"> <link rel="stylesheet" href="./css/style.css"> <style> body{ width: 100%; max-width: 800px; margin-top: auto; margin-left: auto; margin-right: auto; background-color: rgb(71, 133, 157); padding: 10px; text-align: center; } div{ background-color: rgb(247, 248, 245); padding: 2em; } script{ margin-top: 12em; } p { margin-left: 2em; text-align: left; font-size: 25px; font-weight: bold; color: rgb(10, 10, 10); } form { font-size: 25px; font-weight: bold; color: blue; } input { font-size: 25px; margin:auto; } </style> </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
  • PHPについて

    PHPについて PHPを使ったメールフォームを作ろうとして、ローカルに保存して、自分のメール宛でテストしてみても、送られてきません。。。 PHPの方は、確認ページと動作を一緒に組み込んだのです。ホームとPHPの文は次の通りです。 ホームのbody(フォーム自体) <body> <form action="\newfile6-1.htm" method="POST"> <table width="545" border="0" cellpadding="5" cellspacing="1" bgcolor="#C5CFED"> <tr> <td width="130" bgcolor="#E6EAF7" class="font_black"><div align="center">お名前</div></td> <td width="392" bgcolor="#FFFFFF" class="font_black"> <input class=formb size="70" type="text" name="callsighn" /></td> <tr> <td bgcolor="#E6EAF7" class="font_black"><div align="center">メールアドレス</div></td> <td bgcolor="#FFFFFF" class="font_black"><input class=formb size="70" type="text" name="email" /></td> </tr> <tr> <td bgcolor="#E6EAF7" class="font_black"><div align="center">題名</div></td> <td bgcolor="#FFFFFF" class="font_black"><input class=formb size="70" type="text" name="subject" /> </td> </tr> <tr> <td bgcolor="#E6EAF7" class="font_black"><div align="center">内容</div></td> <td bgcolor="#FFFFFF" class="font_black"><textarea class=formb name="_msg;s" rows="10" cols="50"></textarea></td> </tr> </table> <table width="160" border="0" cellpadding="0" cellspacing="0" class="m-top20"> <tr> <td width="60"><input type="submit" value=" 送信 " class=nbox /></td> <td width="40"><img src="images/spacer.gif" alt="" width="40" height="1"></td> <td width="60"><input type="reset" value=" 中止 " class=nbox /></td> </tr> </table> <input type="hidden" name="nextpage" value="\newfile6-1.htm"> </form> </body> PHPを含んだ方 <body> <?php mb_language("japanese"); mb_internal_encoding("SHIFT-JIS"); $to = "(自分のアドレス)"; $subject = "JH2YQBです"; $body = "お問い合わせの確認です。","お名前:",$_POST["callsighn"],"内容:",$_POST["body"],; $from = $_POST[email]; mb_send_mail($to,$subject,$body,"From:".$from); ?> <h1>送信しました</h1><br> <a href="\newfile.html">Top</a> </body> 何かまずいところがあったらご指摘ください。よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPでセッションを使った受け渡しについて

    PHPでECサイトのカート機能を作っています。 まず商品一覧画面(index.php)にデータベースから読み取ったidとNAME、そして個数、サイズ、包装の有無のセレクトボックスを表示します。 それぞれの商品の追加ボタンを押すとカートのphp(t_cart.php)に飛んで上記の情報を全て表示できるようにしたいのですが、idとNAMEと個数の情報は受け渡せるのですが、サイズや包装の有無は別の商品を追加すると全ての商品の情報が上書きされてしまいます。 コードの一部を記載しておきます。 まだPHPを始めたばかりで初歩的な事がわからないのですが、ぜひ御知恵をお貸しいただければとおもいます。 よろしくお願いします。 ・index.php <table> <?php foreach ($Menu as $g) { ?> <tr> <td> <p class="Menu"><?php echo $g['id'] ?></p> </td> <td> <p><?php echo $g['NAME'] ?></p> </td> <form action="t_cart.php" method="post"> <td> <a>個数:</a> <select name="num"> <?php for ($i = 1; $i <= 10; $i++) { echo "<option>$i</option>"; } ?> </select> </td> <td> <a>サイズ:</a> <select name="size"> <option>S</option><option>M</option><option>L</option> </select> </td> <td> <a>包装:</a> <select name="deco"> <option>有</option><option>無</option> </select> </td> <td> <input type="text" name="id" value="<?php echo $g['id'] ?>"> <input type="submit" name="submit" value="go to cart"> </td> </form> </tr> <?php } ?> </table> ・t_cart.php <?php require 'common.php'; $rows = array(); $sum = 0; $pdo = connect(); if (!isset($_SESSION['cart'])){ $_SESSION['cart'] = array(); } if (@$_POST['submit']) { @$_SESSION['cart'][$_POST['id']] += $_POST['num']; } foreach($_SESSION['cart'] as $id => $num) { $st = $pdo->prepare("SELECT * FROM Menu WHERE id=?"); $st->execute(array($id)); $row = $st->fetch(); $st->closeCursor(); $row['num'] = strip_tags($num); $row['size'] = $_POST['size']; $row['deco'] = $_POST['dough']; $rows[] = $row; } ?>

    • 締切済み
    • PHP