2013-05-25 2 views
0

В моей программе я пытаюсь получить значение, представленное формой, и использовать в SQL-запросе для получения результатов, а затем снова использовать $ _GET ["name" ] для подачи данных в базу данных. Следующего код не распространяющееся значения внутри в то время как петля $ _GET [ «имя»]

<?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-й линии, но не распространяющееся значения в то время как петля, которая содержит запрос к базе данных.

Пожалуйста, предложите какой-нибудь способ, чтобы решить эту проблему ... Заранее спасибо

+0

Ваш скин уязвим для SQL-инъекций и атак XSS. В дополнение к этому вы не должны использовать никаких функций 'mysql_ * 'вообще. Решите эти «ошибки» заранее. – DaGardner

+1

Все, что сказал @Christian, плюс это: почему вы используете GET и POST? Это GET или POST ?? Я бы данные могли быть в обоих местах, используйте $ _REQUEST для обоих. Кроме того, удалите из столбца точку с запятой. Это не так важно и может в некоторых случаях вызывать проблемы. – lucifurious

+0

@lucifurious вы можете опубликовать в '? Name = whatever' вы просто получите запрос POST с параметрами запроса. Работает отлично. –

ответ

0

Изменение:

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

в

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

В чем разница (кроме предпочтительного метода кодирования)? – lucifurious

+0

То, как это было сделано, происходит из-за проблем с двойной кавычкой. Вероятно, вы также можете исправить, изменив $ _GET ["name"] на $ _GET [\ "name \"]. Я бы подумал. – H2ONOCK

+1

Это не решение, так как '$ id = $ _GET ['name'];' было установлено, что эти две «переменные» равны ... – DaGardner

2

Я думаю, что у вас есть проблемы в побег своего двойника цитата для вашего $_GET["name"]. Также неясно, если у вас есть форма $_GET или $_POST, так как вы использовали их оба, и это может быть ошибкой.

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

Кроме того ваш код высокоочищенного vurnerable для SQL инъекций, пожалуйста, посмотрите на this post

Тогда я хотел бы, чтобы вы помнили, что mysql_* функции устарели, так что я бы посоветовал вам перейти на mysqli или PDO

+0

Вы можете опубликовать что-то на 'http: // /? Name = test'. Вы можете использовать оба варианта. У вас будет только запрос POST, а также параметры запроса. –

+0

@damienovereem да правильно, я исправил, спасибо. – Fabio

+0

, но это не решило проблему !! – pali

0

Вы должны быть счастливы, потому что ваш сайт кричит, что люди называют SQL-инъекцией. http://en.wikipedia.org/wiki/SQL_injection

В основном пользователь вашего сайта может просто добавить ?name=<some sql code> на ваш URL-адрес и управлять вашей базой данных (т.е. сменить пароль). ВСЕГДА ВАЛИДАТ ВХОД! НИКОГДА НЕ ИСПОЛЬЗУЙТЕ $ _GET ИЛИ $ _POST в sql-запросах.

Подробнее здесь, чтобы узнать, как предотвратить инъекции 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')"

+0

Вы можете указать, как избежать проблемы с SQL-инъекцией! – pali

+0

Я добавил ссылку на руководство по php, говорящее о SQL-инъекции. В нем также говорится о том, как избежать проблем. –

+0

это также не вставка переменной в базу данных – pali

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()); 
Смежные вопросы