0
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),每次都用 (, ) 分隔。我需要新事物中的每一个

所以我觉得每张卡内都会有另一个while循环?

4

5 回答 5

3

你在正确的轨道上循环。尝试这样的事情,它将字符串分解成一个数组,基于逗号分隔符,使用explode()

echo '<select name="set">';
foreach( explode( ',', $row['sets']) as $item)
    echo '<option>', $item, '</option>';
echo '</select>';
于 2012-09-06T15:59:45.533 回答
2

在将字符串分解为数组之后,您可能需要一个 foreach 语句:而不是 //while 行和以下行:

foreach (explode(',', $row['sets']) as $value)
  echo '<option value="', $value, '">', $value,'</option>';

我猜你实际上可能每行都有另一个值(一个要显示,另一个是你要设置的实际值),但是字符串看起来更像“(key1 = value1,key2 = value2)”然后你需要做更多的工作,但你明白了。希望这可以帮助。

于 2012-09-06T16:04:40.137 回答
1

是的,您需要先explode将该行放入一个数组中

$list_of_things = explode(",", $row['whatever']);

然后使用 awhile或 a 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;
于 2012-09-06T15:59:59.917 回答
1

虽然告诉您explode()数组的所有答案都是正确的,但我不禁认为,有一个用逗号分隔的值填充的 db 列是您的数据库未规范化的症状。您应该查看以下链接以了解数据库规范化的介绍:http: //mikehillyer.com/articles/an-introduction-to-database-normalization/

我还建议不要回显 HTML。理想情况下,您的 PHP 脚本应遵循以下模式:

预先进行所有 PHP 处理,包括数据库查询和表单处理。结果应存储在变量中。

|
|
|

几乎是纯 HTML 模板/视图,只有足够的显示逻辑(if/else、循环、echo)来实际显示您存储在步骤 1 中的变量中的结果。

如果您让 PHP 成为大脑,HTML 成为美丽,您会发现调试/编辑要简单得多。就像标记和样式应该如何分开一样,脚本和显示也是如此。

于 2012-09-06T16:07:55.043 回答
0

您可以使用 PHP 的explode- 方法将逗号分隔的字符串拆分为其值,然后在 foreach 循环中处理该数组:

$raw = "one,two,three";
$values = explode("," $raw);
foreach($values as $value) {
    echo $value;
}
于 2012-09-06T16:00:11.100 回答