在EOT中插入PHP代码

时间:2015-07-21 12:09:50

标签: php html mysql

有两个表,产品和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产品?

有人可以帮助我吗?

2 个答案:

答案 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;语句所在的行中没有任何其他字符(包括空白字符)。
  • 您的字符串中没有任何PHP表达式。只允许变量,必须的格式为{$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;
}
?>