DBのWHERE〜ANDの使い分けをphpで処理する方法

このQ&Aのポイント
  • phpを使用して、DBのWHERE〜ANDを適切に処理する方法について解説します。
  • 30個のinput値を取得し、それぞれの値に基づいてWHERE句を動的に作成します。
  • また、input値が存在する場合にのみWHERE句を生成し、値に基づいて絞り込みを行います。
回答を見る
  • ベストアンサー

DBのWHERE~ANDの使い分けをphpで処理

<input type="text" name="aaaaa" value=""> <input type="text" name="bbbbb" value=""> <input type="text" name="ccccc" value=""> このinputは全部で30個あります。DBには30個のカラムがあって、 対象のカラムと比較する値valueが""のときはWHERE以降をやらないで、 1つ以上のときはWHERE句をやってANDで繋げて絞り込んでいきたいです。 $_GETのキー名とその対象のカラム名は別々につけています。 $_GETの値は文字列や数字が入ります。 <?php mb_http_output('UTF-8');/*ajaxの読み込みにつかうファイルのため*/ mb_internal_encoding('UTF-8');/*ajaxの読み込みにつかうファイルのため*/ if(isset($aaaaa) && strlen($aaaaa)>0){ $aaaaa = mb_convert_encoding($_GET['aaaaa'], "UTF-8"); htmlentities($aaaaa, ENT_QUOTES); $test1["id"] = $aaaaa; } if(isset($bbbbb) && strlen($bbbbb)>0){ $bbbbb = mb_convert_encoding($_GET['bbbbb'], "UTF-8"); htmlentities($bbbbb, ENT_QUOTES); $test1["name"] = $bbbbb; } if(isset($ccccc) && strlen($ccccc)>0){ $ccccc = mb_convert_encoding($_GET['ccccc'], "UTF-8"); htmlentities($ccccc, ENT_QUOTES); $test1["textdata"] = $ccccc; } /*あと27個つづきます*/ mysql_set_charset('utf8'); $my_1 = "SELECT * FROM tablename"; if(isset($test1) && !$test1==null){ foreach($test1 as $key => $value){$test2 = $key;} $my_1 .= " WHERE "; while($test1--){ $my_1 .= $test2."=".$test1[$test2]." AND "; if($test1==0){$my_1 .= $test2."=".$test1[$test2];} } $my_1_q = mysql_query($my_1,$mysql); } /*$my_1を他のとこでも使いたい*/ $my_2 = $my_1." ORDER BY id LIMIT 0,10"; $my_2_q = mysql_query($my_2,$mysql); $my_3 = "SELECT COUNT(*) AS ccc FROM tablename WHERE name='$aaaaa' AND bbbbb='$bbbbb'"; $my_3_q = mysql_query($my_3,$mysql); if(!$my_1_q && !my_2_q && !$my_3_q){die(mysql_error());} こんなかんじでやったのですが、クエリの作成でエラーになってしまいます。 できれば最初のifがいっぱい続くのももっと上手にできるようにしたいです。

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

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

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

