如何将PHP while循环放在HTML选项菜单中?

时间:2013-06-16 13:21:57

标签: php html

我已为我的网站下载了购物车,

它有一个PHP文件来填写篮子。篮子将在行中显示添加的项目,这是代码:

<?php

define('INCLUDE_CHECK',1);
require "XXXXX/XXXXX.php";

if(!$_POST['img']) die("There is no such product!");

$img=mysql_real_escape_string(end(explode('/',$_POST['img'])));
$row=mysql_fetch_assoc(mysql_query("SELECT * FROM XXXXXX WHERE img='".$img."'"));
$prsize=mysql_fetch_assoc(mysql_query("SELECT * FROM BBBBBB WHERE id='".$row['id']."'"));
echo '{status:1,id:'.$row['id'].',price:'.$row['price'].',txt:\'\
\
<table width="100%" id="table_'.$row['id'].'">\
<tr>\
<td width="60%">'.$row['name'].'</td>\
<td width="10%">$'.$row['price'].'</td>\
<td width="15%"><select name="'.$row['id'].'_cnt" id="'.$row['id'].'_cnt" onchange="change('.$row['id'].');">\
<option value="1">1</option>\
<option value="2">2</option>\
<option value="3">3</option></slect>\
\
</td>\



<td width="15%"><select name="'.$prsize['id'].'_cnt" id="'.$prsize['id'].'_cnt" onchange="change('.$prsize['id'].');">\

我需要把这个

    while($item = mysqli_fetch_array($result))
            {

这里为大小

制作动态选择菜单
<option value="'.$prsize['id'].'">'.$prsize['id'].'</option>\

结束时

    }



\
</td>\

<td width="15%"><a href="#" onclick="remove('.$row['id'].');return false;" class="remove">remove</a></td>\
   </tr>\
  </table>\'}';
  ?>

但我无法弄清楚如何在那里放PHP,我试图使用“”或“但没有运气。

在HTML代码中如何引用PHP?

由于

3 个答案:

答案 0 :(得分:1)

也许是这样的:

$options = "";
while($item = mysqli_fetch_array($result))
    $options .= "<option value=\"$item[id]\">$item[id]</option>\\\n";

然后只使用它

echo '{status:1,id:'.$row['id'].',price:'.$row['price'].',txt:\'\
\
<table width="100%" id="table_'.$row['id'].'">\
<tr>\
<td width="60%">'.$row['name'].'</td>\
<td width="10%">$'.$row['price'].'</td>\
<td width="15%"><select name="'.$row['id'].'_cnt" id="'.$row['id'].'_cnt" onchange="change('.$row['id'].');">\
'.$option.'</select>\
...

或者你可以简单地将你的echo分成两部分,然后把你的循环放在电话之间:

echo '{status:1,id:'.$row['id'].',price:'.$row['price'].',txt:\'\
\
<table width="100%" id="table_'.$row['id'].'">\
<tr>\
<td width="60%">'.$row['name'].'</td>\
<td width="10%">$'.$row['price'].'</td>\
<td width="15%"><select name="'.$row['id'].'_cnt" id="'.$row['id'].'_cnt" onchange="change('.$row['id'].');">\
';
while($item = mysqli_fetch_array($result))
    echo "<option value=\"$item[id]\">$item[id]</option>\\\n";
echo '</select>\
\
</td>\
...

顺便说一句,您的</select>缺少一个“e”(它显示为</slect>)。

答案 1 :(得分:1)

每当我看到PHP和HTML混合在一起时,我的眼睛都会流血。

我想在您的代码中强调6件事:

1)在我看来,你正试图用你的php构建某种JSON字符串,这是我的证据

echo '{status:1, id:'.$row['id'].'} //The rest of your code

我想让你知道命令json_encode,它将php数组转换为类似JSON的字符串,可以通过JavaScript读取(只需命名一个)并以任何你想要的方式进行操作。

这是你使用它的方式:

$myJSONobject = json_encode($myarray)

2)不推荐使用mysql_函数

我不知道每天要输入多少次,但他们不再使用它们了。即使您正在阅读过时的教程,也可能是由于2013年仍然使用 mysql _ * 功能的程序员编写的。

不推荐意味着这些功能可以在任何时间点消失,如果您的服务器更新为不再具有弃用功能的PHP版本,您的所有代码都将被破坏,您会想知道原因。

从现在开始,您必须使用mysqliPDO

4)您的SQL容易受到SQL注入攻击

$prsize=mysql_fetch_assoc(mysql_query("SELECT * FROM BBBBBB WHERE id='".$row['id']."'"));

我很确定你在整个程序中编写类似的语句,我也很确定在某些时候你接受用户的输入并进行类似的SQL查询。

如果恶意用户决定输入1 OR 1=1该用户将执行他不应执行的SQL语句,例如:

SELECT * FROM BBBBBB WHERE id = 1 OR 1=1

如果您使用mysql_*mysqli

而不使用PDO函数,则可能会被阻止

因为这些库带有预处理语句预准备语句会强制SQL引擎在将任何数据传递给它之前理解您的查询。因此,如果恶意用户尝试了好的'OR 1 = 1,那么无关紧要,因为SQL引擎会将其作为任何其他字符串处理,而不是作为命令处理。

5)你的代码是一个丑陋的混乱。

即使这个评论看起来不像是建设性的批评,但实际上,请继续阅读以找出原因。

您编写此程序的方式使其难以维护。你不应该像你一样把PHP和HTML混合在一起。

大多数情况下,您应该只回显或返回原始数据

如果你是标记代码,绝大多数时候,你做错了。

6)不再使用HTML中的onclick`,这是可怕的做法。请改用事件监听器

 <a href="#" id="test">Click me</a>

 <script type="text/javascript">
     var link = document.getElementById("test").
     link.addEventListener("click", function() {
          link.innerHTML = "Do not click me anymore please";
     });
  </script>

回到你的问题,如果你想混合使用PHP和HTML,就没有必要写出这个混乱,我将向你展示一种更清晰的输出方法:

$prsize=mysql_fetch_assoc(mysql_query("SELECT * FROM BBBBBB WHERE id='".$row['id']."'"));?>

 {
  status:1, 
  id:<?=$row['id']=?>,
  price:<?=$row['price']?>,
  txt:
      <table width="100%" id="table_<?=$row['id']?>">
      <tr>
          <td width="60%"><?=$row['name']?></td>
          <td width="10%">$<?=$row['price']?></td>
          <td width="15%">
             <select name="<?=$row['id']?>_cnt" id="<?=$row['id']?>_cnt" onchange="change(<?=$row['id']?>);">
                <option value="1">1</option>
                <option value="2">2</option>
                <option value="3">3</option>
             </select>
          </td>
          <td width="15%">
             <select name="<?=prsize['id']?>_cnt" id="<?=$prsize['id']?>_cnt" onchange="change(<?=$prsize['id']?>);">
             <?php while($item = mysqli_fetch_array($result)): ?>
                <option value="<?=$prsize['id']?>"><?=$prsize['id']?></option>
             <?php endwhile; ?>
          </td>
          <td width="15%">
             <a href="#" onclick="remove(<?=$row['id']?>);return false;" class="remove">remove</a>
           </td>
        </tr>
     </table>
  }

希望这会有所帮助,然后再次......如果您正在创建JSON ...请使用JSON_ENCODE

答案 2 :(得分:0)

$SQL = "SELECT * from xxx WHERE img = '".mysql_real_escape_string($img)."'";
$result = mysql_query( $SQL );
while( $item = mysql_fetch_array( $result ) ) {

echo '<option value="'.$item['id'].'">'.$item['id'].'</option>';

}