while($row = mysql_fetch_array($result))
//Template for each card in search result
{
echo '<div class="sleeve">';
echo '<div class="card ', $row['name'], '">';
echo '<div class="front face">';
echo '<img src="/', $row['cardset'], '/', $row['name'], $row['altart'], '.jpg"', ' alt="', $row['name'], '" />';
echo '</div>';
echo '<div class="back face">';
echo '<a id="name">', $row['name'], '</a><br/>';
echo '<form name="info" action="">';
echo '<select name="set">';
//while???
echo '<option value="Zendikar">', $row['sets'],'</option>';
echo '</select>';
echo 'Foil:<input type="checkbox" name="foil" value="true"/><br/>';
echo '<select name="condition">';
echo '<option value="Near Mint">Mint</option>';
echo '<option value="Played">Played</option>';
echo '<option value="Damaged">Damaged</option>';
echo '</select>';
echo 'Trade:<input type="checkbox" name="trade" value="true"/ <br/>';
echo '</form>';
echo '<b>Rulings:</b> <br/>';
echo $row['rulings'];
echo '</div>';
echo '</div>';
echo '</div>';
}
// while ??? 在那些混乱的回声中可能很难看到,但有一节我不知道如何处理。 PHP正在抓取信息行,并很好地填充它们。它用一小撮信息填满了屏幕。
在本节中,我不知道如何处理,其中一行中的数据包含每次用(,)分隔的多个东西(thing1,thing2,thing3)。我需要新东西中的每一件事1
所以我觉得每张卡片里面会有另一个while循环?
答案 0 :(得分:3)
你在循环的正确轨道上。试试这样的东西,它会根据逗号分隔符将字符串分解为数组explode()
:
echo '<select name="set">';
foreach( explode( ',', $row['sets']) as $item)
echo '<option>', $item, '</option>';
echo '</select>';
答案 1 :(得分:2)
在将String爆炸成数组之后,您可能需要一个foreach语句: 而不是// while行和下一行:
foreach (explode(',', $row['sets']) as $value)
echo '<option value="', $value, '">', $value,'</option>';
我猜你实际上每行可能有另一个值(一个要显示,另一个是你要设置的实际值),但是String看起来更像是“(key1 = value1,key2 = value2)“然后你需要更多的工作,但你明白了。 希望这会有所帮助。
答案 2 :(得分:1)
是的,您需要先将explode
行放入数组
$list_of_things = explode(",", $row['whatever']);
然后使用while
或foreach
:
$thing_options = '';
foreach($list_of_things as $thing)
$thing_options .= "<option>$thing</option>";
您可能还会发现 here document 语法很有用:
print <<<TEMPLATE
<div class="sleeve">
<div class="card {$row['name']}">
<div class="front face">
<img src="/{$row['cardset']}/{$row['name']}{$row['altart']}.jpg"
alt="{$row['name']}" />
</div>
<div class="back face">
<a id="name">{$row['name']}</a>
<br/>
<form name="info" action="">
<select name="set">
{$thing_options}
<option value="Zendikar">{$row['sets']}</option>
</select>
...
TEMPLATE;
答案 3 :(得分:1)
虽然告诉您explode()
数组的所有答案都是正确的,但我不禁想到让db列填充逗号分隔值是数据库未规范化的症状。您应该查看以下链接,了解db规范化的介绍:http://mikehillyer.com/articles/an-introduction-to-database-normalization/
我还建议不回显HTML。理想情况下,您的PHP脚本应遵循以下模式:
预先处理所有PHP,包括数据库查询和表单处理。结果应存储在变量中。
|
|
|
V
几乎纯粹的HTML模板/视图,只有足够的显示逻辑(if / else,循环,echo
)来实际显示存储在步骤1中的变量中的结果。
如果你让PHP成为大脑而HTML就是美女,你会发现调试/编辑要简单得多。就像标记和样式应该如何分开一样,脚本和显示也是如此。
答案 4 :(得分:0)
您可以使用PHP的explode
-method将逗号分隔的字符串拆分为其值,然后在foreach循环中处理该数组:
$raw = "one,two,three";
$values = explode("," $raw);
foreach($values as $value) {
echo $value;
}