自動生成されない$_SESSION['submit']についての質問

このQ&Aのポイント
  • submitボタンをクリックしても、post先の.phpに自動生成されない$_SESSION['submit']変数について質問です。
  • テストプログラムを作成してみましたが、print_r($_SESSION);の結果、何も表示されず、$_SESSION['submit']が作られていません。
  • どなたか詳しい方がいらっしゃれば、ご教授いただきたいです。
回答を見る
  • ベストアンサー

$_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
  • 回答数3
  • ありがとう数3

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

  • ベストアンサー
  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.1

こんにちは。 自動生成されるのって$_POST['submit']ではないでしょうか。 (ボタンのvalueが入る) ちがっていたらすみません。

YkazubonY
質問者

お礼

たしかにその通りでした。詳しい人によく話を聞いたら、自分で($_SESSION['submit']を初期設定するとの事でした。お騒がせしました。

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

なにかライブラリをインクルードしないといけないのでは?

YkazubonY
質問者

お礼

詳しい人によく話を聞いたら、自分で($_SESSION['submit']を初期設定するとの事でした。お騒がせしました。

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.2

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <?php session_start(); なぜsession_start()より前にブラウザに返すテキストがあるのでしょうか? http://php.net/manual/ja/function.session-start.php 注意: クッキーに基づくセッションを使用している場合、ブラウザに何か出力を行う前に session_start() をコールする必要があります。

YkazubonY
質問者

お礼

私のコーディングミスでした。お騒がせしました。

関連するQ&A

  • 古いセッションが消えない

    フォームからのデータを受け取るPHP、sesssion.phpが下記のとおりだとします。 <? header('Cache-Control: nostore, no-cache, must-revvalidate'); session_cache_limiter('private_no_expire'); session_start(); header("Content-Type: text/html; charset=EUC"); $http = $_SERVER['HTTP_REFERER']; //どこから来たか $form_id = $_POST['form_id']; $form_pass = $_POST['form_pass']; $flg = $_POST['t']; $session = session_id(); if($http == "http://192.168.1.250/~fukazawa/session/form.html"){ $_SESSION['id'] = $form_id; $_SESSION['pass'] = $form_pass; } $test = $_SESSION['id']; $test1 = $_SESSION['pass']; if($flg == "t"){ echo <<<EOM <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> <title> </title> </head> <body> ◎$test<br />$test1 <br><br><br><a href="session.php">test</a><br><br> <a href="session.php?t=test">test2</a> </body> </html> EOM; }else{ echo <<<EOM <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> <title> </title> </head> <body> ◎$test<br />$test1 <a href="session.php">test</a><br> <a href="session.php?t=test">test2</a> </body> </html> EOM; } ?> 引数で表示させる内容を異なるようにするPHPファイルです。 仮に一回目にIDを「てすと」、パスワードを「ttt」でログインした場合、session.php・session.php?t=testに表示されるのは、 「◎てすと ttt」 です。 そして、これをいったんログアウトして、今度は ID「二回目」、パスワード「two」でログインすると、 session.phpには 「◎二回目 two 」と表示されますが、 session.php?t=test に飛んだ場合、 一回目のIDとパスワード、つまり 「◎てすと ttt」 が表示されてしまいます。 ブラウザをリロードすると 「◎二回目 two 」 と表示されます。 これは、前のセッションがまだ残ってしまっているということなのでしょうか。 対処法が分からず困っています。

    • ベストアンサー
    • PHP
  • セッションについて

    PHP初心者です。 今、セッションについて勉強しています。 名前を入力してログインすると次のページに名前が表示するようにしたいのですが、表示されません。どうしたらよいでしょうか? ソース(ログインページ) <? session_start();// セッション管理の開始 session_register("namae1");//現在のセッションに1つ以上の変数を登録する ?> <? header("Content-type: text/html;charset=EUC_JP"); ?> <html><head><title>ログイン</title></head> <form action="sessiontop.php" method="post"> 名前: <input type="text" name="namae"><br><br> <input type="submit" value="ログイン"> </form> </body></html> ソース(名前が表示されるページ) <? session_start();// セッション管理の開始 header("Content-type: text/html;charset=EUC_JP"); //ディレクトリー内に入っているHTMLファイルは全てEUC-JPですという命令がブラウザに送信される。 ?> <html> <head> <title>セッションメインページ</title></head> <? $name = $_POST["namae"]; $_SESSION["s_name"]=$name; ?> <?= $s_name ?>さんこんにちわ<br><br> <a href="session3.php">ログイン画面に戻る</a><br> </body></html> よろしくお願いします。

    • ベストアンサー
    • 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 $_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
  • Submit(送信ボタン)を押した回数を数える方法。

    こんにちはPHP初心者なのですが、 submit.phpというフォームで好きなキャラクター名を 入力しSubmit(送信ボタン)を押して送信された 回数をカウントする事はできますでしょうか。 どのように記述をするか想像がつかず、質問させて頂きました。 カウントした数字は、count.phpに 合計 ○ 回の送信を受けました。 好きなキャラクター名(daisuki) データを受信した年/月/日 時間(jikan) という形で表示させたいです。HTMLの表示の仕方はしたに 記載しました。 データベースは id daisuki jikan で作成しています。 どたたかお力を貸してください。 ご教授お願い致します。 ///////////////////////////////////////////////////////////// submit.php <html"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>フォームから受け取ったデータの回数</title> </head> <body> <form id="form1" name="form1" method="post" action=""> <label>好きなキャラクター名を入力。<br /> <input name="textfield" type="text" id="textfield" size="60" maxlength="60" /> </label> <label> <br /> <br /> <input type="submit" name="button" id="button" value="送信ボタン" /> </label></form> </body> </html> ////////////////////////////////////////////////////////////// count.php <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Untitled Document</title> </head> <body> <p>合計 5 回送信を受けました。</p> <p>&nbsp;</p> <table width="100%" border="1" cellspacing="5" cellpadding="0"> <tr> <td width="48%">好きなキャラクター名 </td> <td width="52%">時間</td> </tr> <tr> <td>アンパンマン</td> <td>2008/10/23 12:24:2</td> </tr> <tr> <td>天丼マン</td> <td>2008/10/19 10:24:11</td> </tr> <tr> <td>ドキンちゃん</td> <td>2008/10/1 21:24:47</td> </tr> <tr> <td>釜飯どん</td> <td>2008/9/04 12:54:47</td> </tr> <tr> <td>シンジくん</td> <td>2008/5/22 12:24:30</td> </tr> </table> <p><br /> </p> </body> </html>

    • ベストアンサー
    • PHP
  • PHPでセッション管理

    PHPでセッション管理の勉強をしています、 テストに以下の文章があるのですが カウント2回です は表示するのですが 3回目以降も カウント2回です と表示します。 文章がどこかおかしいでしょうか? また、このセッション管理は携帯電話でも有効なのでしょうか? スミマセン、教えてください。 バージョンは MYSQL ver4.0.26 PHP ver4.2.2 です <?php session_start(); $count = 1; if (isset($_SESSION["count"])) { $count = $_SESSION["count"]; $count++; } $_SESSION["count"] = $count; ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis"> <title>セッション変数のテスト</title> </head> <body> セッション変数のテスト<BR> <BR> <?php if ($count == 1) { ?> はじめての訪問です。<BR> <BR> セッション変数にデータがありません。<BR> このページをリロードしてください。<BR> <?php } else { ?> あなたの訪問は<?=$count?>回目です。<BR> <?php } ?> </body> </html>

    • ベストアンサー
    • PHP
  • セッションについて教えてください。

    PHPを独学で勉強中の初心者です。(HTMLとCSSくらいしか分からない所からのスタートです) ログインフォーム→パスワード処理→コンテンツ表示というながれで作っています。 質問は、セッションの有効期限はデフォルトではブラウザを閉じるまでと聞いたのですが、それはウインドウを閉じるではなく、アプリケーションを終了するまでということでよいのでしょうか?ウインドウを閉じただけだと、コンテンツを表示できてしまいます。 また、コードがこんなんでよいものかアドバイスよろしくお願い致します。 --パスワード処理-- <?php session_start(); $id =p; $password =11; $n_id = $_POST["n_id"]; $n_password = $_POST["n_password"]; if(($n_id == $id ) && ($n_password == $password)){ $_SESSION['pass'] = 1; header("Location: page1.php"); }else{echo "IDまたはパスワードが違います。"; } ?> ----コンテンツページ----- <?php session_start(); if(isset($_SESSION["pass"]) && $_SESSION["pass"] == 1){ echo "コンテンツ"; echo "<html><head> <meta http-equiv=Content-type content=text/html; charset=EUC-JP> </head><body>"; echo "<form action =logout.php method=post>"; echo "<input type=submit name=sbm value=ログアウト>"; echo "</form></body></html>"; }else{ header("Location:login1.php"); } ?>

    • 締切済み
    • PHP
  • メールの中身が入りません。なぜでしょう?

    PHPを勉強し始めまたばかりで、つまずいています。 本を買って来て、サンプルプログラムをセコセコ写して、イザ クリックしましたら、メールは届くのですが、なぜか本文が 入りません。届くのは      ↓ さんからのメールが届きました。 ----------------------------------------------------- ----------------------------------------------------- これだけです。 「POST」を使っているので php.iniのregisterglobalsをOnにしても、届きません。 何が悪いんでしょう? PHPのバージョンでしょうか? それとも、Apacheのバージョンでしょうか? php-5.0.2のwindows版 Apache_2.052 なのですが・・・。 どなたか詳しい方宜しくお願いいたします ******************************* <?php if (! isset($_POST[btnExec1]) and ! isset($_POST[btnExec2]) and ! isset($_POST[btnCancel1])){ $body = "名前とメッセージを入力して[OK]ボタンをクリックしてください。 <FORM action='$_SERVER[PHP_SELF]' method='POST'> 名前: <INPUT size='40' type='text' name='name'><BR><BR> メッセージ:<BR> <TEXTAREA row='6' cols='40' name='message'></TEXTAREA><BR><BR> <INPUT type='submit' name='btnExec1' value='OK'> </FORM>"; } elseif (isset($_POST[btnExec1])){ $name = htmlspecialchars(stripcslashes($_POST[name])); $message = htmlspecialchars(stripcslashes($_POST[message])); $body = "次の内容でメッセージを送信します。<BR> よければ送信ボタンをクリックしてください。 <FORM action='$_SERVER[PHP_SELF]' method='POST'> 名前:$name<BR><BR> メッセージ:<BR>". nl2br($message). "<BR><BR> <INPUT type='submit' name='btnExec2' value='送信'> <INPUT type='submit' name='btnCancel1' value='キャンセル'> <INPUT type='hidden' name='name' valu=\'$name\'> <INPUT type='hidden' name='message7 valu=\'$message\'> </FORM>"; } elseif (isset($_POST[btnExec2])){ $name = stripcslashes($_POST[name]); $message = stripcslashes($_POST[message]); $mailto = "*********@*********"; $mailsbj = "メールフォームからの送信"; $mailbody = "$name さんからのメールが届きました。\n". "-----------------------------------------------------\n". "$message \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[btnCancel1])){ header("location: $_SERVER[PHP_SEIF]"); exit(); } ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML> <HEAD> <META http-eqive="Content-Type" content="text/html; charset=x-euc-jp"> <meta http-equive="Content-Style-Type" content="text/css"> </HEAD> <BODY> <?=$body?> </BODY> </HTML>

    • ベストアンサー
    • PHP
  • $_POSTが、上手くできません。。

    PHP勉強中の初心者です。 簡単な教材で勉強しているのですが、何度やっても上手く行かない部分があり、質問させて頂ければと思います。 やりたい事としては、「form.html」で入力した内容を、$_POSTで「view.php」に表示をするということです。 上手くいっていない処理としては、「form.html」のフォームから文字を入力し、「view.php」で、『○○さん、こんにちは』と表示がしたいのですが、実際には、「form.html」に文字を入れて送信すると、「view.php」の全ソースがブラウザ上で、表示されてしまいます。 こちらは、どのようにすれば、『○○さん、こんにちは』という風に表示することが出来ますでしょうか?php自体の設定に問題があるのでしょうか? もしお分かりになる方がいらっしゃれば、ご教授いただけると幸いです。宜しくお願い致します。 ■form.html <HTML> <HEAD> <TITLE>テキスト送信のテスト</TITLE> <META http-equiv="Content-Type" content="text/html; charset=Shift-JIS"> </HEAD> <BODY bgcolor="#FFFFFF" text="#0000000"> <FONT size="4">テキスト送信のテスト</FONT> <FORM name="form1" method="post" action="view.php"> 名前:<BR> <INPUT type="text" name="onamae"> <BR> <INPUT type="submit" value="送信"> </FORM> </BODY> </HTML> ■view.php <html> <head> <title>PHPのテスト</title> </head> <body> <?php print $_POST["onamae"]. "さん、こんにちは"; ?> </body> </html>

    • ベストアンサー
    • PHP
  • 送信データの受け取りについて

    ご教授願います。 ページ1からMETHOD="get"で値をSubmitして ページ2で受信したいのですが、 ページのURLバーのアドレスの最後に「?ACT=3」と 記載されているにもかかわらず、 ページ2内での$_get['ACT']で 値を拾えませんし、$ACTも確認できません。 どの様な原因が考えられるのでしょうか。 <環境> IE 7.0.5730.13 PHP 5.2.6 <プログラム> *ページ1 <html> <head> <meta http-equiv="Content-type" content="text/html; charset=Shift_JIS"> <script type="text/javascript"><!-- function Cli_Submit(){ ListForm.action = "Test_submit2.php"; ListForm.submit(); } // --></script> </head> <BODY> <FORM NAME="ListForm" METHOD="get"> <TD><INPUT TYPE="text" NAME="ACT"></TD> <TD><INPUT TYPE="button" VALUE="Submit" onClick="Cli_Submit()"> </FORM></BODY></HTML> *ページ2 <html> <head> <meta http-equiv="Content-type" content="text/html; charset=Shift_JIS"> <script type="text/javascript"><!-- // --></script> </head> <BODY> <FORM NAME="ListForm" METHOD="post"> <TD><INPUT TYPE="text" NAME="ACT" VALUE="<?php print $_get['ACT'] ?>"></TD> <TD><INPUT TYPE="button" VALUE="Submit" onClick="Cli_Submit()"> </FORM></BODY></HTML>

    • 締切済み
    • PHP

専門家に質問してみよう