2014-01-31 6 views
0

Простой код, который вставляет список команд в поле выбора. Я хотел бы установить подобранную команду с идентификатором, который находится в HREFPHP HTML select box, выбранный из MYSQL

http://localhost/teams.php?id=7&years=2011&cups=8 

<?php 
    $query = "select distinct t.team_id,t.team from teams t,years y,cups c where t.team_id=c.team_id and y.year_id=$_GET[years] and c.cup_id=$_GET[cups] ORDER BY t.team ASC"; 
    $res = mysql_query($query); 
    $option = ''; 

    while($row = mysql_fetch_assoc($res)) 
    { 
     $option .= '<option value = "'.$row['team_id'].'">'.$row['team'].'</option>'; 
    } 
?> 

<form> 
    <select id="tteam" name="team"> 
     <?php echo $option; ?> 
    </select> 
</form> 

Проблема заключается в том, что я поставил team_id = $ _ GET [ID], он показывает только одна команды. Я хочу, чтобы команда = 7 была выбрана, но другие все еще отображаются в поле выбора

+1

Это одна проблема, да. Большая проблема заключается в том, что ваш код *** широко открыт *** для SQL-инъекций. – David

ответ

1

Имейте в виду, что вы уязвимы для SQL-инъекций. См.: How can I prevent SQL injection in PHP?

С учетом этого вам необходимо использовать условное выражение, которое сравнивает $row["team_id"] с $_GET["ID"].

while($row = mysql_fetch_assoc($res)) 
{ 
if($row["team_id"] == $_GET["ID"]) 
    $option .= '<option value = "'.$row['team_id'].'" selected="selected">'.$row['team'].'</option>'; 
else 
    $option .= '<option value = "'.$row['team_id'].'">'.$row['team'].'</option>'; 
} 
+0

Это именно то, что я искал! – kaulainais

+0

Я согласен с инъекциями SQL, я буду изучать это! – kaulainais

+0

В этом коде есть ошибка. В вашем состоянии 'if' вы используете' $ _GET [ID] '. Если ID - неопределенная константа, это приведет к уведомлению PHP. –

0

Сравните ваш идентификатор из $ _GET с помощью $ row ['team_id'].

while($row = mysql_fetch_assoc($res)) 
{ 
if($row['team_id'] == $_GET["id"]) 
    $option .= '<option value = "'.$row['team_id'].'" selected="selected">'.$row['team'].'</option>'; 
else 
    $option .= '<option value = "'.$row['team_id'].'">'.$row['team'].'</option>'; 
} 
0

Я просто сосредоточиться на части контура:

while($row = mysql_fetch_assoc($res)) 
{ 
    $selected = (isset($_GET['team_id']) && $row['team_id'] == $_GET['team_id']) ? 'selected' : ''; 
    $option .= '<option value = "'.$row['team_id'].'" selected="'. $selected .'">'.$row['team'].'</option>'; 
} 
+1

Это не сработает. Он устанавливает 'selected =" "' по всей опции, кроме той, которая должна быть выбрана, которая будет выбрана 'selected =" 7 ", если он пройдет 7. Правильный синтаксис будет выбран' selected = "' '. – scenia

+0

Ах, конечно! Оказалось, что это очень важная деталь, спасибо за указание на это :) – Dale

3

1-ый всего, НИКОГДА не вставить исходные данные в запросе SQL. Вы запрашиваете инъекции SQL. Во-вторых, вам не хватает кавычек вокруг переменных $ _GET, например, в вашем SQL-запросе, в настоящее время вы получаете доступ к id с помощью $_GET[id]. Это не сработает, инкапсулируйте id в кавычки, например $_GET['id']. В-третьих, ESCAPE ваши данные!

mysql_* функции теперь устарели. Вы не должны использовать их в новом коде. Вместо этого изучите функции PDO или MySQLi. Также изучите подготовленные запросы.

Это должен быть ваш код:

<?php 
    $years = mysql_real_escape_string($_GET['years']); 
    $cups = mysql_real_escape_string($_GET['cups']); 

    $query = "SELECT distinct t.team_id, vt.team 
       FROM teams t,years y,cups c 
       WHERE t.team_id = c.team_id 
        AND y.year_id = '{$years}' 
        AND c.cup_id = '{$cups}' 
       ORDER BY t.team ASC"; 

    $res = mysql_query($query); 
    $option = ''; 

    while($row = mysql_fetch_assoc($res)) 
    { 
     // The line below specifies whether the option should be selected. 
     $selected = $row['team_id']==$_GET['id'] ? 'selected="selected"' : ''; 

     $option .= '<option ' . $selected . ' value= "' . $row['team_id'] . '">' . $row['team'] . '</option>'; 
    } 
?> 

<form> 
    <select id="tteam" name="team"> 
     <?php echo $option; ?> 
    </select> 
</form> 
+0

'mysql_real_escape_string()' - лучшая идея, но построение SQL-запросов - отличная идея. –

+0

@josh Я не понимаю! Что не очень важно для создания SQL-запросов? –

+1

Эти функции * устарели *. В результате они могут потерять часть своей материальной ценности. Альтернативно, их дефицит может способствовать повышению их ценности; Я просто не знаю. ;-) – Strawberry

1
while($row = mysql_fetch_assoc($res)) 
{ 
    $option .= '<option value = "'.$row['team_id'].'" '.($row['team'] == 7 ? 'selected="selected"': '').'>'.$row['team'].'</option>'; 
} 
+0

Возможно, вы захотите удалить «echo». – scenia

+0

@scenia Ta, пропустил это :) – Fredd

+0

+1 для троичного оператора кстати, вот что я бы опубликовал, если бы я понял вопрос в первую очередь: D – scenia

Смежные вопросы