• 締切済み

PHP セッションの受け渡し失敗 IEはOK

PHP セッションの受け渡し失敗 IEはOK いつもお世話になっております。 phpで3つのページに渡りデータを引き渡したいのですが、 ブラウザによって成功したり失敗したりしています。 成功・・・IE 失敗・・・GoogleChrome,Firefox,safari,opera a.html(charset=UTF-8) ⇒ b.php(charset=shift_jis) ⇒ c.php(charset=shift_jis)という流れです。 a.html hiddenでpost送信 b.php postデータをsessionへ格納 c.php echoしても表示されない という感じです。 ちなみに、b.phpで格納したセッションデータはc.phpでechoできます。 「a.html」 <form action="b.php" method="post" target="_top">   <input type="hidden" name="cp_name" value="あああ株式会社"> </form> 「b.php」 session_start(); $_SESSION["cp_name"] = mb_convert_encoding($_POST["cp_name"], 'Shift_JIS', 'UTF-8'); 「c.php」 session_start(); echo "[ 販売元 : ".$_SESSION["cp_name"]." ]"; 表示失敗 どなたかご教授頂ければと思います。 何卒宜しくお願い申し上げます。

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

みんなの回答

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

まさかとは思いますが、ご利用のブラウザでクッキーを使用禁止にしていたり しませんよね?

jipang5054
質問者

補足

ご指摘ありがとうございます。 クッキーは有効にしております。 html,PHPに関しては初心者に少し毛が生えた程度の知識ですので、 単純なところで失敗しているかもしれません。 他にお気づきの点がございましたらご教授宜しくお願い申し上げます。

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

うーん、失敗状態を再現できないのですが b.php、c.phpで任意にhttpヘッダ、encodeの指定、metaの指定をしてみては? //b.php <?PHP header("Content-Type:text/html;charset=Shift_JIS"); mb_internal_encoding("SJIS"); ?> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> いいい <?PHP session_start(); $_SESSION["cp_name"] = mb_convert_encoding($_POST["cp_name"], 'SJIS', 'UTF-8'); echo session_encode(); ?> <a href="c.php">移動</a> //c.php <?PHP header("Content-Type:text/html;charset=Shift_JIS"); mb_internal_encoding("SJIS"); ?> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> ううう <?PHP session_start(); echo "[ 販売元 : ".$_SESSION["cp_name"]." ]"; ?> 完了

jipang5054
質問者

補足

早速のご連絡ありがとうございます。 ご指摘ありがとうございました。 テストしてみましたが、 //b.php の echo session_encode(); ではしっかりとデータは入っておりますが、 やはりc.phpで表示されません。 ちなみに、 <input type="submit" name="submit" value="商品購入確認画面へ" class="button-01" /> で移動しております。 そのほかの設定がどこかおかしいのでしょうか。 引き続きご指導をお願い申し上げます。

  • t_ohta
  • ベストアンサー率38% (5081/13277)
回答No.1

b.php の文字コード変換で 'Shift_JIS' を指定していますが、そんな文字エンコーディングはありません。 'SJIS' または 'SJIS-win' が正しい指定になります。

jipang5054
質問者

補足

早速のご連絡ありがとうございます。 ご指摘ありがとうございました。 $_SESSION["cp_name"] = mb_convert_encoding($_POST["cp_name"], 'SJIS', 'UTF-8'); としましたら、safariで表示ができるようになりました。 ありがとうございました。 しかし、他のChrome,firefox,operaは以前表示されません。 引き続きご指導をお願い申し上げます。

