- ベストアンサー
stripslashesが効かない!?
- PHP初心者の質問:get_magic_quotes_gpcがONの環境で、stripslashesが効かないのはなぜ?
- PHPのget_magic_quotes_gpcがONになっている環境では、stripslashesが効かない場合がある。
- POSTやGETで文字列を取得して処理する際、stripslashesが正常に動作しないことがある問題について
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
関連する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
- POSTされた値の\問題
はじめて質問させていただきます。最近PHPをはじめたばかりの初心者の私です。お願いいたします。 お問い合わせフォームを作っているのですがPOSTされた値の\問題を取り除く下の文なのですが、これを$_POST全部にあてはめることは可能でしょうか?一括でということです。ご回答お願いいたします。 if(get_magic_quotes_gpc()){ $name = stripslashes($name); $age = stripslashes($age); ・ ・ ・ ↑私はこれをなんと12個書いています(恥) ちなみに $name = htmlspecialchars ($name); も同様に・・・・。 ・}
- ベストアンサー
- 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
- メールフォームが文字化けします、、、、
メールフォームが文字化けします、、、。 「申します」→「垂オます」 とかなってしまいます。 また、「(1)」とかは「?」になってしまいます。 いろいろ調べてみたんですがこの辺かなぁとは思います。 ちなみにプログラミングなどド素人です。 ____________________________ if(get_magic_quotes_gpc()){$str = stripslashes($str);} //¥除去 return $str; } ____________________________ アドバイスお願い出来ましたら幸いです。><;
- ベストアンサー
- PHP
- PHP+MySQLでエスケープされたデータを格納したい。
php.iniの設定でmagic_quotes_gpc = Offにして、 mysql_real_escape_stringで出力エスケープしたデータを MySQLに格納するとバックスラッシュが格納されない。 エスケープされたデータを格納したいです。 php.iniの設定 --------------------------------------------------------- ; Magic quotes for incoming GET/POST/Cookie data. ; magic_quotes_gpc = On magic_quotes_gpc = Off ; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc. magic_quotes_runtime = Off ; Use Sybase-style magic quotes (escape ' with '' instead of '). magic_quotes_sybase = Off --------------------------------------------------------- $_POST['us_fname']には「'user'」という文字列が格納されています。 --------------------------------------------------------- $clean['us_fname'] = $_POST['us_fname']; $mysql['us_fname'] = mysql_real_escape_string($clean['us_fname']); $sql = "insert into table ( us_fname ) values ( '".$mysql['us_fname']."', ) "; --------------------------------------------------------- echo $mysql['us_fname']; で確認すると「\"user\" 」となっているんですが、 MySQLの中を確認すると「'user'」のままでシングルクォートがエスケープされていません。
- ベストアンサー
- 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
- チェックボックスが複数選択できない
アンケートフォームを作成していますが、チェックボックスで複数項目を選択しても最後のひとつしか表示されずに困っています。 配列での処理にすれば良いという事なので自分なりにやってみたのですが、今度は「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
- [初心者]メールフォーム
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
- SQLインジェンクション対応について
現在、PHPでのセキュリティ対策の一環として、SQLインジェンクション対応のためのユーザ入力値をチェックするための関数を検討しています。 以下のサイトなどを参考に、以下のようなサンプルコードを検討してみました。 特筆すべき点は、PHPのマジッククォートがONになっているかどうかのチェックを最初に入れ、余分に不正コードをエスケープしないようにしたことでしょうか。 あまりセキュリティについて詳しくないので、有識者の方の見解を伺いたく投稿いたしました。その他付け加えるべきチェックなどありましたら、ご意見賜りたく存じます。 (参考にしたサイト) http://jp.php.net/manual/ja/security.database.sql-injection.php (サンプルコード) function str_check($value) { // strip slashes if (get_magic_quotes_gpc()) { $value = stripslashes($value); } // quote except numbers if (!is_numeric($value)) { $value = "'" . mysql_real_escape_string($value) . "'"; } return $value; } (使用例) $query = sprintf("SELECT * FROM users WHERE user=%s AND password=%s", str_chec($_POST['username']), str_chec($_POST['password'])); mysql_query($query);
- 締切済み
- PHP
お礼
ご回答ありがとうございます。 職場のサーバのため、勝手にiniを変更するわけにもいかないので、POSTの送信元と受信先の両方のファイルに「ini_set("magic_quotes_gpc",0);」を設定してみましたが、挙動に変化はないようでした(何かがブロックしているのでしょうか)。 でも、「stripslashes($no_magic);」を「$no_magic=stripslashes($no_magic);」に直したら、望んだ結果をえられました。 自分で言うのもなんですが、いかにも初心者的なミスをやっちゃいました。 今思えば、「stripslashes($no_magic);」の状態で、中途半端に動いていたのがかえって不思議ですね。 とにかく勉強になりました。ありがとうございました。