• 締切済み

バージョン差かphp.iniの差で違いがおきています

いつもお世話になってます。 ローカルのPHP5.0.1環境で正常に動作していたものが、 一部分、実サーバーのPHP4.3.2で稼動させた時に不具合がおきてしまいます。 具体的には、セッションとPOST(フォームで)を利用した数ページで ページ内ではフォーム入力を4Pに渡り遷移し、5P目で内容確認6P目でDBへ登録データを入力。という流れになります。 その中で、各ページ毎にフォームに内容を記入されていなかった場合 次のページで該当のPOST値がNULLの場合メッセージ。という流れでやっています。 上記の流れで、ローカル環境では6P目のDB登録まで済んでいたのですが 本番サーバーで行うと、特定のフォームに何も入力せず次のページへ遷移すると、私が作ったメッセージが表示されずヘッダーとフッター部分のみ(単純なHTMLページ)しか表示されません。 色々試して、別のディレクトリにフォルダ名を変えておいてみたところ 今度はページを表示できませんというメッセージになってしまいます。 フォームの記入内容には、NULL値でも構わないものもあり 最初はそのNULL値でも問題ない内容を選択せずに遷移したところ、同減少がおき おかしいなと思い、引き続き調査していた所、 次ページでPOST値をSESSIONに代入している部分を、if文によってNULLでなかった場合代入とした所 ページ遷移できるようになりました。 一安心かなと思い、全ページに同処理を施したのですが それでもやはりNULL値でも同現象がおきてしまう場合が発生ありました。 完全に手詰まりな状態です・・・ 何かアドバイスなど頂戴できればと思い投稿しました。 足りない情報などあると思いますので、指摘してくだされば説明させて 頂きたいと思います。 長文な上に分かり辛い説明で申し訳ありませんが宜しくお願い致します。

  • hepin
  • お礼率40% (8/20)
  • PHP
  • 回答数1
  • ありがとう数1

みんなの回答

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

ソースがないため正確な回答はむずかしいですが、 POST値の受け渡し方が間違えているのでは? どのようにしているか書くとフォローがつきやすいかと。 またテスト環境の方が実行サーバーより新しい環境にあるというのは 致命的です。 仮に今回の解決しても、いずれまた同じような状況になりかねませんので テストサーバーをダウングレードする、もしくは実行サーバーを アップグレードする・・・せめてメインバージョンだけでもあわせる 必要があるでしょう。

hepin
質問者

補足

ありがとうございます。 ソースですが、受け渡し部分はこのようになっております。 以下 <?PHP session_cache_limiter('private, must-revalidate'); session_start(); require('../../db.inc'); require('../../../class/function.php'); ?> <?PHP include("../../../layout/header.php") ?> <div id="content"> <?PHP //POSTデータ変数代入 $session = $_GET['session']; $c_id = $_POST[c_id]; $m_id = $_SESSION[m_id]; $a_id = $_POST[a_id]; $m_count = $_SESSION[m_count]; if($_POST[ex_m_id] != null){ $_SESSION[ex_m_id] = $ex_m_id; } if($_POST[a_id] != null){ $_SESSION[a_id] = $a_id; } if($_POST[late_m_id] != null){ $_SESSION[late_m_id] = $late_m_id; } 上記のような形で、POSTとSESSIONが混在しています。 POSTとSESSIONの使用方法ですが、 POST:フォームからの入力値(つまり前ページの入力値)または配列以外の変数 SESSION:1Pから3P以降に引継ぎが必要な配列や多次元配列 という感じでやっています。 おそらくPOSTとSESSIONを変数に代入する時に、NULLの場合エラーがおきているようなのですが、そういうものなのでしょうか? エラー表示も行われず(表示する設定になってます)、ディレクトリによってはページが表示できないような状況なのですがいかがでしょう・・・