関連するQ&A

  • SESSION受け渡し

    SESSION受け渡し 毎回大変お世話になっております。 PHP初心者なので、変な質問になっているかもしれないのですが、どうか分かる方はお付き合いください。 環境 PHP 文字コード:Shift-JIS SESSION01.php から SESSION02.php へSESSIONを受け渡した場合、統一されるはずのSESSION変数($_SESSION["name"])が2つ作成されてしまい、別々の変数として扱われてしまいます。 ・ソース SESSION01.php(SESSION送信側) <?php session_start(); $_SESSION["name"] = "1"; echo $_SESSION["name"];  ←変数の中身は[1] ?> SESSION02.php(SESSION受信側) <?php session_start(); echo $_SESSION["name"]; ←変数の中身は何も無し ?> ・SESSIONのディレクトリ sess_eo683vtfgl5qk6d2o31ghcjpn7     1KB sess_nq1cikn5uhdlnc9uvii6b8l281     0KB SESSION変数($_SESSION["name"])をSESSION01.phpとSESSION02.phpの両方で同じ変数として扱いたいのですが、別々の変数の様な扱いになっております。 なぜSESSION変数が統一されていないか分かる方がいらっしゃいましたら、どうかご意見をお聞かせください。

    • 締切済み
    • PHP
  • ファイル間のデータの受け渡しについて hidden? session?

    1.php (フォームを表示) 2.php (入力内容の確認ページ) 3.php (最後のページ、送られた値を使用し、メール送信やデータベースに書き込むなどの処理をしたい。) とhiddenを使い、3つのファイルを作成しました。 ファイル"1.php" <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title></title> </head> <body> <form action="2.php" method="post"> <input type="text" name="data1" value="データその1"> <input type="hidden" name="data2" value="隠しデータ"> <input type="submit" name="" value="送信"> </form> </body> </html> ファイル"2.php" <?php echo "<h1>確認ページ</h1>"; echo $_POST[data1]."<BR>"; echo $_POST[data2]; print<<<_HOGE_ <form action="3.php" method="post"> <input type="hidden" name="data1" value="$_POST[data1]"> <input type="hidden" name="data2" value="$_POST[data2]"> <input type="submit" name="" value="送信"> </form> _HOGE_; ?> ファイル"3.php" <?php echo $_POST[data1]."<BR>"; echo $_POST[data2]; ?> 2.phpの(入力内容の確認ページ)を見ているときに、他の人が2.phpにアクセスして入力内容を盗み見る事は出来るのでしょうか? (2.phpに直接アクセス出来ないように、リダイレクト処理はするつもりですが。) 2.phpから3.phpに値を渡す場合、このようなhiddenの使い方は間違っていますか? セッションを使った方が良いのでしょうか?

    • ベストアンサー
    • PHP
  • htmlとphpのデータ受け渡し???

    いつもお世話になり誠にありがとうございます。 標記の件。 まだ、ボク自身、解っていないようです。 htmlとphpのソースコードを提示します。 どうすればデータの受け渡しができるか? 添削してくださらないでしょうか? html <!--入力画面--> <form action = "./Blog.php" method = "get"> <label class="label" for="name">お名前(ニックネーム)</label> <center><input id="name" type="text" name="name"></center> <label class="label" for="e-mail">メール</label> <input id="e-mail" type="e-mail" name="e-mail"> <label class="label" for="category">カテゴリー</label> <input id="category" type="category" name="categoryl"> <label class="label" for="message">本文</label> <textarea name="area1" style="color:rgb(8, 8, 8); font-size:100%;" cols="50" rows="30"></textarea><br> <input type="submit" name="confiem" value="確認"> </form> CSS <meta charset="utf-8"> <?php session_start(); $mode = 'input'; if( isset($_POST['back']) && $_POST['back'] ){ //何もしない } else if( isset($_POST['confirm']) && $_POST['confirm'] ){ $_SESSION['name'] = $_POST['name']; $_SESSION['e-mail'] = $_POST['e-mail']; $_SESSION['category']= $_POST['category']; $_SESSION['message'] = $_POST['message']; $mode = 'confirm'; } else if( isset($_POST['send']) && $_POST['send'] ){ $mode = 'send'; } else { $_SESSION['name'] =""; $_SESSION['e-mail'] =""; $_SESSION['category']=""; $_SESSION['message'] =""; } ?> <!--確認画面--> <?php if( $mode == 'input' ){ ?> お名前(ニックネーム)<?php echo $_POST['name'] ?><br> Eメール<?php echo $_POST['e-mail'] ?><br> カテゴリー<?php echo $_POST['category'] ?><br> 本文<br> <?php echo nl2br($_POST['message']) ?><br> <input type="submit" name="back" value="戻る" /> <input type="submit" name="send" value="送信" /> <?php } else { ?> <!--完了画面--> <?php } ?> 上記の通りです。 全然ダメだと思います。 添削のほど、宜しくお願い申し上げます。

    • ベストアンサー
    • 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で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
  • PHPのセッションについて。

    <?php if(isset($_POST['cmdSubmit'])){ session_start(); $user = $_POST['user_name']; $_SESSION['user_name'] = $user;  header('Location:./test.php'); } ?> アンケートフォームの内容をセッションに入れて 別ページで <?echo $_SESSION['user_name'];?> という感じで出力させたいのですがうまく行きません。 セッションに登録されているかチェックするために 移動する前にecho $_SESSION['user_name']; で内容が表示されるかどうか確認したのですが そのときは問題なく内容が表示されるので、 headerで他のページに移動する前までは問題なさそうだと思います。 なにかアドバイスいただけたらとおもいます。 よろしくおねがいします。

    • ベストアンサー
    • 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
  • $_SESSIONの取りだし方、使い方PHP

    質問失礼いたします。 【1.html】から【A.php】に$_POSTされた値を、$_SESSIONにて下記の通りに格納しています。 $name = $_POST['name']; $_SESSION['name'] = $_POST['name']; $address = $_POST['address']; $_SESSION['address'] = $_POST['address']; $gender = $_POST['gender']; $_SESSION['gender'] = $_POST['gender']; そして、上記の$_POSTされた値を使って、データを検索し20件ずつ表示させて改ページを行っています。 <?php if ($page > 1) { ?> <li><a href="search2.php?page=<?php print($page - 1); ?>">前のページへ</a></li> <?php } else { ?> <li>前のページへ</li> <?php } ?> <?php if ($page < $maxPage) { ?> <li><a href="search2.php?page=<?php print($page + 1); ?>">次のページへ</a></li> <?php } else { ?> <li>次のページへ</li> <?php } ?> 違うかもしれませんが、 アドレスに  &name=○&address=○&gender=○  という風にして、次のページではアドレスにある値を使う みたいなこととは思うのですが、   &name=<?php print($name; ?> とすると、アドレスでは  &name=Array となってしまいます。 セッションに格納した検索条件を次のページにも使うようにはどのようにすればよいのでしょうか。 また、上記の次ページのアドレスに、  &name=○&address=○&gender=○  と表示しないようなやり方もあるのでしょうか?

    • ベストアンサー
    • 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
  • PHPの入力フォームのセッションによる値の受け渡し

    PHPの入力フォームに関するフォームの 値の受け渡しについての質問です フォームのフィールドの値の名前はtitleです で$_POSTで値を受け取って$_SESSIONに値を 格納、変数で出力という感じにしたいと思い こう書きました <?php session_start(); $_POST['title']=$_SESSION['tit']; $_SESSION['tit']=$title; ?> <html> <head> <title>test</title> </head> <body> <?php echo $title; ?> </body> </html> こう書いたのですが、値が表示されません 画面が真っ白になってなにも見えないです なにがおかしいのか教えてください issetはあえて使わず書いたのですが それがいけなかったのでしょうか?

    • 締切済み
    • PHP

専門家に質問してみよう