2015-01-19 21 views
-4

У меня есть простая форма с php и получить значения из базы данных. Существует раскрывающийся список для типов членства (обычный и золотой). Я пытаюсь заполнить выбранное значение выпадающего списка из базы данных. (Значение MEMBER_TYPE)Получить выбранное значение из базы данных MYSQL

<?php 
$sql = mysql_query("SELECT * FROM members");  
while($read = mysql_fetch_array($sql)) { 

$MemName = $read['member_name']; 
$MemType = $read['member_type']; 

echo '<td><input type="text" name="mname" id="mname" value="'.$MemName.'"></td> 
<td> 
<select> 
<option value="Normal">Normal</option> 
<option value="Gold">Gold</option> 
</select> 
</td> 
'; 
} 
?> 
+2

Здесь нет вопроса. –

+0

очень базовая концепция. Отсутствует отладка. – geggleto

+0

какая именно проблема? $ MemName echo out ok? – user3479671

ответ

1

два токовых решения могут быть оба улучшен, на мой взгляд:

<?php 
$sql = mysql_query("SELECT * FROM members");   
?> 

<?php while($read = mysql_fetch_array($sql)): ?> 
    <td> 
     <input 
      type="text" 
      name="mname" 
      id="mname" 
      value="<?php echo $read['member_name'] ?>" 
     > 
    </td> 
    <td> 
     <select> 
      <option 
       value="Normal" 
       <?php echo $read['member_type'] == 'Normal' : 'selected' : '' ?> 
      >Normal</option> 
      <option 
       value="Gold" 
       <?php echo $read['member_type'] == 'Gold' : 'selected' : '' ?> 
      >Gold</option> 
     </select> 
    </td> 
<?php endwhile ?> 

Чем отличается Вот?

  • Важно отметить, что HTML не попал внутрь echo операторов. Посмотрите, насколько проще читать? Вам не нужно беспокоиться об ускорении кавычек или чередовании одиночных и двойных кавычек.
  • Структура меню <select> добавляется только один раз - это довольно неэффективно, чтобы иметь его в коде несколько раз, каждый с другим выбранным элементом. Представьте себе, насколько неудобно было бы поддерживать, если бы у вас было больше пунктов меню - дополнительное предложение else для каждого!
  • HTML-элементы распределены по нескольким строкам, если это делает их более читаемыми. Обратите внимание, что это всегда был правильный способ выражения HTML.
  • Режим PHP вводится только для настройки страницы (первая половина) и где есть динамический контент для рендеринга.
  • Назначение переменных на самом деле ничего не добавило, поэтому я использовал массив, назначенный внутри цикла
  • Поскольку цикл while, возможно, является частью слоя шаблона, я переключился из формы фигуры в форму двоеточия, который является популярным стандартом. Я думаю, что это более читаемо, так как добавление } внутри тега PHP не очень заметно внутри HTML.

Nota Bene:

  • Если $MemName приходит от пользовательского ввода (или действительно любые данные, которые вы предоставляете) убедитесь, что вы избежать его с помощью htmlentities(), в противном случае вы могли бы ввести уязвимость XSS.
  • Имя переменной $sql, возможно, не идеально - возвращаемое значение функции запроса является результатом базы данных. SQL - это его вход . Я бы предложил использовать $result или аналогичный здесь.
+0

Отлично! Спасибо огромное! – Dejavu

+0

Добро пожаловать @Dejavu, рад, что это помощь. – halfer

0

Put, если на вашем MemType

<?php 
    $sql = mysql_query("SELECT * FROM members");  
    while($read = mysql_fetch_array($sql)) { 

     $MemName = $read['member_name']; 
     $MemType = $read['member_type']; 

     echo '<td><input type="text" name="mname" id="mname" value="'.$MemName.'"></td><td>'; 
     if($MemType == 'Normal') { 
      echo '<select> 
      <option value="Normal" selected>Normal</option> 
      <option value="Gold">Gold</option> 
      </select>'; 
     }else if($MemType == 'Gold') { 
      echo '<select> 
      <option value="Normal">Normal</option> 
      <option value="Gold" selected>Gold</option> 
      </select>'; 
     } else { 
      echo '<select> 
      <option value="Normal">Normal</option> 
      <option value="Gold">Gold</option> 
      </select>'; 
     } 
     echo '</td>'; 
    } 
?> 
+0

Большое вам спасибо! – Dejavu

+1

@Dejavu: помните, что в этом коде есть чрезмерное повторение. Лучше иметь одно меню, а затем добавлять «выбранные» теги в случае необходимости. – halfer

+0

У вас есть пример? Спасибо – Dejavu

1
<?php 
$currentMembership = 'Gold'; 
$sql = mysql_query("SELECT * FROM members");  
while($read = mysql_fetch_array($sql)) { 

    $MemName = $read['member_name']; 
    $MemType = $read['member_type']; 

    echo '<td><input type="text" name="mname" id="mname" value="'.$MemName.'"></td> 
    <td> 
    <select> 
    <option value="Normal" ' . ($MemType == 'Normal' ? ' selected' : '') .'>Normal</option> 
    <option value="Gold"' . ($MemType == 'Gold' ? ' selected' : '') .'>>Gold</option> 
    </select> 
    </td> 
    '; 
} 
?> 
+0

Будет работать (+1), но я склонен рекомендовать против захвата больших блоков HTML в выражениях 'echo', поскольку он становится громоздким. См. Мой ответ для альтернативного подхода. – halfer

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