関連するQ&A

  • php セッション 戻る時に消える

    php セッション 戻る時に消える お世話になっております。 ページ遷移においてデータの受け渡しをセッションを利用して行っております。 「入力ページ」⇒「確認ページ」⇒「完了ページ」 確認ページでpostデータをセッションに格納しております。 そこで質問です。 「入力ページ」⇒「確認ページ」⇒「入力ページ」の場合、確認ページでセッションに格納しているデータを、 入力ページに戻った段階で呼び出すことは可能でしょうか。 そもそも戻った場合はセッションは消去されてしまうのでしょうか。 ちなみに、「入力ページ」はhtmlですが、phpを使用できる状態にしてあります。 色々と検索したのですが私の力不足で該当する内容にめぐり合えませんでした。 お力をお貸しください。

    • 締切済み
    • PHP
  • フォームについて

    お問い合わせフォームの流れについて質問です。 現在の流れを書きますと・・・ 1:フォームに入力し確認ボタンをクリック 2:エラーチェックを行う 2-a:エラーがあればページ移管せずメッセージ表示 2-b:エラーがなければPOST値をSESSIONに代入し確認画面へリダイレクト 3:確認画面で送信ボタンをクリックで送信ページにリダイレクト 4:送信ページでメールの送信を行いSESSION破棄 こんな流れが自分の中で基準となっているのですが、セッションだと最終的に リダイレクトするので、確認画面から入力画面に戻ると入力値が消えることや IEでページがうまく表示されないことがあるので、できるだけPOSTで対応したく 思っております。 入力画面でformのactionを自分自身としているので、これを確認用のページに 指定してやれば問題ないのですが、エラーがあろうがなかろうが確認用のURLに 変わってしまいます。 エラーがあるうちは、画面移管させたくないので何かいい方法はないかと思って いるのですが、皆さんはどのような流れでフォームを作成しているのでしょうか? おおまかな流れで結構ですのでアドバイスをいただければと思っております。

    • ベストアンサー
    • PHP
  • PHP セッション情報のDBへの受け渡し

    お世話になります。 標題の件について、以下のとおり説明します。 (1)1ページ目:入力フォームで入力した情報をセッションに保持 (主にプルダウンメニューの情報とテキスト) submitボタンで次画面へ ↓ (2)2ページ目:サムネイル写真をクリックした情報を保持+インラインフレームで拡大写真表示 (クリックした情報をプルダウンメニューに表示してセッションへ保持) submitボタンで次画面へ ↓ (3)3ページ目:サムネイル写真をクリックした情報を保持+インラインフレームで拡大写真表示 (クリックした情報をプルダウンメニューに表示してセッションへ保持) submitボタンで次画面へ ↓ (4)4ページ目:上記内容の確認画面 submitボタンで次画面へ ↓ (5)送信 現状、上記の流れでセッション情報を保持しつつメールでの送信が確認出来ています。 ですが、ページ遷移で確認画面から前画面へ戻って、例えば2ページ目の写真を変更して、submitで次画面へ遷移すると、3ページ目の情報がなくなり新たに写真を選択する必要になってしまいます。 なので、ページを前後遷移しても情報が保持された状態にするには、どうすれば良いでしょうか? データベースを使わないと出来ないことでしょうか? データベースに関しても勉強しておりますが、セッション情報をDBへ登録して、その後ページを遷移した場合に、データベースから呼び出すようなイメージなのでしょうが、それにはどうすれば良いのかが不明です。 お手数ですが、ご教授の程、よろしくお願いします。

    • ベストアンサー
    • PHP
  • セッションを使用したページ遷移

    こんにちは、質問です。 現在趣味で制作しているPHPを利用したシステムで フォームからDBへ多くのデータを登録する処理を記述しています。 計4Pのページをフォームにより遷移しながら最終ページでデータ挿入をする風に考えているのですが セッションとPOSTメソッドを使用してデータの引継ぎを行っていると、ブラウザの「戻る」ボタンを押した時に以前のページが有効期限切れとなってしまい、データを戻って入力しなおしたい時に最初からやり直さなければならない状態になっています。 こういった状況を回避するにはどのような手段がスタンダードなのでしょうか? 確かセッションを使用せずにPOSTメソッドのみで行った場合はブラウザの「戻る」ボタンを使用してもデータが保持されていました よろしくおねがいします 環境はPHP4 MySQL3です!

    • 締切済み
    • PHP
  • PHP入力フォームについて

    現在入力フォームを作っています。 流れとしてはDBに入っている会員情報をフォーム上に呼び出して(各inputにはDB内の会員の情報が表示される)各会員が自分の情報を編集できるというフォームです。 ここで質問なのですが、会員の人が自分の入力内容を変更した際に入力漏れがあるとフォーム画面に戻るのですがその際に入力した内容が表示されるのではなくDB内のデータが表示されてしまいます。 これをDB内のデータではなく入力した内容にしたいのですが、どうしたらよろしいでしょうか? ソースは下記になります。 form.php <?php DB呼び出し・・・ $_SESSION['name'] = $row['name']; ・・・ ?> <?php echo $_SESSION['err_name']; ?> <input type="text" name="name" value="<?php echo $_SESSION['name']; ?>" /> confirm.php <?php $name = htmlspecialchars($_REQUEST['name']); if(!strlen($name)) { $_SESSION['err_name'] = '氏名を入力してください。'; $errFlag = true; } else { unset($_SESSION['err_name']); } エラーの時はform.phpに戻る ?> <?php echo $name; ?> としています。 とても省略していますが、お分かりの方がいらっしゃいましたら教えていただけると助かります。

    • 締切済み
    • PHP
  • <?php

    <?php session_start(); $_SESSION['name'] = $_POST['name']; $_SESSION['kana'] = $_POST['kana']; $_SESSION['nick'] = $_POST['nick']; $_SESSION['sex'] = $_POST['sex']; $_SESSION['pass'] = $_POST['pass']; $_SESSION['pass2'] = $_POST['pass2']; $_SESSION['mail'] = $_POST['mail']; if(empty($_SESSION['name'])) { $_SESSION['error'] = '名前を入力して下さい'; } if(empty($_SESSION['kana'])) { $_SESSION['error'] = 'フリガナを入力して下さい'; } if(empty($_SESSION['pass'])) { $_SESSION['error'] = 'パスワードを入力して下さい'; } if(empty($_SESSION['pass2'])) { $_SESSION['error'] = '確認用パスワードを入力して下さい'; } if($_SESSION['pass'] and $_SESSION['pass2'] and ($_SESSION['pass'] != $_SESSION['pass2'])){ $_SESSION['error'] = 'パスワードが一致しません'; } if (preg_match("/^[a-zA-Z0-9]{4,12}$/", $_SESSION["pass"])){ $_SESSION['error'] = 'パスワードは半角英数字で入力して下さい'; } if(isset($_SESSION["error"])) { header("Location: regist.php"); exit; } else { header("Location: index.php"); exit; } ?> で、PCからみるとエラーメッセージがでるのですが、自分の携帯(ドコモ)でみるとエラーメッセージが表示されていません・・・ なぜでしょうか?><; フォーム画面のソースは <?php if (isset($_SESSION["error"])) { echo $_SESSION["error"]; session_destroy(); } ?> </font> <font size="2"> <form action="error_check.php" name="form" method="post"> //ここからフォーム内容 です。 ご教授のほど宜しくお願い致します><;;;;;;; 補足 >GETで、セッション名に、session_id()で取得した値を渡してやる必要があります。 それはいったいどうやるんですか?><; 簡単でいいのでソースとか記述してくださればわかりやすいです><; お願い致します><;

    • 締切済み
    • PHP
  • フォームの構築

    phpで以下のような流れのフォームをつくっています。 基盤となる流れで問合せでも会員登録でもフォームの流れは共通です。 1:入力ページ 2:確認ページ 3:送信完了ページ ※入力ページと確認ページでは、自分自身にPOSTしてます 入力ページで送信ボタンを押すとデータチェック(未入力や妥当性)を行います。 ここでエラーがあればエラーメッセージを各フォームの項目の下に表示しページ移管しません。 エラーがない場合にはPOST値をSESSIONに格納し確認ページへリダイレクトします。 ※確認ページの各項目の表示値はSESSION値を利用 確認ページのボタンは送信ボタンのみで戻るボタンは用意していません。必要であればブラウザの戻るで戻ります。 送信ボタンを押すと送信完了ページへリダイレクトしメール送信等の必要な処理を行います。 いちいちSESSIONを利用しないでPOSTで済ませるべきという意見もあるのですが一般的にどちらがいいのでしょうか? 確かにSESSIONを利用しない場合、処理は楽になる事もあるのですがPOSTした瞬間に ページ移管してしまうので各フォームの下にエラーメッセージの表示はできないですよね? また、hiddenを使う事によって目には見えないもののソース上では見れるので セキュリティ的にもあまりよくないという事もあるのでどちらがいいものか迷っております。 問題なく動作はしているので構築方法についてアドバイスやいい方法がありましたら教えてください!

    • ベストアンサー
    • PHP
  • フォームの入力値のセッション破棄は?

    Aフォームがありまして、入力して確認ボタンを押し、セッションに入力値が格納されたけど、途中でBフォームへ行ってしまった、という場合、いつまでもAフォームの入力値をセッションに格納しておいても使わないですし、セッション変数名が競合して予期しない動作をしても困るので、他のページへ遷移した時点でAフォームの入力値セッションを削除するようにしたいのですが、実装方法としては、URLまたは絶対パスをセッションに入れといて、画面遷移するごとにそのセッションとURLまたは絶対パスを突き合わせ、一致しなければ削除、というやり方で問題ないでしょうか? ロードバランサ使ってても同一ページなら絶対パスは変わらないのでしょうか??詳しくないんですが…。 美しい実装方法をご教示ください…。

    • ベストアンサー
    • PHP
  • PHPのフォームでエラーが出ます

    どなたかお力添えをお願いします。 【全体の流れ】 step1.php ラジオボタンで、商品を3種類選択する template.php 選択した商品名を表示し、金額を計算して表示する step2.php 「template.php」を表示し、規約に同意する step3.php 個人情報入力画面へ ・ ・ ・ という流れでフォームを作っていますが、step1.phpでつまずいています(涙)。 step1.phpのコード(html部分は省略してます)は以下のとおりです。 商品を3つ選んだ場合は、問題なく実行できるのですが、1つ、または2つ選択 した場合、画面上部に Notice: Undefined index: plan in C:\xampp\htdocs\step1_1.php on line 10 Notice: Undefined index: uq in C:\xampp\htdocs\step1_1.php on line 11 などとエラーメッセージが出ます。 ほかは正常に動いています。このメッセージを出なくさせる方法をぜひ、教えてください! よろしくお願いいたします。 <?php session_start(); $error = ""; if(isset($_POST["submit"])==TRUE){ $_SESSION["product1"]=$_POST["product1"]; $_SESSION["product2"]=$_POST["product2"]; $_SESSION["product3"]=$_POST["product3"]; $choice1 = $_SESSION["product1"]; $choice2 = $_SESSION["product2"]; $choice3= $_SESSION["product3"]; //未入力チェック if($choice1== null){ $error .="端末を選択してください<br />"; } if($choice2== null){ $error .="プランを選択してください<br />"; } if($choice3== null){ $error .="UQ Wi-Fiサービスの利用有無を選択してください<br />"; } if($error == null){ $url = "step2.php"; header("Location: ".$url); exit(); } } ?>

    • ベストアンサー
    • PHP
  • php フォーム開発 IE9のみセッション消滅

    フォーム機能での、「入力画面」>「確認画面」>修正するボタン>「入力画面」 という流れの中の、ブラウザIE9でのセッションの消滅について質問させてください。 はまってしまってから3日になります。とうとう力尽きました。 IE9以外の下位バージョンやFireFoxでは問題なく動きます。 まず、環境から。 xmpp 1.7.3 PHP 5.3.1 MySQL 5.1.41 Smarty 3.0.7 ※同一ドメインで、フォームを複数運営させるため、 各フォームのそれぞれの項目(ラジオ,チェックボックス,テキストエリアなど)を管理画面から一意の値と共にDBに格納しています。 各フォームを表示する際は、その一意の値を呼び出して出力しています。 次に、処理の流れです。 (1)「入力画面」では、各入力項目をDBから取得し、少し整形してフォーム画面を出力しています。 Smartyを使っていますので、テンプレートへ アサインする形です。 ※この際、$_SESSION["f"]["no"]に、フォームを大別する一意の値を入れています。 閲覧者が入力した内容は、自身「入力画面.php」にポストして、 空の判別後、$_SESSION["f"]["別の一意の数値"]に保存します。 その直後、エラーチェック関数にそのセッションを通して、通過すれば「確認画面」へリダイレクトします。 /*下記のように*/ $url = "http://".$_SERVER["HTTP_HOST"].dirname($_SERVER["SCRIPT_NAME"])."/確認画面.php"; header("Location: ".$url); exit; (2)「確認画面」では、 「入力画面」を経由したかどうかをphpの先頭でチェックします。 上述の$_SESSION["f"]["別の一意の数値"]を使って、同じエラーチェック関数で審査を行い、 通過すれば「確認画面」を表示するようにしています。 ※実際は、このチェックの前に$_SESSION["f"]["no"]を使ってDBから値を取得したりしています。 /*下記のように*/ $p[2]=フォーム取得関数($_SESSION["f"]["no"]);//DBからフォームに関する個別の値を取得。 if(count($p[2])!=0){ if(エラーチェック関数($_SESSION["f"])){ //エラー 入力画面経由ではないので 「入力画面」へ戻す $url = "http://".$_SERVER["HTTP_HOST"].dirname($_SERVER["SCRIPT_NAME"])."/入力画面?no=".$_SESSION["f"]["no"]; header("Location: " . $url); exit; } }else{ //エラー フォーム関連パーツを取得できないので 「入力画面」へ戻す $url = "http://".$_SERVER["HTTP_HOST"].dirname($_SERVER["SCRIPT_NAME"])."/入力画面?no=".$_SESSION["f"]["no"]; header("Location: " . $url); exit; } (3)問題なければ、 「確認画面」が表示されます。 (4)内容を修正するのであれば、 「修正するボタン」を押して >「入力画面」へと遷移させます。 /*下記のように*/ <テンプレート内> <form action="確認画面.php" method="post"> <input type="submit" name="modify" value="   修正する   "> </form> <確認画面.php内> if(isset($_POST["modify"]){ $url = "http://".$_SERVER["HTTP_HOST"].dirname($_SERVER["SCRIPT_NAME"])."/入力画面?no=".$_SESSION["f"]["no"]; header("Location: ".$url); exit; } (5)確認画面からゲットでnoの値を受ける(入力画面にて) <入力画面.php内> if(isset($_GET["no"]) && is_numeric($_GET["no"])){ //$_GET["no"]つまり$_SESSION["f"]["no"]を使ってDBの値取得 } そしてセッションを維持したままなので、前回の入力項目を修正することができる。 これらの一連の流れは、IE9以外だと正しく動きます。 IE8も含めIE7 IE6 でも正常に動きます。 しかし、(4)の段階で、$_SESSION["f"]["no"]の値が消滅している為か、「入力画面」へと戻ることができません。 細かく言えば、(2)や(3)の段階(最初の「確認画面」へと遷移した時点)では、$_SESSION["f"]["no"]値は生きているようです。 (4)の段階の修正するボタンを押すと消滅しているようです。 <form action="確認画面.php" method="post"> <input type="submit" name="modify" value="   修正する   "> </form> これをポストして、自身「確認画面.php」に再度アクセスすると、 $_SESSION["f"]["no"]が消滅しているようです。 ただ、おかしなことに、確認画面.php内のどこかに print_r(変数); 入れてやると、一応_SESSION["f"]["no"]の値は維持されるようで、 元の入力画面へと遷移できてしまいます。 ※ただ、元の入力画面に戻ったときには、_SESSION["f"]["no"]は消えているようです・・・・。 ※print_rが発動したphpファイルだけが大丈夫なようです。 いろいろネットで検索をかけました。 ドメインにアンダーバーを使ってはダメだとか、session_idやname のことも調べましたが、 どうも該当している問題ではなさそうなんです。 セッションについて理解が深くない自分ですが、session_idが関連づいていない? 他のブラウザやバージョンでは問題なしだが、 IE9のみ特殊な仕様で、header("Location: " . $url);を使うとセッションを関連付けしてくれない? ということなのかなと推測していますが。 もう自分の力量ではどうにもならず・・・・。 そもそも上記のプログラムの流れで、 他のフォームも沢山作ってきましたが、いままでこのような問題には遭遇しませんでした。 正しく稼動しています。 「入力画面」から「確認画面」へは、セッションを使って安全に遷移したいので、 他の方法をとるのは厳しいかなと・・・。 どうぞお力をお貸しください。 何卒よろしくお願いします。

    • 締切済み
    • PHP