こんにちは。 何故エラーになるかのエラー内容を添付してもらえると回答が付き易いと思います。 また、SQLのエラーの場合はどういうSQLが生成されたかをprint等で画面に表示してみると修正のきっかけ見つかるかもしれません。 以下のような感じで実装できると思います。 入力内容のチェック等セキュリティについては省いていますのでその辺は実装して下さい。 またPOSTで書いています。ここは環境に合わせて下さい。 動作原理としてはパラメータ名とカラム名が違うのでそれを紐付ける連想配列を用意しています。 これによりformから送信されたパラメータ名がどのカラムであるか判断します。 あとは送られてきたパラメータとカラム名を紐付けながら条件を生成します。 ループ内での判断が面倒でしたので必ず" and カラム名='パラメータ値'"で条件を生成しておきます。 そのまま処理をすると select * from TABLENAME where and id='value' というSQLになってしまいますので and以降をwhereにくっつけます。 <?php // パラメータ名とカラム名を紐付けるマップ $key = array ( 'aaaaa' => 'id', 'bbbbb' => 'name', 'ccccc' => 'textdata', 'ddddd' => 'value1' ); if ( isset($_POST) ) { $sql = "select * from TABLENAME"; $where = ""; foreach ( $_POST as $k => $v ) { // 送信内容をループ if ( isset($key[$k]) && $_POST[$k] !== "" ) { // 送信内容のキーがカラム名マップに存在し、 // 送信内容が入力されていたら条件に追加 $value = mb_convert_encoding ( $_POST[$k],"UTF-8" ); $where .= " and " . $key[$k] . "='" . $value . "'"; } } if ( strlen($where) > 0 ) { // 条件が追加されている場合はSQLに追加する // $whereの先頭には" and"が無条件に入っているためand以降をwhereに追加する $where = " where " . substr($where,4); $sql .= $where; } } ?>

juju-juju
質問者

お礼

