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>';
}
//而???在混乱的回声中可能很难看到,但有一个部分我不知道如何处理。 PHP 正在抓取信息行,并很好地填充它们。 它用小信息框填充屏幕。
在本节中,我不知道如何处理,其中一行中的数据每次都包含多个内容(thing1,thing2,thing3(,由(,(分隔。 我需要在新事物中的每一种东西
1所以我觉得每张卡里面会有一个 while 循环吗?
你走在正确的轨道上。尝试这样的事情,它根据逗号分隔符将字符串分解成一个数组,explode()
:
echo '<select name="set">';
foreach( explode( ',', $row['sets']) as $item)
echo '<option>', $item, '</option>';
echo '</select>';
字符串分解为数组后,您可能需要一个 foreach 语句:而不是//while 行和以下行:
foreach (explode(',', $row['sets']) as $value)
echo '<option value="', $value, '">', $value,'</option>';
我想你实际上可能每行都有另一个值(一个要显示,另一个是你想要设置的实际值(,但是字符串看起来更像"(key1=value1,key2=value2(",然后你需要更多的工作,但你明白了。希望这有帮助。
是的,您需要首先将该行explode
到数组中
$list_of_things = explode(",", $row['whatever']);
然后使用while
或foreach
:
$thing_options = '';
foreach($list_of_things as $thing)
$thing_options .= "<option>$thing</option>";
您可能还会发现此处的文档语法很有用:
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;
虽然所有告诉您explode()
数组的答案都是正确的,但我不禁认为,用逗号分隔值填充数据库列是数据库未规范化的症状。 您应该查看以下链接以获取数据库规范化的介绍:http://mikehillyer.com/articles/an-introduction-to-database-normalization/
我还建议不要回显 HTML。 理想情况下,您的 PHP 脚本应遵循以下模式:
预先处理所有 PHP,包括数据库查询和表单处理。 结果应存储在变量中。
|
|
|
五
几乎是纯HTML模板/视图,具有足够的显示逻辑(if/else,循环,echo
(来实际显示您在步骤1中存储在变量中的结果。
你会发现,如果你让PHP成为大脑,让HTML成为美女,调试/编辑就会简单得多。 就像标记和样式应该分开一样,脚本和显示也是如此。
您可以使用 PHP 的 explode
-方法将逗号分隔的字符串拆分为其值,然后在 foreach 循环中处理该数组:
$raw = "one,two,three";
$values = explode("," $raw);
foreach($values as $value) {
echo $value;
}