Флажки PHP Array и HTML - PullRequest
       10

Флажки PHP Array и HTML

2 голосов
/ 28 июня 2011

У меня сложная проблема, и я думаю, что это будет трудно объяснить, так голый со мной.

У меня есть строка, сохраненная в базе данных MySQL, строка выглядит следующим образом:

Пункт: 19,99 / item2: 24,99

Мне удалось разделить массив на:

Array(
[0] => Array
    (
        [0] => item
        [1] => 19.99
    )

[1] => Array
    (
        [0] => item2
        [1] => 24.99
    ))

Мне нужно перебрать массив, отображая все элементы из таблицы MySQL под названием «категории» (где «элемент» - категория), но хитрый момент - сделать флажки в выбранном массиве, за которым следует текстовое поле, содержащее цену

Я знал, что это будет трудно объяснить, и единственный способ сделать его проще для понимания - предоставить требуемый вывод HTML:

<input type="checkbox" value="item" checked="checked" />Item <input type="text" value="19.99"/>
<input type="checkbox" value="item1" />Item 1 <input type="text"/>
<input type="checkbox" value="item2" checked="checked" />Item 2 <input type="text" value="24.99"/>
<input type="checkbox" value="item3" />Item 3 <input type="text"/>
<input type="checkbox" value="item4" />Item 4 <input type="text"/>

Надеюсь, я объяснил это достаточно хорошо, и я очень надеюсь, что кто-то может помочь!

Ответы [ 4 ]

1 голос
/ 28 июня 2011

Без вашей информации об организации MySQL это лучшее, что я могу вам дать:

<?php

    $array = array(array('item', '19.99'),
            array('item1', NULL),
            array('item2',  '24.99'),
            array('item3', NULL),
            array('item4', NULL));

    foreach ($array as $item) {

        echo '<input type="checkbox" value="' . $item[0] . '"' . ($item[1] ? ' checked="checked"' : '') . ' />' . $item[0] . '<input type="text"' . ($item[1] ? ' value="' . $item[1] . '"' : '') . "/><br />\n";
    }

?>

Выходы:

<input type="checkbox" value="item" checked="checked" />item<input type="text" value="19.99"/><br />
<input type="checkbox" value="item1" />item1<input type="text"/><br />
<input type="checkbox" value="item2" checked="checked" />item2<input type="text" value="24.99"/><br />
<input type="checkbox" value="item3" />item3<input type="text"/><br />
<input type="checkbox" value="item4" />item4<input type="text"/><br />

http://codepad.org/fGpGCXwm

Надеюсь, что вы можете проанализировать это и заставить его работать на вас.

1 голос
/ 28 июня 2011

Сначала вы должны реструктурировать массив «выбранных элементов», чтобы с ним было легче работать.Смотрите мой пример.Затем, когда вы просматриваете все свои товары, просто проверьте, есть ли цена в выбранном массиве.

Пример:

// Updated your array of selected item so that the name is the key and the price the value.
//
// For example:
// 
// Array(
// [item] => 19.99
// [item2] => 24.99
// )
foreach ( $selected_items as $key => $selected_item )
{
  $selected_items[$selected_item[0]] = $selected_item[1];
  unset($selected_items[$key]);
}

// ...

// While looping through all of the items from your SQL query:
while ( $item = mysql_fetch_assoc($result) )
{
  if ( ! empty($selected_items[$item]) )
    echo '<input type="checkbox" value="' . $item['key'] . '" selected="selected" />' . $item['name'] . '<input type="text" value="' . $selected_item[$item['key']] . '" />';
  else
    echo '<input type="checkbox" value="' . $item['key'] . '" />' . $item['name'] . '<input type="text"/>';
}

PS: Возможно, вы захотитедобавить атрибут name к флажкам и полям ввода.

На основе вашего комментария ниже :

Измените цикл foreach на этот:

foreach($b as $c)
{
  list($key, $value) = explode(':', $c);
  $d[$key] = $value;
}
0 голосов
/ 28 июня 2011

Я не уверен, какой бэкэнд вы используете, но лучший способ хранить данные в базе данных - это не объединять несколько типов данных в одном поле, а использовать числовые идентификаторы вместо текстовыхидентификаторы.Вы можете создать таблицу типа:

id       name          price
----------------------------------
1        Item          19.99
2        Item 1        0
3        Item 2        24.99
4        Item 3        0
5        Item 4        0

Обратите внимание, что мой пример показывает "0", где цена не была введена.Это потому, что вы, вероятно, захотите, чтобы столбец цен был сохранен в виде десятичного числа (с двумя десятичными разрядами), в результате чего пустое значение будет иметь значение по умолчанию «0».Это нормально.Ваш пользовательский интерфейс не должен отображать «0».

Затем, когда вы извлекаете данные из базы данных, вы можете получить такой массив:

Array(
    [0] => Array
    (
        [id] => 1
        [name] => Item
        [price] => 19.99
    )
    [1] => Array
        [id] => 2
        [name] => Item 1
        [price] => 0
    )
)
and so on...

тогда вы можете отобразить значения в вашем .php, как показано ниже:

<?php
foreach ($data as $row) {
    explode($row);

    if ($price > 0) {
        $checked = 'checked="checked"';
    } else {
        $checked = '';
        $price = '';
    }

    $pattern = '<input type="checkbox" name="categories[%s]" value="1" %s> '
        . '%s <input type="text" name="prices[%s]" value="%s">';

    echo sprintf($pattern, $id, $checked, $name, $id, $price);
}
?>

Затем при получении ввода формы, вы хотите, чтобы переменные были $_POST['categories'] и $_POST['prices'].

0 голосов
/ 28 июня 2011

Хотелось бы что-нибудь подобное?

<?php
foreach($array as $values){
    echo '<input type="checkbox" value="item" checked="checked" />' . $values[0] . ' <input type="text" value="' . $values[1] . '"/>'
}
?>

Я не уверен, как вы узнаете, проверяется ли значение или нет, но как только вы получите это значение в переменной или как часть массива, просто используйте оператор if для вывода

checked="checked" 

при необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...