0

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

它有一个 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?

谢谢

4

3 回答 3

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 引擎在任何数据传递给它之前理解您的查询。因此,如果恶意用户尝试良好的 ol' 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

于 2013-06-16T15:16:45.200 回答
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>)。

于 2013-06-16T13:35:10.550 回答
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>';

}
于 2013-06-16T13:34:53.053 回答