0

私のプログラムでは、フォームから送信された値を取得し、SQL クエリで使用して結果を取得し、再び $_GET["name"] 値を使用してデータをデータベースにフィードしようとしています。次のコードは while loop $_GET["name"] 内で値を伝播していません

    <?php
    session_start();
    $id = $_GET["name"];
    echo "<h2> Hello ".$id." </h2>" ;
    if((isset( $_POST['dept'])))

    {

    echo "<h2><center>You have sected  &nbsp;&nbsp;&nbsp;&nbsp;". $_POST['dept'] ." !!</center></h2>";


        $dept_ = $_POST['dept'];
          $options = $_POST['course'];
                 foreach($options as $option) //loop through the checkboxes
                 {

                    $uid="root";
                    $pass="root";

                    $db = mysql_connect("localhost:3036",$uid,$pass);
                if(!$db) die("Error connecting to MySQL database.");
                mysql_select_db("sync" ,$db);


        $result = mysql_query("SELECT DISTINCT `name`,`password`,INET_NTOA( `ip` ) FROM detail Where id = '$_GET["name"]' ;") or die(mysql_error());

        if(mysql_num_rows($result) > 0):

            while($row = mysql_fetch_assoc($result)): 
                    $name = $row['name']; 
                    $password = $row['password']; 
                $ip = $row['INET_NTOA( `ip` )'];
                echo $name ;            // NOT PRINTING ANYTHING
                echo $password ;       // NOT PRINTING ANYTHING
                echo $_GET["name"] ;  // NOT PRINTING ANYTHING


                $sql1_Qu = "INSERT INTO registration (id,password,ip,name,course) VALUES ('$_GET["name"]','$password',INET_ATON('$ip'),'$name','$option')";
                //$sql1_Qu = "INSERT INTO registration (id,password,ip,name,course) VALUES ('$id','$password',INET_ATON('$ip'),'$name','$option')";
                $resu = mysql_query($sql1_Qu) or die('Could not connect: ' . mysql_error());
            endwhile;
        endif;

         }
    }
?>

これは 4 行目でのみ出力されますが、データベース クエリを含む while ループ内の値は伝播されません。

問題を解決する方法を提案してください...よろしくお願いします

4

4 に答える 4

1

この行:

$result = mysql_query("SELECT DISTINCT `name`,`password`,INET_NTOA( `ip` ) FROM detail Where id = '$_GET["name"]' ;") or die(mysql_error());

間違ったエスケープがあり、インジェクションに対して脆弱です。エスケープを修正し、同時に安全な関数を使用します。

$result = mysql_query(
            sprintf("
              SELECT
                DISTINCT `name`,
                `password`,
                INET_NTOA( `ip` )
              FROM
                detail
              WHERE
                id = '%s'
             ", mysql_real_escape_string($id))
             ) or die(mysql_error());
于 2013-05-25T18:01:10.363 に答える