循环访问数据库查询结果以生成表单

时间:2018-03-12 14:38:24

标签: php html-form

我正在尝试使用php在我的页面上设置一个表单,并循环遍历数据库查询结果以生成它。

为了便于理解,这适用于在不同国家以不同价格销售具有不同属性的产品的电子商务网站。例如,我们可以使用像T恤这样的产品。这最多可以包含15个不同的属性(在本例中为颜色)。不同的颜色有不同的价格,我们需要调整价格取决于我们销售的国家(取决于运输成本等)。对于这个例子,说我们只卖出两个国家(尽管这可能会增加)。

所以我正在寻找的是:

<table>
<tr><td>Colour 1</td><td>Price country 1</td><td>Price country 2</td></tr>
<tr><td>Colour 2</td><td>Price country 1</td><td>Price country 2</td></tr>
<tr><td>Colour 3</td><td>Price country 1</td><td>Price country 2</td></tr>
</table>

我的php如下:

$attributeResult = DB::run("SELECT * FROM attributes WHERE id='$new_product_attribute_id'");
    $countryResult = DB::run("SELECT * FROM countries");
    foreach ($attributeResult as $value) {
        for ($i = 1; $i <= 15; $i++) {
            $attributeColumn = "attribute".$i;
            $checkbox = "checkbox".$i;
            $priceValue = "priceValue".$i;
            $priceCurrency = "priceCurrency".$i;
            $priceAttribute = "priceAttribute".$i;
            if($value[''.$attributeColumn.''] != ""){
                $price_form .= '<tr><td><input type="checkbox" name='.$checkbox.' id='.$checkbox.' value='.$checkbox.'>'.$value[''.$attributeColumn.''].'</td>'; 
                foreach ($countryResult as $countryVal) {
                    $price_form .= '<td>';
                    $price_form .= '<input type="text" placeholder='.$countryVal['currency'].' name='.$priceValue.'_'.$countryVal['id'].' size="10">';
                    $price_form .= '<input type="hidden" value='.$countryVal['id'].' name='.$priceCurrency.'_'.$countryVal['id'].'>';
                    $price_form .= '<input type="hidden" value='.$i.' name='.$priceAttribute.'_'.$countryVal['id'].'>';
                    $price_form .= '</td>';
                }
                $price_form .= '</tr>';
            }
        }
    }

这是屏幕上输出的内容:

<tbody>
<tr>
<td><input type="checkbox" name="checkbox1" id="checkbox1" value="checkbox1">Black</td>
<td>
<input type="text" placeholder="€" name="priceValue1_1" size="10">
<input type="hidden" value="1" name="priceCurrency1_1">
<input type="hidden" value="1" name="priceAttribute1_1">
</td>
<td>
<input type="text" placeholder="£" name="priceValue1_2" size="10">
<input type="hidden" value="2" name="priceCurrency1_2">
<input type="hidden" value="1" name="priceAttribute1_2">
</td>
</tr>
<tr>
<td><input type="checkbox" name="checkbox2" id="checkbox2" value="checkbox2">White</td>
</tr>
<tr>
<td><input type="checkbox" name="checkbox3" id="checkbox3" value="checkbox3">Purple</td>
</tr>
<tr>
<td><input type="checkbox" name="checkbox4" id="checkbox4" value="checkbox4">Yellow</td>
</tr>
<tr>
<td><input type="checkbox" name="checkbox5" id="checkbox5" value="checkbox5">Red</td>
</tr>
<tr>
<td><input type="checkbox" name="checkbox6" id="checkbox6" value="checkbox6">Orange</td>
</tr>
<tr>
<td><input type="checkbox" name="checkbox7" id="checkbox7" value="checkbox7">Blue</td>
</tr>
<tr>
<td><input type="checkbox" name="checkbox8" id="checkbox8" value="checkbox8">Green</td>
</tr>
<tr>
<td><input type="checkbox" name="checkbox9" id="checkbox9" value="checkbox9">Pink</td>
</tr>
<tr>
<td><input type="checkbox" name="checkbox10" id="checkbox10" value="checkbox10">Grey</td>
</tr>
<tr>
<td><input type="checkbox" name="checkbox11" id="checkbox11" value="checkbox11">Brown</td>
</tr>
<tr>
<td><input type="checkbox" name="checkbox12" id="checkbox12" value="checkbox12">Spearmint</td>
</tr>
<tr>
<td><input type="checkbox" name="checkbox13" id="checkbox13" value="checkbox13">Lime Green</td>
</tr>
</tbody>

正如你所看到的,第一次正确地进入第二次正确进入第二次但不是再次。

我一直在玩这个已经有一段时间了,无法弄清楚为什么会这样。 (但它是星期一,我有点脑力去试图解决它)有什么我想念的吗?对此的任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我将我的php更改为以下内容,我得到了我正在寻找的结果:

    $attributeResult = DB::run("SELECT * FROM attributes WHERE id='$new_product_attribute_id'");
    foreach ($attributeResult as $value) {
        for ($i = 1; $i <= 15; $i++) {
            $attributeColumn = "attribute".$i;
            $checkbox = "checkbox".$i;
            $priceValue = "priceValue".$i;
            $priceCurrency = "priceCurrency".$i;
            $priceAttribute = "priceAttribute".$i;
            if($value[$attributeColumn] != ""){
                $price_form .= "<tr><td><input type='checkbox' name='$checkbox' id='$checkbox' value='$checkbox'>$value[$attributeColumn]</td>";
                $countryResult = DB::run("SELECT * FROM countries");
                while ($row = $countryResult->fetch(PDO::FETCH_ASSOC)){
                    $country_id = $row["id"];
                    $country_currency = $row["currency"];
                    $price_form .= '<td>';
                    $price_form .= '<input type="text" placeholder='.$country_currency.' name='.$priceValue.'_'.$country_id.' size="10">';
                    $price_form .= '<input type="hidden" value='.$country_id.' name='.$priceCurrency.'_'.$country_id.'>';
                    $price_form .= '<input type="hidden" value='.$i.' name='.$priceAttribute.'_'.$country_id.'>';
                    $price_form .= '</td>';
                }
            }
            $price_form .= '</tr>';
        }
    }