• ベストアンサー

チェックボックス等の扱い。

http://oguchan.s4.xrea.com/language/php/ のサイトにて、 <FORM> <INPUT TYPE="TEXT" NAME="hoge" VALUE="1"> <INPUT TYPE="SUBMIT"> </FORM> は、phpスクリプト内で$hogeで参照でき、しかしそれは危険であるから、 register_globals を無効にしてこれをできなくする。とあります。 PHP4~もそういうように設定されていると聞きました。 しかし、チェックボックスで同じname、で異なるvalueをもつ複数のデータを扱うときに、 <input type="checkbox" name="delno[]" value="no1"> <input type="checkbox" name="delno[]" value="no2"> としたときに、 echo $_POST['delno'][0]; echo $_POST['delno'][1]; と参照できてしまうのですが、これはいいのですか?

  • arcsin
  • お礼率46% (194/417)
  • PHP
  • 回答数3
  • ありがとう数1

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

  • ベストアンサー
回答No.3

セキュリティ上でも、危険だと思うよ。 test.php?hoge=123 としてアクセスすれば、$hogeの初期値が123になってしまう。 スクリプト内の変数名がわかれば、ユーザーが変数の初期値を 設定できてしまう。 ローカル変数だったら、コード内で初期化するから、 さほど影響ないかもしれない。 グローバル変数だったら、いろいろと問題だと思うよ。 ↓の参考urlのように、認証でそんなコード書かないと思うけど、 ユーザーが変数の値を操作できるってのは、危険かと。

参考URL:
http://php.s3.to/man/security.registerglobals.html

その他の回答 (2)

  • little-m
  • ベストアンサー率44% (45/102)
回答No.2

>は、phpスクリプト内で$hogeで参照でき、しかしそれは危険であるから、 >register_globals >を無効にしてこれをできなくする。とあります。  この場合の危険とは、セキュリティ上危険という意味でなく、phpのプログラム内で、意識せず$hogeという変数を使用した場合に、混同する危険があって、バグなどの発生する危険が増える、という意味の危険だと思いますよ。

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

いいのですよ。 register_globalsの有無というのは、NAME="hoge"が$hogeとしてアクセスできるかできないか、という意味だ。 register_globals=ON:NAME="hoge"→$hogeでアクセスできる。$_POST['hoge']でもアクセスできる。 register_globals=OFF:NAME="hoge"→$_POST['hoge']でアクセスできる。 なので$_POST連想配列はregister_globalsの値にかかわりなくいつでも使えるので安心してくれたまい。 $delno[0]、$delno[1]でアクセスできないよ、という意味だ。$_POST連想配列を介した時は参照できるね。