mb_convert_encodingとhtmlentitiesをまとめていっぺにできる方法があったので、それも使って直してみました。ちゃんと動くようになりました。ありがとうございます。 >if ( isset($key[$k]) && $_POST[$k] !== "" ) { 空白のチェックで != としないで !== するのは「0」への対策ですか? <?php mb_http_output('UTF-8'); mb_internal_encoding('UTF-8'); //-------------------------- //初めの値を設定 //-------------------------- $get['aaaaa'] = ""; $get['bbbbb'] = ""; $get['ccccc'] = ""; //30個分つづきます。 $get['zzzzz'] = 10; //表示数 $get['ppppp'] = 1; //ページの番号 //-------------------------- //$_GETは全部、中身がどうあれ処理させます function abcdef($str) { $str = mb_convert_encoding($str, "UTF-8", "UTF-8"); $str .= htmlentities($str, ENT_QUOTES, "UTF-8"); return $str; } if (isset($_GET)){ foreach($_GET as $key => $val){ $get[$key] = abcdef($val); } } $key = array( $get['aaaaa']=>'id', $get['bbbbb']=>'name', $get['ccccc']=>'textdata' ); $my_1 = "SELECT * FROM infotable"; $where = ''; foreach($key as $k => $v){ if(isset($key[$k]) && $key[$k] !== ''){ $where .= " AND ".$key[$v]."='".$key[$k]."'"; } } if(strlen($where)>0){ $where = " where ".substr($where,4); $my_1 .= $where; } $my_2 = $my_1." ORDER BY id LIMIT 0,10"; $my_3 = "SELECT COUNT(*) AS CNT FROM tablename WHERE id='".$get['aaaaa']."' AND name='".$get['bbbbb']."'"; mysql_set_charset('utf8'); $my_1_q = mysql_query($my_1,$mysql); $my_2_q = mysql_query($my_2,$mysql); $my_3_q = mysql_query($my_3,$mysql);

その他の回答 (2)

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

条件設定がない場合は「全て表示する」のか「一つも表示しない」のかで 処理がことなります。 今回のケースだと基本的に全て表示し、条件が提示されたとき 完全一致でAND絞り込みをしていくという流れにみえます 全て表示するのは「WHERE 1」としておくと便利です 絞り込みはあとANDでつないでいくだけです。 また、他のSQLで同じwhere条件を使うのであれば関数化するのが妥当です <?PHP $sql="SELECT * FROM hoge"; $sql.=setWhere(); function setWhere() { $str=" WHERE 1"; $list=array( "aaaaa"=>"id" ,"bbbbb"=>"name" ,"ccccc"=>"textdata" ); foreach($list as $key=>$val){ if(!isset($_REQUEST[$key]) or $_REQUEST[$key]==='') continue; $str.=" AND `".$val."`='".mysql_real_escape_string($_REQUEST[$key])."'"; } return $str; } print $sql; ?> <form> <input type="text" name="aaaaa" value=""><br> <input type="text" name="bbbbb" value=""><br> <input type="text" name="ccccc" value=""><br> <input type="submit" value="go"> </form>

juju-juju
質問者

お礼

mb_convert_encodingとhtmlentitiesをまとめていっぺにできる方法があったので、それも使って直してみました。ちゃんと動くようになりました。すごく参考になりました。 >WHERE 1 SELECT * FROM tablename; SELECT * FROM tablename WHERE 1; どっちが早いですか? <?php mb_http_output('UTF-8'); mb_internal_encoding('UTF-8'); //-------------------------- //初めの値を設定 //-------------------------- $get['aaaaa'] = ""; $get['bbbbb'] = ""; $get['ccccc'] = ""; //30個分つづきます。 $get['zzzzz'] = 10; //表示数 $get['ppppp'] = 1; //ページの番号 //-------------------------- //$_GETは全部、中身がどうあれ処理させます function abcdef($str) { $str = mb_convert_encoding($str, "UTF-8", "UTF-8"); $str .= htmlentities($str, ENT_QUOTES, "UTF-8"); return $str; } if (isset($_GET)){ foreach($_GET as $key => $val){ $get[$key] = abcdef($val); } } $list = array( $get['aaaaa']=>'id', $get['bbbbb']=>'name', $get['ccccc']=>'textdata' ); $my_1 = "SELECT * FROM tablename"; $my_1 .= setWhere($list); function setWhere($param){ $str = ' WHERE 1'; foreach($param as $key => $val){ if(!isset($key) or $key==='') continue; $str .= " AND ".$val."='".$key."'"; } return $str; } $my_2 = $my_1." ORDER BY id LIMIT 0,10"; $my_3 = "SELECT COUNT(*) AS CNT FROM tablename WHERE id='".$get['aaaaa']."' AND name='".$get['bbbbb']."'"; mysql_set_charset('utf8'); $my_1_q = mysql_query($my_1,$mysql); $my_2_q = mysql_query($my_2,$mysql); $my_3_q = mysql_query($my_3,$mysql);

  • _if_
  • ベストアンサー率52% (26/50)
回答No.1

まず if(isset($aaaaa) && strlen($aaaaa)>0){  $aaaaa = mb_convert_encoding($_GET['aaaaa'], "UTF-8");  htmlentities($aaaaa, ENT_QUOTES);  $test1["id"] = $aaaaa; } の、1行目の$aaaaa は定義済みですか? 2行目に初めて$_GETからの代入があるように見受けられます。 それと、3行目の変換はスルーされています。 とりあえず、正確な書き方は偉人達にお任せして、大雑把にイメージですが、 function strConv( $strIn = "", &$strOut ) {  if( strlen($strIn) ) {   $strOut = $strIn;   $strOut = mb_convert_encoding( $strOut, "UTF-8" );   $strOut = htmlentities( $strOut, ENT_QUOTES );   return 1;  }  return 0; } をどっかに置いて if( isset( $_POST['aaaaa'] ) && strConv( $_POST['aaaaa'], $str ) ) $test1['id'] = $str; if( isset( $_POST['bbbbb'] ) && strConv( $_POST['bbbbb'], $str ) ) $test1['name'] = $str; などにすればすっきりはします。 次に、SQL作成部ですが、、、 foreach($test1 as $key => $value){$test2 = $key;} とありますが、コピーミスなのか、オリジナルがこうなっているのか・・・。 $test2は値が1つだけしか入ってませんよ。 あと、while($test1--){...} はphpの文法にはないのではないでしょうか? まずは、落ち着いて都度print_rなりechoなりで出力して状況を確かめてみるといいかと思われます。 また、phpはエラーが親切なので、それも記載されると的確な回答がしやすくなります。 ご参考になればいいのですが。

juju-juju
質問者

お礼

いろいろ調べてみるとクエリの作成でなくて、ご指摘して頂いた通りphpの使い方が間違っていました。 >function strConv( $strIn = "", &$strOut ) { strConv( $_POST['aaaaa'], $str ) function strConv( $strIn = "", &$strOut ) { strConvの第一引数の意味は、$_POST['aaaaa']に値が入っていても""にするということですか? あと&$strOutの&をつけるとreturnで返さなくても自動で返すようになるのですか?

関連するQ&A

  • PHPでDBからデータを抽出してHTMLで表示する

    クライアント上で表示されているHTMLのテキストボックスに入力された文字列をホストに送信し、送信した文字列をSQLの抽出条件に設定してDB(MySQL)に登録しているデータ一覧をPHPで取得後、取得したデータ一覧をクライアントのHTMLのTABLEに一覧で表示したいのですが、どのようにPHPとHTMLをプログラムすればよいでしょうか? イメージ MysSQL テーブル カラム1|カラム2|カラム3| AAAAA|BBBBB|CCCCC| BBBBB|BBBBB|CCCCC| DDDDD|BBBBB|CCCCC| HTML テキストボックス カラム1「AAAA」 検索実行↓ HTML テーブル カラム1|カラム2|カラム3| AAAAA|BBBBB|CCCCC| AAAAA|BBBBB|CCCCC| 素人染みた質問で申し訳ございませんが、ご存知の方がいらっしゃいましたら終えてください。 以上

    • ベストアンサー
    • HTML
  • PHPでDBからデータを抽出してHTMLで表示

    こんにちは。 PHP初心者のものです。 クライアント上で表示されているHTMLのテキストボックスに入力された文字列をホストに送信し、送信した文字列をSQLの抽出条件に設定してDB(MySQL)に登録しているデータ一覧をPHPで取得後、取得したデータ一覧をクライアントのHTMLのTABLEに一覧で表示したいのですが、どのようにPHPとHTMLをプログラムすればよいでしょうか? イメージ MysSQL テーブル カラム1|カラム2|カラム3| AAAAA|BBBBB|CCCCC| BBBBB|BBBBB|CCCCC| DDDDD|BBBBB|CCCCC| HTML テキストボックス カラム1「AAAA」 検索実行↓ HTML テーブル カラム1|カラム2|カラム3| AAAAA|BBBBB|CCCCC| AAAAA|BBBBB|CCCCC| 素人染みた質問で申し訳ございませんが、ご存知の方がいらっしゃいましたら終えてください。 以上

    • 締切済み
    • PHP
  • phpファイルを直接参照できないようにするには?

    phpファイルでMySQLのDBにアクセスし、 contents=aaaaa&title=bbbbb&update_at=ccccc という形でファイルに表示させ、それをFLASHで読み込むということ ができるようになりました。 しかしこのphpファイルのURLをアドレスバーに直打ちされてしまうと、 contents=aaaaa&title=bbbbb&update_at=ccccc が丸見えになってしまいます。 この内容はFLASHを通してのみ参照できるようにしたいのですが、 phpファイルの直打ち参照を防ぐにはどうすればいいでしょうか?

    • ベストアンサー
    • Flash
  • Androidの画面遷移ができません(その2)

    前回の質問の続きです. 今度はページXXXXXから3つのボタン(AAAAA,BBBBB,CCCCCと仮定)を画面上に表示させ,ボタンに記載された通りの各ページAAAAA,BBBBB,CCCCCに画面遷移しようと考えています. AAAAA,BBBBB,CCCCCにはそれぞれ異なった画像が表示されるようにプログラミングしてあるのですが,すべてのボタンを押してもページAAAAAに画面遷移してしまい困っています. おそらくAndroidManifest.xmlの定義が間違えているのではないかと思っているのですが,どこに原因があるのでしょうか?解答よろしくお願いします. 【AndroidManifest.xml】 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="sample.XXXXX" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="9" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".XXXXX" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="AAAAA"></activity> <activity android:name="BBBBB"></activity> <activity android:name="CCCCC"></activity> </application> </manifest>

  • セルの値を転記

    下記のコードで sub main() Dim i As Long Dim rowToWrite As Long Dim 最終行 As Long Dim result As Variant Dim tmp As Variant Dim j As Long 最終行 = Range("B1").End(xlDown).Row result = Cells(1, 1).Resize(最終行, 2).Value For rowToWrite = 1 To 最終行 If tmp <> result(rowToWrite, 2) Then i = i + 1 j = 1 result(rowToWrite, 1) = i & "-" & j tmp = result(rowToWrite, 2) Else j = j + 1 result(rowToWrite, 1) = i & "-" & j End If Next rowToWrite Cells(1, 1).Resize(最終行, 2).Value = result End Sub Bセルの値が aaaaa aaaaa aaaaa bbbbb bbbbb bbbbb bbbbb bbbbb bbbbb ccccc ccccc だった場合 ↓ Aセル,Bセル 1-1,aaaaa 1-2,aaaaa 1-3,aaaaa 2-1,bbbbb 2-2,bbbbb 2-3,bbbbb 2-4,bbbbb 2-5,bbbbb 2-6,bbbbb 3-1,ccccc 3-2,ccccc とBセルの値が 変わったタイミングで Aセルに管理番号が増えていくのですが Cells(1, 1).Resize(lastRow, 2).Value = resultの値を 表示せずに 2次元配列として resultの値を result = 結果(debug.print 結果) としてAセルの値を 1-1 1-2 1-3 2-1 2-2 2-3 2-4 2-5 2-6 3-1 3-2 と転記したいのですがアドバイスいただけたら助かります。 よろしくお願いいたします。

  • MySQLとPHP(HTML)の連携について

    送信側では、PHP(HTML)下記のように書きました。 ----------------------------- <form action="input.php" method="post"> ボタン1:<input type="submit" name="input" value="入力">   ボタン2:<input type="submit" name="input2" value="入力"> </form> ----------------------------- 受信側(input.php)は下記のように書きました。 ----------------------------- <?php $url = "***.sakura.ne.jp"; $user = "abc"; $pass = "12345"; $db = "sakura_db"; if (isset($_POST["$input"])){ $sql = "SELECT SQL_CALC_FOUND_ROWS * FROM MAIN"; }elseif (isset($_POST["$input2"])){ $sql = "SELECT SQL_CALC_FOUND_ROWS * FROM MAIN2"; } //Connect MySQL Server $my_Con = mysql_connect($url,$user,$pass); mysql_query("SET NAMES utf8",$my_Con); if ($my_Con == false){ die("MySQL Server接続に失敗しました。"); } //Connect MySQL DataBase if (!mysql_select_db($db,$my_Con)){ die("MySQL DataBase選択に失敗しました。"); } //MySQL Deta Read $my_Row = mysql_query($sql,$my_Con); if (!$my_Row){ die(mysql_error()); } $a = 1; while ($row = mysql_fetch_array($my_Row) or $a <= 50) { echo ' <p>'; echo ' A'.$a.':<input name="date" type="text" size="4" value="'.$row["a"].'">'; echo ' B'.$a.':<input name="date" type="text" size="4" value="'.$row["b"].'">'; echo ' C'.$a.':<input type="checkbox" name="example"'.check($row["c"]).'>'; echo ' D'.$a.':<input type="checkbox" name="example"'.check($row["d"]).'>'; echo ' </p>'; $a++; } //Close MySQL Server $my_Con = mysql_close($my_Con); if (!$my_Con) { exit("MySQL Server閉じられませんでした。"); } ?> ----------------------------- この状態で送信側のボタンをクリックすると、input.php側では”Query was empty”とエラーがでます。 送信側の2つあるボタンによって表示されるテーブルを変えたいのですが、何が原因なのでしょうか? そもそもSQLの内容をif文での条件分岐は出来ないのでしょうか? 最近PHPを勉強し出した初心者です。 出来れば分かりやすく教えていただけないでしょうか。 よろしくお願い致します!

    • ベストアンサー
    • PHP
  • 二つのPHPファイルを上手く一つにしたいのですが

    ラジオボタンABCDを選択して上のNEXTボタンを押したとき、回答をSESSIONの配列に蓄えつつ次の問題へ進みたいのですがなかなか上手くいきません。 助けて頂けると嬉しいです。 ちなみに上のtest.phpでは問題を進んだり戻ったりの表示ができ、下のsession.phpではSESSION配列にクリックした分の回答を格納することができます。 //test.php <?php session_start(); ?> <html> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <body> <p>&nbsp;</p> <p> <?php $max=$_POST["next"]; if($max==null){ $max=1; }else{ $max++; } ?> </p> <p>&nbsp; </p> <form method="post" action="test.php"> <input TYPE="radio" NAME="name2" VALUE="1" CHECKED>ア <input TYPE="radio" NAME="name2" VALUE="2">イ <input TYPE="radio" NAME="name2" VALUE="3" CHECKED>ウ <input TYPE="radio" NAME="name2" VALUE="4">エ <input type="submit" name="max_1" value="Next"> <input type="button" value="最初から" onClick="location.href='test.php'"> <input type="button" value="Back" onClick="history.back()"> <input type="hidden" name="next" value="<?php print $max?>"> </form> <TEXTAREA readonly cols="100" rows="20" name="e"> <? mb_language("uni"); mb_internal_encoding("utf-8"); //内部文字コードを変更 mb_http_input("auto"); mb_http_output("utf-8"); $db=mysql_connect("localhost","接続ID","パスワード"); mysql_query("SET NAMES utf8",$db); //クエリの文字コードを設定 mysql_select_db("データベース名"); //データベースに接続 if (!$con = mysql_connect("localhost", "接続ID", "パスワード")) { echo "接続失敗" ;   exit ; } //データベースを選択 if (!mysql_select_db("データベース名", $con)) { echo "データベース選択失敗" ;   exit ; } $sikenbango=111; $mondaibango=$max; if (!$res = mysql_query("SELECT * FROM `MONDAI` WHERE SIKENBANGO='$sikenbango' AND MONDAIBANGO='$mondaibango'",$con)) { echo "SQL失敗<BR>" ;   exit ; } //検索した結果を全部表示 while ($row = mysql_fetch_array($res)) { echo $row["mondai"]; echo $row["kaito"]; echo "<BR>" ; } //結果セットの開放 mysql_free_result ($res) ; //データベースから切断 mysql_close($con) ; ?> </textarea> //session.php <?php session_start(); ?> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <?php if (!isset($_SESSION['answer'])) { $_SESSION['answer'] = array(); } if (isset($_POST['submit'])) {//クリックしたとき $qno = intval($_POST['qno']);//整数が入る if (($qno >= 1)and($qno <=80)) { $_SESSION['answer'][$qno] = $_POST['answer']; // セッションに追加 // データベースへも保存したければここに記述 } } else { $qno = 0; } if ($qno == 80) { print "<pre>"; print_r($_SESSION); print "</pre>"; } else { $qno++; print '<form action="session.php" method="post">' . PHP_EOL; print '<input type="hidden" name="qno" value="' . $qno . '" />' ; print '<input TYPE="radio" NAME="answer" VALUE="1" CHECKED>A'; print '<input TYPE="radio" NAME="answer" VALUE="2">B'; print '<input TYPE="radio" NAME="answer" VALUE="3" CHECKED>C'; print '<input TYPE="radio" NAME="answer" VALUE="4">D'; } print '<input type="submit" name="submit" value="NEXT">' . PHP_EOL; print '</form>' . PHP_EOL; print "<hr />"; print "<pre>"; print_r($_SESSION); print "</pre>"; ?>

    • 締切済み
    • PHP
  • ソート処理

    ついこの間正規表現のことで質問させていただいたものです なんとか問題は解決しました それとは別にソート関連での質問があります 正規表現の前にソートについて質問してご回答を頂いてからそれを参考に試してみました http://oshiete1.goo.ne.jp/kotaeru.php3?q=1882190 です push で@tmpの内容を ($score,$filename,$title,$sentenceの順番に) 3.5 abc.txt あいうえお aaaaa 4.6 def.txt かきくけこ bbbbb 2.8 ghi.txt さしすせそ ccccc 5.1 jkl.txt たちつてと ddddd という風にしました このリストを @tmp = map {$_->[0]} sort {$a->[0] <=> $b->[0]} map {[$_, split /<>/]}@tmp; としたんですが結果は abc.txt あいうえお aaaaa def.txt かきくけこ bbbbb ghi.txt さしすせそ ccccc jkl.txt たちつてと ddddd 3.5 4.6 2.8 5.1 というふうになってしまいます これを スコア順に 5.1 jkl.txt たちつてと ddddd 4.6 def.txt かきくけこ bbbbb 3.5 abc.txt あいうえお aaaaa 2.8 ghi.txt さしすせそ ccccc としたいのですがうえのソースでは何がいけないんでしょうか??

    • ベストアンサー
    • Perl
  • $_SERVER["PHP_SELF"]などでURLについているGETの値を引き継ぎたい

    PHP 5.2.2 上下に分かれたフレームページで、上段が検索フォーム、 下段が検索結果リストという構成のサイトを作っています。 検索条件を設定し、GETで下段に送ります。 下段に書き出されたHTMLをIE7の右クリックでプロパティをみると、 URLは、ちゃんと以下のようにパラメータがぶら下がっています。 http://www.example.jp/temp/mypage.php?aaaaa=1&bbbbb=2&ccccc=3 ところが、 echo $_SERVER["PHP_SELF"] とやっても、 /temp/mypage.php としか書き出されません。ここは、 http://www.example.jp/temp/mypage.php?aaaaa=1&bbbbb=2&ccccc=3 と書き出されてほしいのですが。 php.iniの設定を変えるとか、$_SERVER["PHP_SELF"]を別のサーバー変数に するとかで、何とか「?aaaaa=1&bbbbb=2&ccccc=3」この部分を 引き継ぎたいのですが、何か方法はありませんか。 先日、http://oshiete1.goo.ne.jp/qa4397672.htmlのご回答をいただき、 http://oshiete1.goo.ne.jp/qa1612121.htmlのNo2さんのを実装するために 検索条件を引き継ぎたいのです。

    • ベストアンサー
    • PHP
  • プルダウンメニューからインラインフーム内を操作する

    表題のようなものをjavascriptとフォームを使って 用意しましたが、IE6、IE7の環境で試験しましたが問題ありませんでした。 ところが、これをFirefoxで動かすと、プルダウンで選択してもインラインフレームは まったく変化しませんでした。 どちらでも動作するようにしたいのですがどのように改変すればよろしいでしょうか。 初心者でとんでもない間違いをしているかもしれませんが、どうかご教授ください。 現在以下のような記述になっています インラインフレーム名:inpage <!--javascript部 --> <script type="text/"> function jump(){ var url=document.form1.select1.options[form1.select1.selectedIndex].value; if (url!="") document.inpage.location.href = url; } </script> <!--javascript部 --> <!--フォーム部 --> <FORM NAME="form1"> <SELECT NAME="select1" onChange="jump()"> <option value="">選択してください <option value="AAAAA.html">AAAAA <option value="BBBBB.html">BBBBB <option value="CCCCC.html">CCCCC </SELECT> </FORM> <!--フォーム部 -->

専門家に質問してみよう