PHP数组和HTML复选框

时间:2011-06-27 22:50:04

标签: php arrays loops

我有一个复杂的问题,我认为很难解释这个问题。

我在MySQL数据库中保存了一个字符串,字符串如下:

项:19.99 / ITEM2:24.99

我设法将数组拆分为:

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

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

我需要循环遍历数组,显示名为'categories'的MySQL表中的所有项(其中'item'是一个类别),但是棘手的一点是选中数组中的复选框,然后是包含价格的文本框

我知道这很难解释,而且我能让它更容易理解的唯一方法就是提供所需的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 个答案:

答案 0 :(得分:1)

首先,您应该重新构建“选定项目”数组,以便更容易使用。看看我的例子。然后,当您遍历所有项目时,只需检查所选数组中是否有价格。

示例:

// 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;
}

答案 1 :(得分:1)

如果没有您的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

希望你能解剖一下,让它适合你。

答案 2 :(得分:0)

这样的事情会起作用吗?

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

我不知道你是怎么知道是否检查了一个值,但是一旦你在一个变量中或者作为数组的一部分,只需使用if语句来输出

checked="checked" 

如果有必要。

答案 3 :(得分:0)

我不确定您使用的是哪种后端,但是在数据库中存储数据的更好方法不是在同一字段中组合多种类型的数据,而是使用数字ID而不是基于文本的ID的。您可以创建一个表格,如:

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”,其中未输入任何价格。这是因为您可能希望将price列存储为十进制数(带有两个小数位),这将使空值默认为“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']