• 締切済み

PHPを使ったPOSTについて教えてください。

<body> <form action="" method="post"> <select id="list" name="list" > <option value="">選択してください</option> <option value="ichigo">いちご</option> <option value="orange">オレンジ</option> </select> <input type="text" size="30" id="word" name="word" > <input type="submit" value="検索"> </form> <?php $array = array(); $array['green'] = 'グリーン'; $array['red'] = 'レッド'; if (isset($_REQUEST['word'])) { $array ['key']=$_REQUEST['word']; } if (isset($_REQUEST['list'])) { $array ['List']=$_REQUEST['list']; } print_r($array); ?> </body> これを表示した場合、はじめのページでは Array ( [green] => グリーン [red] => レッド ) と表示されますが、フォームを実行すると、このように表示されます。 Array ( [green] => グリーン [red] => レッド [key] => [List] => ) これを、もしkeyやListの値が何も入力されなかった場合、listで言えば「選択してください」が選択されで実行された場合、[key] =>や [List] =>を表示しないと言うことはできますか? 例えばlistをデフォルトの「選択してください」のまま選択せず、テキスト欄に「テキスト」と入力したら、 Array ( [green] => グリーン [red] => レッド [key] => テキスト) とこのように[List] =>は省きたいです。 そのためにissetを使ったつもりでしたが、うまくいきませんでした。 どうしたら良いでしょうか?教えてください、よろしくお願いします。

  • PHP
  • 回答数1
  • ありがとう数0

みんなの回答

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

wordやlistが""であってもPOSTされれば$_REQUEST["word"]や$_REQUEST["list"] は、セットされます。 emptyなどでもチェックできますが、0などが評価されることも 考慮すると、単純に文字列の比較をする方がよいかもしれません。 (もちろん事前にisset処理をいれないとインデックスエラーがでます) <body> <form method="post"> <select id="list" name="list" > <option value="">選択してください</option> <option value="ichigo">いちご</option> <option value="orange">オレンジ</option> </select> <input type="text" size="30" id="word" name="word" > <input type="submit" value="検索"> </form> <?php $array = array(); $array['green'] = 'グリーン'; $array['red'] = 'レッド'; if (isset($_REQUEST['word']) && $_REQUEST['word']!=="") { $array ['key']=$_REQUEST['word']; } if (isset($_REQUEST['list']) && $_REQUEST['list']!=="") { $array ['List']=$_REQUEST['list']; } print_r($array); ?> </body>

