• ベストアンサー

携帯サイトでセッションでのフォームで変数の受け取り方法

PHP5で携帯サイトでクッキーが使えないという条件でセッションを使ってのformのやりとりでプログラミングしています。 クッキーが使えないのでPHPの先頭で ini_set('session.use_trans_sid', '1'); としていて 入力フォームはセッションをして後は名前を入力するだけの ごく普通です(簡単に書きます)。 session_start(); <form action=onamae.php method=post> 実際にはここに以下の1行が入る <input type="hidden" name="PHPSESSID" value="XXXXXXXXXXXX" /> おなまえ<br><input type=text name=name size=15> <input type=submit value="投稿する"> 問題は受け取りですが $_POST['name']だとうまく受け取れますが $_SESSION['name']だと受け取れません。 入力するフォーム側で何らかの仕掛けが必要なのか分からないのです。 お手数ですが宜しくお願いします。

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

  • ベストアンサー
  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.1

> $_POST['name']だとうまく受け取れますが > $_SESSION['name']だと受け取れません。 そちらが 書かれている HTMLを見る限り、極めて正常な動作をしているように見えます。 <form>で POST で name を送信しているのですから、$_POST でしか受け取れなくて正常かと。。 まぁ、$_REQUEST でも受け取れますが、細かい事は置いておくとして。 セッションは あくまでも サーバー側で持ってる変数で、 $_SESSION[name] = $_POST[name]; とか セッションに 書き込んでやらない限り 空っぽなはずです。 厳密には 空っぽではありませんが、別の話しなので置いておきます。 POST で 送ったものが そのまま セッションに入るのは 俺は知りません。 俺が知らないだけかもしれません。 あるなら誰か教えてください。 しょっぱなに $_SESSION = $_POST; ってのは 無しの方向で。

reimy1
質問者

お礼

返答ありがとうございます。 やはり$_SESSION[name]に入れてやらないとダメなのですね。 複数ページでフォームデータをやりとりするなら 便利そうですね。 勉強になりました。

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

その他の回答 (2)

  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.3

<?/* え~と、#1です。 自分で読んでみて、意味不明な事を書いてるなと思ってしまいました。 俺が言いたかったのは、要は「セッションは入れてやんない限り、自動では入んないはずですよ」って事です。 なんか見当はずれな事をしている気もしたのですが、ゴミプロ作ってみました。 ソースは読めると思いますので、説明は はしょります。 何度か繰り返してみると、セッションの動きが分かるかと思います。 逆に 混乱しちゃったら すみません。 セッションで間違いやすいのは、session_destroy() しても、 その時点では $_SESSION の 中身は残ってるってトコですかね。 */?> <? session_start(); $me = $_SERVER[PHP_SELF]; if ($_SERVER[QUERY_STRING] == "kill") { session_destroy(); print "sessionを破壊ました。<hr>"; } //------------------------------------------------ $Session = ""; foreach($_SESSION as $name => $value) { $Session.= "[$name] $value<br>\n"; } print "sessionの中身<hr>$Session<hr>\n"; //------------------------------------------------ if ($_POST) { $_SESSION[name] = $_POST[name]; } $_SESSION[count]++; print " <form action=$me method=post> name <input type=text name=name> <input type=submit value='send'> </form> <hr> <a href=$me?kill>sessionを破壊する。</a>"; ?>

reimy1
質問者

お礼

セッションはサーバーから時間が経ったら自動で消えるだけでなく 情報を破壊することもできるのですね。

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

>POST で 送ったものが そのまま セッションに入るのは 俺は知りません。 >しょっぱなに $_SESSION = $_POST; ってのは 無しの方向で。 予期しないデータの上書きや、POSTで送られていないデータの削除が発生する可能性を考えると、あり得ない仕様という事で知らないのは当然だと思います。 私は、携帯の契約者ID(各社で呼び方は変わりますがSIMカード毎に割り当てられた、契約者番号のようなもの、機種変更しても番号は変化しない)をセッションIDとして割り当てて、セッション管理を実現しています。 ※完全ではないものも、セッションハイジャック対策としては有効ではないかと思っています。

reimy1
質問者

お礼

