将GET变量转换为要在SQL查询中使用的PHP字符串

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (59)

对于一个基本项目,我试图模拟一个带有MySQL数据库后端的自动售货机。我遇到的问题如下:当用户按下按钮以获取他们想要购买的东西时,应显示该项目的价格。但是,当我尝试使用基于按下的按钮的变量从数据库查询价格时,它不会显示价格。但是,当我将项目的名称插入查询时,它确实有效。

我用这个生成了一个表。

echo "<tr><td>" . $snackName . "</td><td>" . $price . "
      <a href = 'buying.php?varname= " . $snackName . "'><button>Buy</button></a>
      </td></tr>";

然后在购买页面上,我试图这样做。

$snackChoice = $_GET['varname'];
$sql = ("SELECT `price` FROM `snacks` WHERE `snackName` = '$snackChoice'");

但是,显示此内容时,页面上不显示任何内容。但是,当我替换“火星酒吧”之类的东西时,它的价格就会显示出来。我该怎么做才能根据用户按下的按钮显示价格?

提问于
用户回答回答于

我建议你使用id而不是snakName来执行查询。

如果你有,如果没有将它作为AUTO_INCREMENT添加到表中。这将更容易管理,清理和查询数据库。

$snackId = $_GET['snackId'];

// perform validation, mitigate SQL injection

if(!is_numeric($snackId)){
    // redirect the user
    header('redirect:index.php');
    exit();

    // or change the value to 0...
    $snakId = 0;
}

$sql = ("SELECT `price` FROM `snacks` WHERE `snackid` = '$snackId'");

并在表单中使用id替换名称。

print "<tr>
          <td>" . $snackName . "</td>
          <td>" . $price . "
             <a href = 'buying.php?snackId= " . $snackId . "'><button>Buy</button></a>
          </td>
       </tr>";
用户回答回答于

从'$ snackChoice'周围放下单撇号只需:

"SELECT `price` FROM `snacks` WHERE `snackName` = $snackChoice"

要么

"SELECT `price` FROM `snacks` WHERE `snackName` = '" . $snackChoice . "'"

扫码关注云+社区

领取腾讯云代金券