PHP数组和HTML复选框
我在MySQL数据库中保存了一个字符串,字符串如下:PHP数组和HTML复选框,php,arrays,loops,Php,Arrays,Loops,我在MySQL数据库中保存了一个字符串,字符串如下: item:19.99/item2:24.99 我已成功将阵列拆分为: Array( [0] => Array ( [0] => item [1] => 19.99 ) [1] => Array ( [0] => item2 [1] => 24.99 )) 我需要在数组中循环,显示MySQL表中名为“cate
item:19.99/item2:24.99
我已成功将阵列拆分为:
Array(
[0] => Array
(
[0] => item
[1] => 19.99
)
[1] => Array
(
[0] => item2
[1] => 24.99
))
我需要在数组中循环,显示MySQL表中名为“categories”(其中“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"/>
项目
项目1
项目2
项目3
项目4
首先,您应该重新构造“选定项目”的数组,以便更容易使用。看我的例子。然后,当您遍历所有项目时,只需检查所选数组中是否有价格
示例:
// 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"/>';
}
你喜欢这个工作吗
<?php
foreach($array as $values){
echo '<input type="checkbox" value="item" checked="checked" />' . $values[0] . ' <input type="text" value="' . $values[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 />
项目
项目1
项目2
项目3
项目4
希望您能仔细分析并使其适合您。我不确定您使用的是哪种后端,但在数据库中存储数据的更好方法是不要在同一字段中组合多种类型的数据,而是使用数字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);
}
?>
然后,在检索表单输入时,您需要的变量是
$\u POST['categories']
和$\u POST['prices']
项目3的价格是多少,它存储在哪里?其他项目名称存储在哪里?我们可以从您的数据库中获取一些格式/数据吗?分类材料?是的,弗朗索瓦说的(而且打字速度比我快得多)+1:)我知道这是业余的,但我如何重新构造数组,目前我有:$b=explode(“/”,$a['cat');foreach($b作为$c){$d[]=explode(“:”,$c);}其中$a['cat']是string@Lee价格-我的更新答案有一个新的foreach
循环供您使用,它将执行我原始答案中的foreach
循环所做的操作(即项目名称=>Price)。从那里,当您循环浏览其余项目时,您可以检查它是否存在于$d
数组中,如我的示例所示。您!我并没有完全按照你的建议去做,我用了array_key_exists()来代替它,但由于你对数组进行了重组,我使它工作起来了,所以我要在这一点上给你所有的信任:)谢谢again@Lee价格-我很高兴能帮上忙。:)谢谢,但这种方法不适合我,因为这些项与已检查项位于不同的表中。如果您可以提供数据库的某些结构,那么我可以进行这些更改。
Array(
[0] => Array
(
[id] => 1
[name] => Item
[price] => 19.99
)
[1] => Array
[id] => 2
[name] => Item 1
[price] => 0
)
)
and so on...
<?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);
}
?>