• 締切済み

foreachの代入時 $$を使う理由

フォームからPOSTで値を受け取り、変数に代入する方法ですが、最後の$$kの意味がわかりません。 $k=$v;では、キチンと動作されず理解に困っています。 なぜ$$k=$v;で動作が正常なのでしょうか? プログラム自体はPHPによる スーパーサンプルという本に書いてあったのですが、説明もなく釈然としません。 if($_SERVER["REQUEST_METHOD"]=="POST"){ foreach($_POST as $k=>$v){ if(get_magic_quotes_gpc()){ $v=stripslashes($v); } $v=htmlspecialchars($v); $$k=$v; } } ググっても$$自体の検索がかけれず、色々なサイトで探したのですが、結局わからなかったので、分かる方がいたらよろしくお願いします。

みんなの回答

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

$$k = $v; は、$kの中身が”abc”だとすると $abc = $v; と言うことになります。 プログラムの内容からすると、フォームの名前で変数を作って、その中に値を入れているようですね。

DIGITRE
質問者

お礼

速い回答ありがとうございました。 意味がよく分かりました。 釈然としてなく、本を参考にフォームを作ったのですが、全体的な意味が理解できました。 POSTで受け取った値を変数キーに代入するための物だったのですね。 ありがとうございました。

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

関連するQ&A

  • エスケープ解除

    以下のようなPHP構文の時に、 magic_quotes_gpcがOnであっっとしたら、 どのようにエスケープを解除すればいいのでしょうか? // フォームの値を取得します。 if ($_SERVER["REQUEST_METHOD"] == "POST") { foreach($_POST as $k = $v){ // 「magic_quotes_gpc = On」のときはエスケープ解除 if (get_magic_quotes_gpc()) { $v = stripslashes($v); } $v = htmlspecialchars($v); $$k = $v; } } else { exit(); }

    • 締切済み
    • PHP
  • バックスラッシュの対策について

    formでデータを送信するとバックスラッシュが入ってしまうので、stripslashes()で処理しています。 POSTでデータを送信しているのですが、 $prmarray_post = $_POST; $data1 = stripslashes($prmarray_post["data1"]); というような処理だと大丈夫なのですが、受け取るデータがいくつもあるので function cnv_formstr($array) { foreach($array as $k => $v){ if (get_magic_quotes_gpc()) { $v = stripslashes($v); } $v = htmlspecialchars($v, ENT_QUOTES); $$k = $v; } return $array; } $prmarray_post = cnv_formstr($_POST); $data1 = $prmarray_post["data1"]; という感じでやりたいのですが、これだとうまくいきません。 どのようにすればよいのでしょうか。 よろしくお願いしますm(__)m

    • ベストアンサー
    • PHP
  • [初心者]メールフォーム

    PHP初心者です。 メールフォームをPHPで作りました(貰いものでカスタマイズした感じ)。 FTPでサーバーの[httpdocs]の直下に置き、 誤作動はなく動いていたのですが、 今回サーバーを移行した関係で、 [www]→[htdocs]に同じものを入れたら、 htmlで入力した文字などが反映されなくなりました。 これはやはり階層の違いによるもの何のでしょうか? 現在、入力確認用とsend用に2つのphpを使用していますが、 どれを修正したらいいのか分かりません。 記入したものが反映されないので 以下の箇所が怪しいかと思いますが、どうでしょうか? <?php  //フォームの値を取得  if($_SERVER["REQUEST_METHOD"] == "POST"){   foreach($_POST as $k => $v){    //「magic_quotes_gpc = On」のときはエスケープ解除    if(get_magic_quotes_gpc()){    $v = stripslashes($v);    }    $v = htmlspecialchars($v);    $$k = $v;   }  }else{    exit();  } よろしくお願いします。

    • ベストアンサー
    • PHP
  • functionの中にfunction?

    functionの中にfunctionの関数を読み込みたいのですが そのようなことはphpで可能でしょうか? ソースは以下のようになっております。 // 実行 hoge1(); hoge2(); function hoge1() { if (!$_POST["submit"]) { foreach($_POST as $k => $v) { if(get_magic_quotes_gpc()) { $v=stripslashes($v); } $v=htmlspecialchars($v); $array[$k]=$v; } extract($array); } } function hoge2() { echo <<<EOM ~~表示させる文章など~~ EOM; foreach ($array as $key => $val){ echo "<input type=\"hidden\" name=\"$key\" value=\"$val\" />\n"; } } 具体的にはhoge1のextract($array);をhoge2の$arrayに入れて foreachで出力させたいのですがどのようにすればできますでしょうか?

    • 締切済み
    • PHP
  • フォームのデータを受け取りについて

    http://phpnet.blog91.fc2.com/blog-entry-6.html こちらのページを参考しているのですが下記のコードが エラーになってしまいます。 ・エラー内容 extract() [function.extract]: First argument should be an array ・エラー箇所 extract($array); function($array) { hogehoge } のようにfunctionを実行しても定義していないから?とも 思ったのですが応用の方法がわかりません。 現在は以下のようなソースです。 if (!$_POST{"submit"}) { foreach($_POST as $k => $v) { if(get_magic_quotes_gpc()) { $v=stripslashes($v); } $v=htmlspecialchars($v); $array[$k]=$v; } extract($array); ~いろんな処理~ } どのようにすればいいものでしょうか? アドバイスなど頂けますと幸いです。宜しくお願い致します。

    • ベストアンサー
    • PHP
  • POSTされた値の\問題

    はじめて質問させていただきます。最近PHPをはじめたばかりの初心者の私です。お願いいたします。 お問い合わせフォームを作っているのですがPOSTされた値の\問題を取り除く下の文なのですが、これを$_POST全部にあてはめることは可能でしょうか?一括でということです。ご回答お願いいたします。 if(get_magic_quotes_gpc()){ $name = stripslashes($name); $age = stripslashes($age); ・ ・ ・ ↑私はこれをなんと12個書いています(恥) ちなみに $name = htmlspecialchars ($name); も同様に・・・・。 ・}

    • ベストアンサー
    • PHP
  • チェックボックスのうちひとつでもチェックがなければエラー

    チェックボックスが複数個(5~6個)あります。 hajime.html <form action="niban.php" method="post"> <input type="checkbox" value="A" name="CHK1" /> <input type="checkbox" value="B" name="CHK2" /> <input type="checkbox" value="C" name="CHK3" /> <input type="checkbox" value="D" name="CHK4" /> <input type="checkbox" value="E" name="CHK5" /> <input type="checkbox" value="F" name="CHK6" /> </form> ●このA~Fのうち、ひとつでもチェックされていなければ チェックしてください。とエラー表示させたいのですが… ●次のページではこのようにデータを受取していします。 niban.php// フォームの値取得は下記のように行っています。 if ($_SERVER["REQUEST_METHOD"] == "POST") { foreach($_POST as $k => $v){ if (get_magic_quotes_gpc()) { $v = stripslashes($v); } $v = htmlspecialchars($v); $v = addslashes($v); $$k = $v; } } else { exit(); } $ErrFlg = 0;(エラーの時は$ErrFlgを1にします) ●エラー構文のサンプル↓ if ($name == "" ) { echo "<p>名前を入力してください。"; $ErrFlg = 1; } どうぞお力をおかしください

    • 締切済み
    • PHP
  • PHPメールフォームの、記入内容のチェック方法を教えてください>-<

    PHPの初心者です。 問い合わせフォームを作成していたのですが、 間違いの無いように メールアドレスを2回入力してもらって その2つが合ってるかどうかをチェックする という仕組みを作りたいのですが、 どのように記述すれば良いのか教えて頂けませんでしょうか。 フォームチェックの部分はこのように記述しています。 <? // フォームの値を取得します。 if ($_SERVER["REQUEST_METHOD"] == "POST") { foreach($_POST as $k => $v){ // 「magic_quotes_gpc = On」のときはエスケープ解除 if (get_magic_quotes_gpc()) { $v = stripslashes($v); } $v = htmlspecialchars($v); $$k = $v; } } else { exit(); } // 値をチェックします。 $ErrFlg = 0; if ($name == "") { echo "<div style='width: 500px; padding:5px 5px 5px 5px; font-size:12px;'>入力に誤りがあります。必要事項をお確かめの上「入力フォームに戻る」ボタンでお戻りください。</div>"; $ErrFlg = 1; } echo "<table width='93%' border='0' cellpadding='5' cellspacing='1' bgcolor='#c7c2af'>"; if ($name == "") { echo "<tr>"; echo "<td bgcolor='#FFFFFF'>「お名前」が入力されておりません。</td>"; echo "</tr>"; $ErrFlg = 1; } if ($ErrFlg == 1) { echo "</table>"; echo "<br>"; echo "<div id='submit' style='width: 450px; padding:5px 5px 5px 5px; font-size:12px; text-align:center;'>"; echo "<a href='javascript:javascript:history.go(-1);'>戻る</a>"; echo "</div>"; } if (!$ErrFlg) { ?>

    • ベストアンサー
    • PHP
  • 送信した配列の取得方法

    formで送信した配列データを受け取りたいのですが、以下のような記述だとうまく受け取れません。 記述方法を教えてくださいm(__)m (取得データはほかにもいくつかあり、まとめてPOSTで受け取っています) ◆取得側 function cnv_formstr($array1) { foreach($array1 as $k => $v){ if (get_magic_quotes_gpc()) { $v = stripslashes($v); } $v = htmlspecialchars($v,ENT_QUOTES); $array1[$k]=$v; } return $array1; } $prmarray_post = cnv_formstr($_POST); $data_cnt = isset($prmarray_post["data_cnt"]) ? $prmarray_post["data_cnt"] : ""; for ($i = 0; $i < $data_cnt; $i++) { $test_data[$i] = isset($prmarray_post["test_data[".$i."]"]) ? $prmarray_post["test_data[".$i."]"] : ""; } ◆送信側(html部分のphp宣言解除記述は省きます) <input type="hidden" name="data_cnt" value="<?=$data_cnt?>"> for ($i = 0 ; $i <= $data_cnt; $i++) { <input type="hidden" name="test_data[<?=$i?>]" value="<?=$test_data[$i]?>"> } という感じでやりたいです。 わかりにくかったらすみません(-_-; よろしくお願いします。

    • ベストアンサー
    • PHP
  • チェックボックスが複数選択できない

    アンケートフォームを作成していますが、チェックボックスで複数項目を選択しても最後のひとつしか表示されずに困っています。 配列での処理にすれば良いという事なので自分なりにやってみたのですが、今度は「Array」と表示されてしまい、具体的にどうしたらいいのか分かりません。 ※html側 <input type="checkbox" name="cat[]" value="abc"> <input type="checkbox" name="cat[]" value="def"> ※php側 <FORM action="<? echo $script; ?>" method="POST"> <? echo $err_message; ?> <?php foreach($_POST as $key=>$var) { $key = strtr($key, $string_from, $string_to); if(get_magic_quotes_gpc()) $var = stripslashes($var); $var = htmlspecialchars($var); print("項目:".$key."選択したのは".$var); ?> <INPUT type="hidden" name="<?= $key ?>" value="<?= $var ?>"> <?php print("です。\n"); } ?> となっています。 また、選択内容をメール送信するようになっており、 foreach($_POST as $key=>$var) { $key = strtr($key, $string_from, $string_to); if(get_magic_quotes_gpc()) $var = stripslashes($var); if($var == "eweb_submit") ; else $rebody.="[".$key."] ".$var."\n"; です。 複数項目をまとめて処理しているようで、どうしたらいいのか分かりません。ちなみに、http://www.eweb-design.com/のフリーのメールフォームを使っています。

    • ベストアンサー
    • PHP
このQ&Aのポイント
  • canon TS8430のUSB接続において、差込口が奥にありカバーヒンジの邪魔で差し込めない場合、他の方法で接続されている方はいますか?
  • canon TS8430のUSB接続が難しい場合、差し込み口の位置を考慮しながら差し込む工夫や方法はありますか?
  • canon TS8430のUSB接続に困っている方へのアドバイスやヒント、工夫されている方の意見を教えてください。
回答を見る