【发布时间】:2013-05-22 19:36:46
【问题描述】:
我是 php 和 mysql 的新手,所以我可能遗漏了一些明显的东西,但这里是:
我正在建立一个数据库来存储有库存的物品。每个项目都分配有一定数量的库存(例如 5 个)。每个项目都显示在我的网页上,旁边有按钮可以手动从数据库中添加或删除库存:
$query = "SELECT * FROM classes";
// This uses a mysql function that act upon our $query variable above
$result = mysql_query($query);
// This is a loop that says "while there is data to display...keep looping round and displaying that data".
while($class_data = mysql_fetch_array($result)) {
// Now we are going to echo that data
echo
"<div class=\"classmanagertablecontent\">" . $class_data['name'] . "</div>
<div class=\"classmanagertablecontent\">" . $date['date'] . "</div>
<div class=\"classmanagertablecontent\">" . $class_data['stock'] . "</div>
<div class=\"classmanagertablecontent\">" . $class_data['button_paypal'] . "</div>";
<form action="../url.php" method="post">
<input type="hidden" name="button_paypal_fromform" value="<?php echo $class_data['button_paypal'] ?>">
<input type="submit" value="remove stock" name="remove stock">
</form>
<form action="../url.php" method="post">
<input type="hidden" name="button_paypal_fromform" value="<?php echo $class_data['button_paypal'] ?>">
<input type="submit" value="add to stock" name="add to stock" >
</form>
</div>
}
“添加到库存”按钮发布到的网址中的代码如下:
<?php
$button_paypal = $_POST['button_paypal_fromform'];
mysql_query("UPDATE classes SET stock = stock+1 WHERE button_paypal = ". $button_paypal ."");
?>
无论出于何种原因 WHERE button_paypal = "a number" 它都可以工作... ...但是如果 button_paypal = "a string" 它什么也不做。
我无法理解这一点。我将使用的贝宝托管按钮由字母和数字组成,因此需要结合使用两者。
我试过了……
echo "$button_paypal";
...在我的 url.php 页面上,按钮读取正常(例如 SD76S9SFGV)
在我的数据库中,“button_paypal”是一个 TEXT 字段,但我也尝试过 VARCHAR。 STOCK 是一个 INT。
如果有人可以提供帮助,我将非常感激。谢谢。 #hopethismakesense
【问题讨论】:
-
简短的回答是,您需要将用作 SQL 语句中的值的字符串用引号括起来。更长的答案是您应该使用 PDO 或 mysqli,并使用准备好的语句和绑定语句将变量添加到查询中,因为它更安全并且完全避免了此类问题。
-
感谢您的回答。你能给我一个用引号括起来的例子吗?
-
好的,你的意思是像这样的单引号 - '". $button_paypal ."' 非常感谢。我已经在这里坐了一个多小时试图解决这个问题!干杯。
-
类似于 UPDATE table SET field=1 WHERE value='something' 的东西。任何字符串值都应该用单引号括起来,并且您还应该将表名和列名用反引号括起来(我还没有这样做,因为反引号将此处的文本转换为
code。 -
正如我所说 - 查看 PDO 或 mysqli,否则您的网站很容易被利用。