なるほど、セッションIDとして割り当てるのは 自分なりに細工できるのですね。 セッションハイジャックとかも聞いたことがありますが なにかしら勉強してみます。

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

関連するQ&A

  • 携帯サイトの入力フォームについて!修正画面編

    こんにちわ! お世話になります。 すごく初歩的な質問になってしまいます。 入力フォームを作っているんですけど・・。 入力→確認→修正→完了 ぜんぶ1ページにまとめて作ってるんですけど現在、確認画面から修正画面に行くときにGETメソッドになってしまいます。 確認画面のソースです。 <form id="form1" name="form1" method="post" action="Auction.php?1=<?=$_POST['1'];?>"> 入力内容:<?=$_POST['1'];?> <input type="submit" name="Submit" value="修正" /><input type="submit" name="Submit" value="完了" /> </form> せっかくPOSTで受け取っているのに修正するときはGETになっていてちょっとおかしいですよね。。。 いまいち入力フォームは苦手項目なので分かりません。。。

    • ベストアンサー
    • PHP
  • フォームから受け取ったデータを変数に/PHP

    入力フォームからデータを送信し、受け取ります。 <form action="index.php" method="post"> <input type="text" name="hoge"> <input type="submit"> </form> <?php echo htmlspecialchars($_POST['hoge']); ?> この時に受けったデータが、「りんご」だとして この「りんご」を変数にしたいです。 ↓ <?php $keyword = "りんご"; ?> このようにするには、 <form action="index.php" method="post"> <input type="text" name="hoge"> <input type="submit"> </form> <?php echo htmlspecialchars($_POST['hoge']); ?> の後にどのような処理をすればよいでしょうか? または初めから「$keyword」としてフォームからデータを送ることはできるのでしょうか? 何卒ご指導の程よろしくお願いします。

    • ベストアンサー
    • PHP
  • 現在PHPにてsessionを使用したフォームを作成しております。

    現在PHPにてsessionを使用したフォームを作成しております。 現在、PHPは初心者で勉強中ですが悩んでいるため、ご質問させていただきます。 ソースは下記の通りです。 /* contact.php ----------------------*/ <html> <body> <form action="confirm.php" method="POST" > コメント:<br /> <?php echo $_SESSION['error_comment']; ?> <textarea name="comment"><?php echo $_SESSION['comment']; ?></textarea> <input type="hidden" name="contact" value="<?php $contact; ?>" /> <input type="submit" name="submit" value="確認" /> </form> </body> </html> /* confirm.php ----------------------*/ <?php session_start(); $comment = htmlspecialchars($_POST['comment']); if (isset($_POST["contact"])) { if (empty($comment)) { $_SESSION['error_comment'] = "コメントを入力してください!"; } if (!count($contact)) { $_SESSION["comment"] = $comment; header("Location: contact.php"); exit; } } else { $msg = '編集しました。'; } <html> <body> <?php echo $msg; ?> </body> </html> としております。 上記の内容でテストをするとcomment欄に入力されないと「コメントを入力してください!」と表示されますが、入力(テストと入力)をして確認をすると onfirm.phpのページは表示されずcontact.phpのcomment欄にテストと表示されたままです。 入力された場合はconfirm.phpを表示されせるにはどうしたらよろしいのでしょうか? お分かりの方がいらっしゃいましたら、ご教授お願いします。

    • ベストアンサー
    • PHP
  • フォーム送信後の更新ボタンでも$_POST変数が初期化されない

    フォームのサブミット後にプログラムが走るようになっているtest.phpがあるのですが、フォーム送信後に更新ボタンを押しても再度ポストされるようになってしまっています。 ブラウザの更新ボタンを押したときには、ポストせずにフォームをクリアしたいのですが、どうすればできますでしょうか? <form method="post" action="<?php print($_SERVER['PHP_SELF']); ?>"> <input type=text name=aaa> <input type="submit" name="submit" value="submit"> </form> <?php if($_POST['submit']) { 処理 } ?>

    • ベストアンサー
    • PHP
  • phpでSESSION変数の管理

    今私は、phpでページ間で変数をやり取りできる処理を作成しています。処理的には、ページAのテキストボックスtitleとテキストエリアsyosaiに入力された値をデータベースに追加し、ページBに画面を移動させるようにしたいと考えていますが、入力した値がnullになってしまい困っております。 ソースは以下のとおりです。 全部は書けませんので、怪しい部分だけ書きます。質問などがありましたら、その都度指摘をお願いします>△</ ページA ソース <form action="B.php" method="post"> <input type="text" name="title" value=""> <TEXTAREA name="syosai" cols="70" rows="10"> <input type="submit" name="b1" value="ページBへ"> <?php session_start(); if(!isset($_SESSION['title2']) || !isset($_SESSION['syosai2'])) { $_SESSION['title']=$_POST['title']; $_SESSION['syosai']=$_POST['syosai']; }else{} try{ $pdo = new PDO("mysql:host=localhost; dbname=****","****","****"); $stmt = $pdo->prepare("INSERT INTO user(clandername , syosai) VALUES(:rere3, :yuyu5)"); $stmt->bindValue(":rere3", $_SESSION['title']); $stmt->bindValue(":yuyu5", $_SESSION['syosai']); $stmt->execute(); }catch(PDOException $e){} ?> ページB ソース <form action="A.php"> <input type="submit" name="name" value="ページAへ" style="WIDTH: 70px; HEIGHT:50px"> <?php session_start(); ?> よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • セッションを使わずに遷移先画面に変数の値を渡すには?

    <input type="hidden" value="myID">みたいな隠しフォームで 行く先々の画面に値をPOSTで渡してきました。 他方、 header("Location: mypage.php") のように画面を遷移させる場合、遷移先の画面に $_POST["myID"]のように値を渡すことはできませんか? この場合session_start();を使って、$_SESSION["myID"]のように値を 渡す(保持する)のが王道なのでしょうか? セッションと聞くと何かとトラブルになりやすそうなイメージがあり、 できれば使いたくないのです。 具体的に説明しますと、前にこの掲示板で教えていただいた、次の例を使っています。 入力文字チェックをかけたいのでPHP_SELFで同じ画面を呼び出して、 問題なければmypage.phpにリダイレクトさせる枠組みですが、 header("Location: mypage.php");という風に遷移した場合は、 遷移先のmypage.phpでは、$_POST["myID"]はPOSTされてきませんよね (値を受け取れませんよね)?? 妙案あればご教示下さい。 <?php if ($_POST["reg"] == "" ) $errFlg = true; if (!$errFlg) {     if (strlen($_POST["myName"]) > 30) {       $errFlg = true;       $errStr["myName"] = "30字以下";     }   $errMsg = "エラー!!"; } if ($errFlg) { ?> <html>   <body>     <form method="post" action="<?php $_SERVER["PHP_SELF"] ?>">       氏名 <input type="text" name="myName" value="<?= $_POST["myName"] ?>"><?= $errStr["myName"] ?>       <input type="hidden" name="myID" value="<?= $_POST["myID"] ?>">     </form>     <input type="submit" name="reg" value="登録">   </body> </html> <?php } else {     $sql = "update mytable set myID = 'xxxx'";     $rst = mysql_query($sql, $con);     header("Location: mypage.php"); } ?>

    • ベストアンサー
    • PHP
  • フォームの値の受け取り

    今日は。フォームの内容の受け取りについて質問があります。よろしくお願い致します。 早速ですが、例えば、<form action="test.php" method="post"><input type="hidden" name="info" value="aiueo"></form> という情報を次のページの PHP で受け取るとなると、$_POST{'info'} としますよね、普通。いつもこれでできていたのですが、何故か今回は $info としないとできなくなってしまいました。間違いなく method="post" と指定しているのですが・・・・。 どうして動作にこの様に二通りのものが出てくるのかが知りたいのです。どっちで作ってよいやら分からず、困ってしまいます。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • フォームへの前回入力値をクリアーする方法は?

    以下のコードでフォームへの前回入力値を保持しています。 送信前は"RESET"ボタンで入力値をクリアーできますが、送信後は入力値をクリアーできません。(RESETボタンをクリックしても送信済$_POSTが表示されます)おそらくブラウザのキャッシュで$_POSTの値が保持されているためと思われますが、何らかのボタンクリックでこれらの$_POST値をクリアする方法をご存知に方、是非ご教授ください。 <?php $yyyy=$_POST[Y]; $mm=$_POST[M]; $dd=$_POST[D]; ?> <FORM action="<?=$_SERVER[PHP_SELF]; ?>" method="post" > <P>YYYY<INPUT size="10" type="text" name="Y" value="<?= $yyyy;?>"></P> <P>MM<INPUT size="10" type="text" name="M" value="<?= $mm;?>"></P> <P>DD<INPUT size="10" type="text" name="D" value="<?= $dd;?>"></P> <INPUT type="submit" name="submit" value="送信"> <INPUT type="reset" name="reset" value="reset"> </FORM>

    • ベストアンサー
    • PHP
  • 値の引渡し

    変数の受け渡しがうまくいかない・・ 助言お願いします。 【入力フォーム1】 <form action="confirm.php" method="post" target="_brank"> <input type="submit" name="which" value="A"> <input type="submit" name="which" value="B"> </form> 上の入力フォームから送信されてきたデータを 表示しながら次の入力フォームでデータを確認画面へとばす その際に【入力フォーム1】で入力された which と 日付関数 $now = date(Y) . date(m) . date(d). ":" . $count をCSVデータにおとしていく 【入力フォーム2】 // 日付関数 $now = date(Y) . date(m) . date(d). ":" . $count; // csvデータへ落とす値↓ $buf = "$now,$which\r\n"; import_request_variables("gP","" ); session_cache_limiter('private'); session_start(); $_SESSION['pageData'] = $_POST['which']; <html> <head> </head> <body> <form method="post" action="check.php"> <input type="hidden" name="submitflg" value="$submitflg"> <input type="hidden" name="name1" value="$name1"> //======================================================================== // ココ↓で次ページへ$nowの値を引き渡すことができなくて困ってます。 <input type="hidden" name="now" value="$now"> //======================================================================== <input type="hidden" name="which" value="<?=$_POST['which']?>"> ありがとうございます! ■さっき入力された値は:<br> <? echo $_SESSION['pageData'];?><br> ■ペンネーム <input type="text" name="name1"> </form> </body> </html>

    • ベストアンサー
    • PHP
  • ブラウザ終了時にセッションを削除する方法

    ログイン入力画面を作成し、以下の動作を確認しています。 (1)正常にログインしてブラウザを終了する。 (2)再びブラウザを起動してログイン後の画面を表示する。 (3)セッションがないため自動的にログイン入力画面へ移動する。 IEだとセッションが消えてログイン入力画面へ移動しますが、 Firefoxではセッションが消えず、ログイン入力画面へ移動しません。 Firefoxでもブラウザ終了後にセッションを消す方法はないでしょうか? 下記のプログラムで確認しました。 -------------------------------------------------------------------- login.php <?php session_start(); $error_message = ""; if(isset($_POST["login"])){ if($_POST["member_name"] == "php" && $_POST["pass"] == "pass"){ $_SESSION["login_name"] = $_POST["member_name"]; $login_url = "http://{$_SERVER["HTTP_HOST"]}/admin/anq_result.php"; header("Location: {$login_url}"); exit; } $error_message = "メンバー名かパスワードが間違ってます。"; } ?> <html> <body> <?php if($error_message){ print '<font color="red">'. $error_message. '</font>'; } ?> <form name="form1" method="post" action="login.php"> <p>メンバー名 <input type="text" name="member_name" value=""> <br> パスワード <input type="password" name="pass" value=""> <br> <input type="submit" name="login" value="ログイン"> </p> </form> </body> </html> ------------------------------------------------------------------------------------------------------------------------- anq_result.php <?php session_start(); if (!isset($_COOKIE["member_name"])) { unset($_SESSION["login_name"]); } if (!isset($_SESSION{"login_name"})) { $no_login_url = "http://{$_SERVER["HTTP_HOST"]}/admin/login.php"; header("Location: {$no_login_url}"); exit; } else { print "ログイン成功です。"; } ?>

    • ベストアンサー
    • PHP