関連するQ&A

  • Javascriptの動的リスト作成について

    Javascriptの動的リスト作成について お世話になっています。 Javascriptで選択リストを動的に変えたいと思っています。 また、Javascriptで作成したリストは、multipleとして複数選択できるようにしたいと考えています。 そこで、下記のようにスクリプトを書きました。リスト2(smallwheretag)が1つのみ選択を許すときは、うまくいったのですが、multipleにするためにnameを配列にしたところ、うまくリストが作成できなくなってしまいました。 なにかスクリプトに変更が必要なのでしょうか?ご教授お願いいたします。 <HTML部> <select name="bigwheretag[]" onchange="javascript:listChange(this.value);"> <option value="">検索項目</option> <option value="11%">自然</option> <option value="12%">街</option> <option value="13%">家庭</option> </select> <select name="smallwheretag[]" multiple> <option value="">大項目を選択して下さい</option> </select> <Javascript部> var where1_text = new Array("川", "海", "山", "滝", "その他"); var where1_value = new Array("1101", "1102", "1103", "1104", "1199"); flag1 = document.form.bigwheretag.value; if (flag1=="11%") { document.form.smallwheretag.length = where1_text.length; for(var i=0; i<where1_text.length; i++) { document.form.smallwheretag.options[i].text = where1_text[i]; document.form.smallwheretag.options[i].value = where1_value[i]; } }・・・・・・・・以下同様

  • PHPでUndefined variableエラー

    PHPでUndefined variableエラーが発生します: <b>Notice</b>: Undefined variable: result in <b>/opt/lampp/htdocs/samples/chapter3/3-2/gen_defined_vars.php</b> on line <b>58</b><br /> どうやって直せばいいのか教えてください。 58行目がおかしいと出ていますが、$resultが未定義なので54行目のことだと思います。 ちなみに 9ー12行目は自分で直しました。お願いします。 1 <html> 2 <head> 3 <title>環境変数コード生成フォーム</title> 4 </head> 5 <body> 6 <?php 7 // 選択リストの値を取得 8 $name = "param"; 9 if ( isset($_POST[$name]) ) { 10 $selected_value = $_POST[$name]; 11 } 12 //$selected_value = isset($_POST[$name]) ? $_POST[$name] : ""; 13 14 // 定義済み変数を取得 15 $array = get_defined_vars(); 16 17 // 配列から選択リストを作成する関数 18 // パラメータ:配列/選択リスト名/選択値 19 function disp_list($array, $name, $selected_value = "") { 20 echo "<select name=\"" . $name . "\">"; 21 while (list($value, $text) = each($array)) { 22 echo "<option "; 23 if ($selected_value == $value) { 24 echo " selected "; 25 } 26 echo " value=\"".$value."\">" . $value . "</option>"; 27 } 28 echo "</select>"; 29 } 30 31 // 入力内容を処理する 32 $temp = "<?php echo \$_SERVER[\"%s\"] ?>"; 33 if (isset($_POST["param"])) { 34 $param = $_POST["param"]; 35 $result = sprintf($temp, $param); 36 } 37 else { 38 $param = ""; 39 } 40 41 ?> 42 <form method="POST" action="<?php echo $_SERVER["PHP_SELF"]?>"> 43 <table cellpadding="10"> 44 <tr> 45 <td>環境変数を選択:<br /> 46 <?php echo disp_list($array["_SERVER"], $name, $selected_value); ?> 47 <input type="submit" value="作成" name="sub1"> 48 </td> 49 </tr> 50 <tr> 51 </tr> 52 <tr> 53 <td>作成されたコード:<br /> 54 <textarea name="ta1" rows="3" cols="40"><?php echo $result ?></textarea> 55 </td> 56 </tr> 57 </table> 58 </form> 59 </body> 60 </html>

    • ベストアンサー
    • PHP
  • GETで送られたデータを元に必要なSQL文を作る

    FORMのSELECTなどで選択されたデータをGETで送り、 それをもとにSQLの文章を作りたいと思っています。 $yyy = "SELECT * FROM table WHERE 1 AND {$a} < mysqlA AND {$b} < mysqlB AND mysqlC IN({$b}) ・・・"; のようにすればSQLの文章を作れると思いますが、FORMで選択されていないデータを対象にした文章までも入ってしまいます。 FORMより送られたデータだけのSQLの文章を作りたいです。 下記のようなやり方以外に良い方法はありますか? MYSQLのデータ ------------------------------- mysqlA | mysqlB |  ・・・ 4     |  55  |  ・・・ 5     |  33  |  ・・・ 77    |  17  |  ・・・ :       :     : :       :     : <?php  :  : $lll = array( "getA"=>"mysqlA", "getB"=>"mysqlB", "getC"=>"mysqlC", "getD"=>"mysqlD", "getE"=>"mysqlE",   : ); $yyy = 'SELECT * FROM table WHERE 1'; foreach($lll as $key=>$val){ if(!isset($_REQUEST[$key]) or $_REQUEST[$key]==='') {$_REQUEST[$key]="";} switch($key){ case "getA": $ga = explode("+", $_REQUEST[$key]); $yyy .= ' AND {$ga[0]} <= {$val} AND {$val} < {$ga[1]}'; break; case "getB": $yyy .= 'AND {$val} BETWEEN CURDATE() - INTERVAL {$_REQUEST[$key]} YEAR AND CURDATE() - INTERVAL 1 DAY'; break; case "getC": case "getD": case "getE": $yyy .= ' AND {$_REQUEST[$key]} <= {$val}'; break; ~ 他のcaseが続く ~ } } $ddd = new PDO($host,$user,$pass); $sss = $ddd->prepare($qqq); $rrr = $sss->fetchAll(PDO::FETCH_ASSOC);  :  : ?> <html xml:lang="ja" lang="ja"> <head> <title></title> </head> <body> <form action="#">   : <select name="getB" onchange="changeDate()"> <option value="0"<?php if(isset($_REQUEST[$getB]) && $_REQUEST[$getB]==0){echo ' selected="selected"';} ?>>0</option> <option value="20"<?php if(isset($_REQUEST[$getB]) && $_REQUEST[$getB]==20){echo ' selected="selected"';} ?>>20</option> <option value="50"<?php if(isset($_REQUEST[$getB]) && $_REQUEST[$getB]==50){echo ' selected="selected"';} ?>>50</option> </select>   :   :

    • 締切済み
    • PHP
  • $_POSTを一括してサニタイズし、表示する方法

    PHP 初心者デス。よろしくお願いします。 $_POSTの中身を配列構造を維持したまま、一括でサニタイズして、 一括で表示、受け渡しする方法をご教授いただけませんでしょうか。 勉強のため、PHPにてメールフォームを作成してます。 index.htmlには以下のようなフォームが入ってます。 (基本的にはtableで区切ってますが、tableの文は省略させていただいております。) <form method="post" action="confirm.php"> <input type="text" name="テキスト" size="30" /> <input type="text" name="email" size="50" maxlength="50" /> <input type="radio" name="ラジオ" value="選択1" /> 選択1 <input type="radio" name="ラジオ" value="選択2" /> 選択2 <input type="radio" name="ラジオ" value="選択3" /> 選択3 <input type="checkbox" name="チェックボックス[]" value="チェック1" /> チェック1 <input type="checkbox" name="チェックボックス[]" value="チェック2" /> チェック2 <input type="checkbox" name="チェックボックス[]" value="チェック3" /> チェック3 <select name="セレクトボックス[]"> <option value="" selected="selected">選択して下さい</option> <option value="1">1 </option> <option value="2">2 </option> <option value="3">3 </option> </select> <select name="セレクトボックス[]"> <option value="" selected="selected">選択して下さい</option> <option value="4">4 </option> <option value="5">5 </option> <option value="6">6 </option> </select> <textarea name="テキストエリア" rows="10" cols="70"></textarea> </form> ------------------------ confirm.php(入力確認用の画面)には以下が入ってます。 <?php function sanitize($a) { $_a = array(); foreach($a as $key=>$value) { if (is_array($value)) { $_a[$key] = sanitize($value); } else { $_a[$key] = htmlspecialchars($value); } } return $_a; } ?> 上記の内容はこちらのURLを参考にして http://php.to/tips/4/ 一括して入力パラメータのサニタイジングを行っています。 ですが、自分はまだ駆け出しのため、イマイチこの文の内容がちゃんと理解できていません… とりあえず、サニタイズされたここから、 $key と $value を一括して表示し、 メール送信処理用のファイル[sende.php(仮)]などに受け渡したいのですが、 うまくいかずに悩んでいます。 単純に、 print_r($_sanitized_POST); と入れても、チェックボックス、セレクトボックスの値がArrayとなって取得できません… 他にこんな感じやってみても同じでした。 foreach($_sanitized_POST as $key=>$var) { $body.="[".$key."]".$var."\n";  print $body ; } 何かうまい方法があればご教授いただけませんでしょうか。 とりあえず考えているのは、confirm.php内で、サニタイズされた値を <input type="hidden" name="<?=$key?>" value="<?=$var?>" ><?=$var?> 上記のような形で一括で表示して次のファイルに値を渡せたらな、と考えている次第です。 また、index.htmlの内容に追加や、削除など流動的に変更しても confirm.phpの内容に特に手をつけずに反映させるようにしたいと思っています。 そんなのは無理でしょうか? 初歩的な私ですが、どうぞアドバイスよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 複数選択した情報をそのまま次のステップに移行させる方法

    PHP5.2.4を使用しています。 ちょっとPHPと直接関係があるかは分かりませんがお願いします。 選択メニューで複数選択できるようにnameをkey[]として設定して、 例えばこの場合はaとbを選択します。 送信ボタンを押して次の[form2.php]に移ったとします。 そこでprint_r($_POST['key']);とすると、 Array([0] => 'a' [1] => 'b') と表示されるのですが、この$_POST['key']をhiddenで <input type="hidden" name="key[]" value="{$_POST['key']}"> ともたせたいのですが、このやり方だと次の[form3.php]に 移ったときにはprint_r($_POST['key']);とすると Array としか表示されません(当たり前かもしれませんが・・・) これをなんとかして <input type="hidden" name="key[]" value="{$_POST['key']}"> このような持たせ方で移行させる方法はないでしょうか? つまり、 <input type="hidden" name="key1" value="{$_POST['key'][0]}"> <input type="hidden" name="key2" value="{$_POST['key'][1]}"> とはしたくないのです。 [form1.php] <select name="key[]" size="3" multiple> <option value="a">あ</option> <option value="b">い</option> <option value="c">う</option> </select> [form2.php] <input type="hidden" name="key[]" value="{$_POST['key']}">

    • ベストアンサー
    • PHP
  • PHPでTEXTと同様なcheckBoxの処理

    下記のフォームから検索キーワードを入力してANDとORの検索はちゃんとできていますが、 チェックボックスを使いテキストフォームと同様のロジックで「りんご■メロン」と 文字と文字の間にスペース「■」で結合して送信し、PHPコード側で受けとるにはどうしたらよいかアドバイス下さい。 ちなみに、PHPコード側では$_REQUEST['word']に<input type=text name=word size=35 value="">と同じような処理を入れたいです。 (1)検索キーワード --------------------------------------- りんご■メロン *■は半角スペース文字とします。 HTMLフォーム --------------------------------------- <form action="test.php" action="POST"> <input type=hidden name=mode value="search"> 検索キーワード:<input type=text name=word size=35 value=""> <select name=option> <option value="and"> AND</option> <option value="or"> OR</option> </select> <input type=submit value="Search"> </form> ↓この処理では全然だめでした。 <form action="test.php" method="post"> <input type="checkbox" name="word[]" value="りんご"> <input type="checkbox" name="word[]" value="メロン"> <input type=submit value="Search"> </form> PHPコード foreach($_REQUEST['word'] as $val){ $_REQUEST['word'] = " "."$val"; }

    • 締切済み
    • PHP
  • PHPでFormリクエスト

    ASPで以下実行したことをPHPで同じことはできるでしょうか? <form action=”Sample.asp” method=”post”> <input type=”text” name=”Name” value=”あ”><br> <input type=”text” name=”Name” value=”い”><br> <input type=”text” name=”Name” value=”う”><br> </form> Request.Form(“Name”)(1)  →あ Request.Form(“Name”)(2)  →い Request.Form(“Name”)(3)  →う

    • ベストアンサー
    • PHP
  • リストボックスから直接引き金を引く

    お世話になります。 早速ですが、 今、あるaplを書いていまして、 処理内容はリストボックスからキーを選択させ、 そのキーでDBを検索、表示するというモノです。 現在のロジック、つくりは、 リストボックスの下に(「表示」という)ボタンを設置してあり、 リストボックスからキーを選択した後、 そのボタンを押すことでcgiに戻りDBを検索する、 となっています。 <FORM action="./DB.cgi" method="POST"> <div> <select name="key" size="3"> <option value="aaa">aaa <option value="bbb">bbb <option value="ccc">ccc <option value="ddd">ddd <option value="eee">eee <option value="fff">fff </select> </div> <input type=submit value="表示"> <input type="hidden" name="mode" value="display"> </FORM> ここで質問ですが、 リストボックスからキーを選択したらそのままDB検索へ移行するような コードを教えて欲しいのです。 (いちいち表示ボタンを押さなくて良いやり方です) 以上、宜しくお願いします。

    • ベストアンサー
    • Java
  • php メールフォーム プルダウンメニュー

    プルダウンメニューを使用して、フォーム→確認→送信と順々に値を受け取りたいのですが、form.phpではプルダウンメニューは表示されますが、form.phpで選択したプルダウンメニューがconfirm.phpでは表示されません。 confirm.phpでも表示されてなおかつ送信をしたら受け取れるようにしたいのです。 初心者なので、いろいろと勉強をしながら、本を読んだり、調べたのですが、まったくわからずです。どなたかご教授お願いします。 form.php <form method="post" action="confirm.php"> <table cellpadding="0" cellspacing="0" border="0"><tr><td>項目</td><td>入力欄</td><td>記入例</td></tr> <tr><td><label for="name">名前</label></td><td><input type="text" size="50" name="name" id="name" value="<?php print h(@$_SESSION['name']); ?>" /></td><td>例:goo 太郎</td></tr> <tr><td><label for="mail">生年月日</label></td><td> <select name="year[]"><option value="1970">1970</option><option value="1971">1971</option><option value="1972">1972</option><option value="1973">1973</option><option value="1974">1974</option></select>年 <select name="month[]"><option value="01">01</option><option value="02">02</option><option value="03">03</option><option value="04">04</option><option value="05">05</option><option value="06">06</option></select>月 <select name="day[]"><option value="01">01</option><option value="02">02</option><option value="03">03</option><option value="04">04</option><option value="05">05</option><option value="06">06</option></select>日 </td><td>例:1990年01月01日</td></tr> <tr><td colspan="3" style="text-align:center;"><input type="hidden" name="aaa" value="<?php print h($aaa); ?>" /><input type="submit" value="確認" /></td></tr> </table></form> confirm.php session_start(); $_POST = checkInput($_POST); if (isset($_POST['aaa']) && isset($_SESSION['aaa'])) { $aaa = $_POST['aaa']; if (!in_array($aaa, $_SESSION['aaa'])) { die('不正アクセスの疑いがあります。'); } } else { die('不正アクセスの疑いがあります。'); } $name = isset($_POST['name']) ? $_POST['name'] : NULL; $kana = isset($_POST['kana']) ? $_POST['kana'] : NULL; $mail = isset($_POST['mail']) ? $_POST['mail'] : NULL; $comment = isset($_POST['comment']) ? $_POST['comment'] : NULL; $error = array(); ★★★各項目のチェック★★★ $_SESSION['name'] = $name; $_SESSION['kana'] = $kana; $_SESSION['mail'] = $mail; $_SESSION['comment'] = $comment; $_SESSION['error'] = $error; <table class="form" cellpadding="0" cellspacing="0" border="0"> <tr><td>項目</td><td>入力欄</td><td class="title_color" style="border-left:1px solid #ffffff;">記入例</td></tr> <tr><td>名前</td><td class="title_back2"><?php print h($name);?></td><td>例:goo 太郎</td></tr> <tr><td>生年月日</td><td>★★★★★ここにform.phpからのプルダウンメニューを受け取りたい★★★★★</td><td>例:1990年01月01日</td></tr> </table> <table cellpadding="0" cellspacing="0" border="0"> <tr> <td><form action="form.php" method="post"><input type="submit" value="戻る" /></form></td> <td><form action="send.php" method="post"><input type="hidden" name="aaa" value="<?php print h($aaa);?>" /><input type="submit" value="送信" /></form></td> </tr></table>

    • ベストアンサー
    • PHP
  • セレクトボックスで指定した任意のCGIにPOSTしたい

    フォームでリクエストを送信する際、セレクトボックスで指定した任意のCGIにPOSTしたいのです JavaScriptで実現したいのですが...教えてくださいm(__)m 下記はフォームの中身です。 <form action="" method="post"> <input type="text" name="key_word"> <select name="S1"> <option selected value="error">CATEGORY <option value="search_1.cgi">SELECT_1 <option value="search_2.cgi">SELECT_2</option> </select> <input type="hidden" value="kw_search" name="mode"> <input type="submit" value="検索"></td> </form>

専門家に質問してみよう