関連するQ&A

  • チェックボックスの初期選択と選択保持

    複数のチェックボックスのうちどれかを初期選択させ、ボタン押下後は選択保持をさせたいです。 片方のみならできるのですが、どなたかご教授いただけるとうれしいです。 現在のソースはこんな感じになっていて選択したものの保持はできるのですが、初期選択ができていません。よろしくおねがいします。 <html> <body> <form name="form" method="post"> <?php test1() ?> test1 <?php test2() ?> test2 <?php test3() ?> test3<br><br> <input type="submit" name="button" value="button"> </form> <?php function test1(){ if ($_POST['test1']){ echo "<input type=\"checkbox\" name=\"test1\" checked>"; }else{ echo "<input type=\"checkbox\" name=\"test1\">"; } } function test2(){ if ($_POST['test2']){ echo "<input type=\"checkbox\" name=\"test2\" checked>"; }else{ echo "<input type=\"checkbox\" name=\"test2\">"; } } function test3(){ if ($_POST['test3']){ echo "<input type=\"checkbox\" name=\"test3\" checked>"; }else{ echo "<input type=\"checkbox\" name=\"test3\">"; } } ?> </body> </html>

    • 締切済み
    • PHP
  • チェックボックスのデータの受け取り方について

    以下のようなチェックボックスを作ったとき、 test.phpではどうやって受け取ればよいのでしょうか? nameがそれぞれ違う場合は分かるのですが... 教えてください。 <form method="POST" action="test.php"> <input type="checkbox" name="color" value="red">赤</input> <input type="checkbox" name="color" value="blue">青</input> <input type="checkbox" name="color" value="white">白</input> <input type="checkbox" name="color" value="black">黒</input> <input type="submit" value="送信" > </form>

    • ベストアンサー
    • PHP
  • チェックボックスのチェックについて

    submit時に一つでもチェックがなければアラートを表示 チェックがあれば進む・・・としたいです。 <form action=next.html name=form1> <input type=checkbox name=checkbox1 value=1> <input type=checkbox name=checkbox2 value=2> <input type=checkbox name=checkbox3 value=3> <input type=checkbox name=checkbox4 value=4> <input type=checkbox name=checkbox5 value=5> ~以下50まで続きます <input type=submit value=submit> </form> function countChecked(form1) { var total = 0; var max = 50; for (var index = 0; index < form1.checkbox.length; index++) { total += form1.checkbox[index].checked ? 1 : 0; } if(countChecked(document.form1)) > 0) { return true; } else { alert("no"); return false; } return(total); } 過去に似たような質問を参考に作ってみましたがダメでした。 チェックボックスの名前の付け方が悪いのでしょうか。

  • チェックボックスから配列を使って値を受け取る方法

    チェックボックスから配列を使って値を受け取る方法について、 以下の通りに試してみたのですが、上手く行かず、 配列$fCに値が入りません。 どなたか原因を教えていただけないでしょうか。 ------------------------------------------------ hoge.html <form action="hoge.php"> <input type="checkbox" name="fC[]" value="hoge"> hoge <br> <input type="checkbox" name="fC[]" value="foo"> foo <br> <input type="checkbox" name="fC[]" value="bar"> bar <br> <input type="submit" value="OK"> </form> ---------------------------------------------------------- ------------------------------------------------- hoge.php <? for( $i=0; $i<count($fC); $i++ ) { print $i ." ::: " . $fC[$i] . "<br>\n"; } ?> ----------------------------------------------------------

    • ベストアンサー
    • 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
  • チェックボックスで複数選択した値をSQLへ

    次のような入力フォームから、SQLのテーブルに登録します。 <?php function connect() { return new PDO("mysql:dbname=★★★;host=★★★","★★★","★★★", array( PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET `utf8`")); } $pdo = connect(); if (@$_POST['submit']) { $hoge = $_POST['hoge']; if (!$error) { $pdo->query("INSERT INTO ★(hoge) VALUES('$hoge')"); header('Location: example.php'); exit(); } } ?> <form action="insert.php" method="post"> <input type="checkbox" name="hoge[]" value="りんご"/>りんご<br> <input type="checkbox" name="hoge[]" value="みかん" />みかん<br> <input type="checkbox" name="hoge[]" value="いちご" />いちご <input class="submit" type="submit" name="submit" value="登録"> </form> これで、例えば「りんご」と「みかん」をチェックして登録ボタンを押すと 受け取りのexample.phpにはArrayと表示され、SQLに反映されません。 よい方法があったら教えてください。

    • ベストアンサー
    • PHP
  • 配列で渡されたチェックボックスの値の処理

    POST元のページから <input type="checkbox" name="hoge[23]" value="1"> <input type="checkbox" name="hoge[31]" value="0"> <input type="checkbox" name="hoge[33]" value="1"> ・・・ のような形でデータが渡されます。 要素一つに付き、ONなのか、OFFなのか、表示されていないのかの判別が必要なため、このような形になっています。 受けるPHP側で、hogeの配列番号と一致したものがあればそれに対する処理を行う必要があります。 $buff=array(20,30,31); となっているとして、 $_POST["hoge"]の配列の値と$buff内の数字が一致したら~ (上記例だと31が一致) の書き方はどう書けばいいでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • チェックボックスで複数選択する方法教えて下さい

    いつもありがとうございます。 00.PHPというファイルにチェックボックスを配置して複数選択し 同じ00.phpにPOSTで情報送り、表示させたいのですが、 下記の記述では「Array」としか表示されません。 検索結果を最終的にはMYSQLにデータ登録をしたいのですが うまくいきません。御指導お願いします。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> <title>無題ドキュメント</title> </head> <body> <? echo $_POST["working_days"] ?> <form action="00.php" method="post">  <label>  <input type="checkbox" name="working_days[1]" value="1"> ド短期1日~OK <input type="checkbox" name="working_days[2]" value="2"> 週2、3日程度  <input type="checkbox" name="working_days[3]" value="3"> 月~金曜日 <input type="checkbox" name="working_days[4]" value="4"> 土日祝日のみ <input type="checkbox" name="working_days[5]" value="5"> 毎日オールフリー</label>      <input type="submit" name="Submit" value="登録"> </form> </body> </html>

    • ベストアンサー
    • PHP
  • チェックボックスをクリックした際、自動的に他の値も

    ■チェックボックスをクリックした際、自動的に他の値も追加したい 下記のようなチェックボックスがあった際に、 <input type="checkbox" name="hoge[]" value="1" />ホゲ  <input type="checkbox" name="piyo[]" value="1" />ピヨ  <input type="checkbox" name="puyo[]" value="1" />プヨ  ホゲをクリックしたら、value="1"になるかと思うのですが、 このvalue部分を動的に生成することはできるでしょうか? 例えば、ホゲをクリックしたら(ホゲをクリックした時だけ)、 自動的に、 <input type="checkbox" name="hoge[]" value="1" /> <input type="checkbox" name="hoge[]" value="2" /> <input type="checkbox" name="hoge[]" value="3" /> <input type="checkbox" name="hoge[]" value="4" /> <input type="checkbox" name="hoge[]" value="5" /> <input type="checkbox" name="hoge[]" value="6" /> <input type="checkbox" name="hoge[]" value="7" /> <input type="checkbox" name="hoge[]" value="8" /> <input type="checkbox" name="hoge[]" value="9" /> をクリックしたのと同じ処理が走るよう、スクリプトで書くには、 どうすればよいでしょうか?

  • チェックボックスのvalueを連結してURLに追加

    <form method="get" action="<?php = $_SERVER['PHP_SELF']; ?>"> <input type="checkbox" name="c" value="001" /> <input type="checkbox" name="c" value="002" /> <input type="checkbox" name="c" value="003" /> <input type="checkbox" name="c" value="004" /> <input type="checkbox" name="c" value="005" /> <input type="submit" value="送信" /> </form> submitするとURLに ?c=001&c=002&c=003… が追加されます。 その形ではなく、c=001002003… と連結してURLに追加するにはどうしたら良いですか?

    • 締切済み
    • PHP

専門家に質問してみよう