2015-04-01 4 views
-1

Я пытаюсь вызвать tinyInt с моего сервера, преобразовывая его в логическое.Есть ли более простой способ вызова булевых из php?

Есть ли более простой способ сделать это, чем то, что я использую?

while ($row = mysql_fetch_array($result)) { 
    echo "<td>", 
     "<input type=\"checkbox\" id='switch-state' name=\"$row[name]\" state=\"<script boolean(<? echo '$row[state]'; ?>) </script>\" </td>"; 
} 
+2

Что такое предполагаемый выход? – Tomalak

ответ

2

Это все виды неправильно.

  • Вы не можете поместить тег <script> внутри атрибута HTML. Это действительно ужасно.
  • У вас не может быть нескольких элементов HTML с одинаковым идентификатором. Когда в цикле, используйте счетчик для создания уникальных идентификаторов.
  • Вы должны передать все строковые данные, выводимые в HTML, через htmlspecialchars(), чтобы не нарушать результат HTML и минимизировать риск уязвимостей XSS.
  • Для переноса дополнительных данных в элемент можно использовать что-то отличное от нестандартных атрибутов (например, state="…"). Атрибуты HTML5 data-* были бы хорошо подходят (data-state="…"). Другой вариант - это, например, класс CSS. Это зависит от того, что вы намерены делать с информацией штата.
  • JavaScript может обрабатывать номера просто отлично. При использовании в булевом контексте, 0 оценивается до false, все остальные цифры оцениваются до true. Возможно, вам захочется передать данные сервера, как есть, вместо того, чтобы переводить его.

Вот что я буду делать.

$index = 0; 
while ($row = mysql_fetch_array($result)) { 
    $index++; 
    echo "<td>", 
     "<input type='checkbox' ", 
      "id='switch-state-$index' ", 
      "name='".htmlspecialchars($row['name'])."' ", 
      "data-state='".$row['state']}."'", 
     "></td>\n"; 
} 

, который выводит:

<td><input type='checkbox' id='switch-state-1' name='foo' data-state='1'></td> 
<td><input type='checkbox' id='switch-state-2' name='bar' data-state='0'></td> 
+0

. я получаю ошибку, говоря, что скобки не должны быть там. Это потому, что оно вторит этим? – BrandonMOrris

+0

@Brandon Я немного изменил свой ответ, я сам ошибся в этом синтаксисе интерполяции строк. Виноват. – Tomalak

0

сокращенная PHP будет здесь хорошо

//Add this bit and reformat your statement 
echo ($row['state'] == 1) ? "true" : "false"; 

$format = "<td>%s</td><td>%s</td><td>%f</td><td>%f</td><td><input type=\"checkbox\" id='switch-state' name=\"%s\" state=\"%s\" </td>"; 

$data = sprintf($format, $row['city'], $row['name'], $row['lat'], $row['long'], $row['name'], ($row['state'] == 1) ? "true":"false"); 

echo $data; 
+0

Можете ли вы мне объяснить? ($ Row ['state'] == 1)? «true»: «false»); ' – BrandonMOrris

+0

Его в основном оператор if и дает результат, поэтому бит в скобках является тестом, а затем после вопросительного знака, если его истина и после двоеточия, если его ложь – Adsy2010

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