有两个表,产品和productcolor。每种产品都可以有多种颜色。我想在下拉列表中获取产品的颜色。但是不能用以下代码来做到这一点。
<?php
$results = $mysqli->query("SELECT product_code, product_name, product_desc, product_img_name, price FROM products ORDER BY id ASC");
if($results){
$products_item = '<ul class="products">';
//fetch results set as object and output HTML
while($obj = $results->fetch_object())
{
$id = $obj->id;
$results1 = $mysqli->query("SELECT colornmae FROM productcolor where id=$id");
if($results1){
while($obj1 = $results1->fetch_object())
{
$color[] = $obj1->colorname;
}
}
$products_item .= <<<EOT
<li class="product">
<form method="post" action="cart_update.php">
<div class="product-content"><h3>{$obj->product_name}</h3>
<div class="product-thumb"><img src="images/{$obj->product_img_name}"></div>
<div class="product-desc">{$obj->product_desc}</div>
<div class="product-info">
Price {$currency}{$obj->price}
<fieldset>
<label>
<span>Color</span>
<select name="product_color">
foreach ($color as $value) {
<option value="{$value}">{$value}</option>
}
</select>
</label>
<label>
<span>Quantity</span>
<input type="text" size="2" maxlength="2" name="product_qty" value="1" />
</label>
</fieldset>
<input type="hidden" name="product_code" value="{$obj->product_code}" />
<input type="hidden" name="type" value="add" />
<input type="hidden" name="return_url" value="{$current_url}" />
<div align="center"><button type="submit" class="add_to_cart">Add</button></div>
</div></div>
</form>
</li>
EOT;
}
$products_item .= '</ul>';
echo $products_item;
}
?>
我已经找到了解决方案。然后我才知道php代码不能用EOT
编写。 php变量可以在EOT中显示。但在这里我想循环到数据库中的颜色值。我尝试了各种组合,但没有任何效果。以上是我尝试做的事情之一。
如何从colorname
之间的数据库中获取作为对象的下拉列表中的EOT
产品?
有人可以帮助我吗?
答案 0 :(得分:3)
当您使用HEREDOC时(它不需要&#39; EOT&#39;它也可以是&#39; MYKEYWORD&#39;) HEREDOC的结束点,关闭HEREDOC ,必须是第一行,前面没有空格,后跟分号,后面没有其他内容,否则失败。这就是为什么您的代码无法正常工作的原因。
$heredoc = <<<KEYWORD
{$variable} - this will print value of $variable
$variable - this will print $variable, not $variable value
KEYWORD;
编辑:
我注意到你在HEREDOC之间的某个地方有foreach循环(粘贴,就像那样?)。
它不会那样工作。
为html select&gt;编写新方法选项 - &gt;在代码块之外的值,而不是调用它,将它分配给对象属性或变量,而不是在HEREDOC中使用它..连接,无论如何。
// New small method
public function smallLoop($color) {
$x=null;
foreach($color as $value)
$x.='<option value="'.$value.'">'.$value.'</option>';
return $x;
}
// Inside loop
<select name="product_color">
{$obj->smallLoop($color)}
</select>
注意强>:
你的html语义也是 - 糟糕。您可能不希望用<select> <option>
包装<label>
标签,您是否确定每个购物车条目都需要<form>
标签?!?不,不,你没有。
你只需要一个表格标签,我可以打赌..
我对你的建议是让你自己喝杯咖啡,抓住你的手指,然后重新写下整段代码。做得好。你能行的。
答案 1 :(得分:0)
请确保:
EOT;
语句所在的行中没有任何其他字符(包括空白字符)。{$variable}
。为了使您的代码更具可读性,您还应该修复缩进!
此代码应该有效:
<?php
$results = $mysqli->query("SELECT product_code, product_name, product_desc, product_img_name, price FROM products ORDER BY id ASC");
if($results){
$products_item = '<ul class="products">';
//fetch results set as object and output HTML
while($obj = $results->fetch_object()) {
$id = $obj->id;
$results1 = $mysqli->query("SELECT colorname FROM productcolor where id=$id");
$color = array();
if($results1){
while($colorvalue = $results1->fetch_object()) {
$color[] = $colorvalue->colorname;
}
}
$products_item .= <<<EOT
<li class="product">
<form method="post" action="cart_update.php">
<div class="product-content">
<h3>{$obj->product_name}</h3>
<div class="product-thumb">
<img src="images/{$obj->product_img_name}">
</div>
<div class="product-desc">
{$obj->product_desc}
</div>
<div class="product-info">
Price {$currency}{$obj->price}
<fieldset>
<label>
<span>Color</span>
<select name="product_color">
EOT;
foreach ($color as $value) {
$products_item .= <<<EOT
<option value="{$value}">{$value}</option>
EOT;
}
$products_item .= <<<EOT
</select>
</label>
<label>
<span>Quantity</span>
<input type="text" size="2" maxlength="2" name="product_qty" value="1" />
</label>
</fieldset>
<input type="hidden" name="product_code" value="{$obj->product_code}" />
<input type="hidden" name="type" value="add" />
<input type="hidden" name="return_url" value="{$current_url}" />
<div align="center">
<button type="submit" class="add_to_cart">Add</button>
</div>
</div>
</div>
</form>
</li>
EOT;
}
$products_item .= '</ul>';
echo $products_item;
}
?>
作为将字符串拆分为位的替代方法,您可以将表达式放在单独的函数/方法中,并将其输出包含为变量。
此代码也应该有效:
<?php
function print_colors($color) {
$returnstring = "";
foreach ($color as $value) {
$returnstring .= "<option value=\"{$value}\">{$value}</option>";
}
return $returnstring;
}
$results = $mysqli->query("SELECT product_code, product_name, product_desc, product_img_name, price FROM products ORDER BY id ASC");
if($results){
$products_item = '<ul class="products">';
//fetch results set as object and output HTML
while($obj = $results->fetch_object()) {
$id = $obj->id;
$results1 = $mysqli->query("SELECT colorname FROM productcolor where id=$id");
$color = array();
if($results1){
while($colorvalue = $results1->fetch_object()) {
$color[] = $colorvalue->colorname;
}
}
$products_item .= <<<EOT
<li class="product">
<form method="post" action="cart_update.php">
<div class="product-content">
<h3>{$obj->product_name}</h3>
<div class="product-thumb">
<img src="images/{$obj->product_img_name}">
</div>
<div class="product-desc">
{$obj->product_desc}
</div>
<div class="product-info">
Price {$currency}{$obj->price}
<fieldset>
<label>
<span>Color</span>
<select name="product_color">
{print_colors($color)}
</select>
</label>
<label>
<span>Quantity</span>
<input type="text" size="2" maxlength="2" name="product_qty" value="1" />
</label>
</fieldset>
<input type="hidden" name="product_code" value="{$obj->product_code}" />
<input type="hidden" name="type" value="add" />
<input type="hidden" name="return_url" value="{$current_url}" />
<div align="center">
<button type="submit" class="add_to_cart">Add</button>
</div>
</div>
</div>
</form>
</li>
EOT;
}
$products_item .= '</ul>';
echo $products_item;
}
?>