• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:バックスラッシュの対策について)

バックスラッシュの対策について

このQ&Aのポイント
  • バックスラッシュの対策についての質問です。フォームでデータを送信するとバックスラッシュが含まれてしまい、stripslashes()関数を使って処理しています。
  • POSTでデータを送信している場合、$prmarray_post = $_POST; $data1 = stripslashes($prmarray_post["data1"]); のような処理で問題ありません。
  • ただし、受け取るデータが複数ある場合、cnv_formstr()関数を使って処理したい場合に問題が発生しています。どのようにすればうまく動作させることができるでしょうか?

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

  • ベストアンサー
  • mpx
  • ベストアンサー率71% (149/209)
回答No.1

>> $$k = $v; 上記の行を $array[$k]=$v; に変更してみてください 注)既存の関数名と同じ変数名arrayは使わない方が良いですよ

qkyorochan
質問者

お礼

ばっちりです! 変数名変更します。。。 ありがとうございましたm(__)m

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

関連するQ&A

  • 送信した配列の取得方法

    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
  • エスケープ解除

    以下のような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
  • 括弧内の処理の順序

    プログラムを見ていて気になった点があります。 htmlspecialchars(mysql_real_escape_string(stripslashes($_POST["inp01"])),ENT_QUOTES) 上記の書き方の場合、処理される順番は 内から「stripslashes」→「mysql_real_escape_string」→「htmlspecialchars」になるんでしょうか? 逆に 外から「htmlspecialchars」→「mysql_real_escape_string」→「stripslashes」 でしょうか。 また処理の順番ですが、 「htmlspecialchars」→「stripslashes」→「mysql_real_escape_string」が正しい形でしょうか。

    • ベストアンサー
    • 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
  • 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
  • symfonyのCriteriaで実行すると、入力値にバックスラッシュが入る

    表題の件で質問させてください。 現在、symfony version 1.0.8 にて開発を行っています。 MySQLに接続して、検索SQLを実行しているのですが、どうもカタカナが混じっていると検索にヒットしません。 そこでSQLを print_r(TableNamePeer::doSelectRS($criteria)); で表示させてみたところ、magic_quotes_gpcがOn の時のように、バックスラッシュが含まれていました。 ・htaccess で、magic_quotes_gpcはOffにセットしています。 ・$pear_data_dir/symfony/config/php.yml のmagic_quotes_gpcも offになっています。 バックスラッシュは下記のような感じで付け加えられてしまっています。 ソフト→\ソフ\ト どこをいじれば治るのか、調べ切れなかったのでご存知の方がいらっしゃったら、ご教授下さい。 宜しくお願い致します。

    • 締切済み
    • PHP
  • POSTされたデータをそのまま変数名にするような・・・

    お世話になります。 タイトルのとおりなのですが、POSTされたデータをそのまま変数名にするような便利な方法はないでしょうか。 $name=htmlspecialchars($_POST["name"], ENT_QUOTES, $code); $email=htmlspecialchars($_POST["email"], ENT_QUOTES, $code); ・ ・ ・ をたくさんあるので簡単にできないかなーと思ったんですが、何か良い方法がありましたら教えてください。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • php 送信されたフォームについて

    送信されたフォームの受け取る側のソースを書いたのですが、 <?php $i = 0; if(print(htmlspecialchars($_POST['kaitouran31'], ENT_QUOTES, 'UTF-8')) == 'a') $i++; if(print(htmlspecialchars($_POST['kaitouran31'], ENT_QUOTES, 'UTF-8')) == 'a') $i++; if(print(htmlspecialchars($_POST['kaitouran31'], ENT_QUOTES, 'UTF-8')) == 'a') $i++; if(print(htmlspecialchars($_POST['kaitouran31'], ENT_QUOTES, 'UTF-8')) == 'a') $i++; print('正解数'.$i./4'です'); ?> を付け加えるとエラーが表示されます。エラーの対象になっているのは print('正解数'.$i./4'です');らしいのですが、なぜエラーになるのかわかりません 回答お願いします。 以下ソースです。 <html> <head> <title>解答</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <style type=""text/css""> #container{ width:1000 } #main{ width:500px; float:right; } #sidebar{ width:500px; float:left; } </style> </head> <body> <div id="container"> <div id="main"> <p>問題の解答</p> <p>問1</p> <p>(1)(2)(3)(4)</p> <p>問2</p> <p>(1)(2)(3)(4)</p> <p>問2</p> <p>(1)(2)(3)(4)</p> </div> <div id="sidebar"> <p><>あなたの解答<></p> <p>問1</p> <p>(1)<?php print(htmlspecialchars($_POST['kaitouran11'], ENT_QUOTES, 'UTF-8')); ?> (2)<?php print(htmlspecialchars($_POST['kaitouran12'], ENT_QUOTES, 'UTF-8')); ?> (3)<?php print(htmlspecialchars($_POST['kaitouran13'], ENT_QUOTES, 'UTF-8')); ?> (4)<?php print(htmlspecialchars($_POST['kaitouran14'], ENT_QUOTES, 'UTF-8')); ?> </p> <p>問2</p> <p>(1)<?php print(htmlspecialchars($_POST['kaitouran21'], ENT_QUOTES, 'UTF-8')); ?> (2)<?php print(htmlspecialchars($_POST['kaitouran22'], ENT_QUOTES, 'UTF-8')); ?> (3)<?php print(htmlspecialchars($_POST['kaitouran23'], ENT_QUOTES, 'UTF-8')); ?> (4)<?php print(htmlspecialchars($_POST['kaitouran24'], ENT_QUOTES, 'UTF-8')); ?> </p> <p>問3</p> <p>(1)<?php print(htmlspecialchars($_POST['kaitouran31'], ENT_QUOTES, 'UTF-8')); ?> (2)<?php print(htmlspecialchars($_POST['kaitouran32'], ENT_QUOTES, 'UTF-8')); ?> (3)<?php print(htmlspecialchars($_POST['kaitouran33'], ENT_QUOTES, 'UTF-8')); ?> (4)<?php print(htmlspecialchars($_POST['kaitouran34'], ENT_QUOTES, 'UTF-8')); ?> </p> </div> </div> <?php $i = 0; if(print(htmlspecialchars($_POST['kaitouran31'], ENT_QUOTES, 'UTF-8')) == 'a') $i++; if(print(htmlspecialchars($_POST['kaitouran31'], ENT_QUOTES, 'UTF-8')) == 'a') $i++; if(print(htmlspecialchars($_POST['kaitouran31'], ENT_QUOTES, 'UTF-8')) == 'a') $i++; if(print(htmlspecialchars($_POST['kaitouran31'], ENT_QUOTES, 'UTF-8')) == 'a') $i++; print('正解数'.$i./4'です'); ?> </body> </html>

    • 締切済み
    • PHP
  • POSTされた値の\問題

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

    • ベストアンサー
    • PHP
  • 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; } } ググっても$$自体の検索がかけれず、色々なサイトで探したのですが、結局わからなかったので、分かる方がいたらよろしくお願いします。

    • 締切済み
    • PHP