$ _GET [“name”]值不在循环内传播

时间:2013-05-25 17:50:33

标签: php

在我的程序中,我试图获取表单提交的值并在sql查询中使用以检索结果,然后再次使用$ _GET [“name”]值将数据提供给数据库。 以下代码不会在循环$ _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行打印,但是在循环中没有传播值,包含数据库查询。

请提出一些解决问题的方法...... 提前致谢

4 个答案:

答案 0 :(得分:2)

我认为您在转发$_GET["name"]的双重报价时遇到问题。如果您使用$_GET$_POST表单,我也不清楚,因为您使用它们,这可能是一个错误。

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

此外,您的代码对于sql注入非常难以理解,请查看this post

然后我希望您记住mysql_*函数已被弃用,因此我建议您切换为mysqliPDO

答案 1 :(得分: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());

答案 2 :(得分:0)

变化:

    FROM detail Where id = '$_GET["name"]' ;")

    FROM detail Where id = '" . $id .  "';")

答案 3 :(得分:0)

您应该对此感到高兴,因为您的网站对人们称之为SQL注入的内容感到尖叫。 http://en.wikipedia.org/wiki/SQL_injection

基本上,您网站的用户只需将?name=<some sql code>添加到您的网址并操纵您的数据库(即更改密码)。始终有效输入!绝对不要在SQL查询中使用$ _GET或$ _POST。

在此处阅读更多内容以了解如何防止SQL注入:http://php.net/manual/en/security.database.sql-injection.php

至于你的答案。你正在错误地连接你的字符串(或者实际上......根本没有)。

尝试以这种方式构建字符串: "INSERT INTO registration (id,password,ip,name,course) VALUES ('" . $_GET["name"] . "','$password',INET_ATON('$ip'),'$name','$option')"