【问题标题】:php : POST & INSERT to SQL database, the 'id' from URLphp : POST & INSERT 到 SQL 数据库,来自 URL 的 'id'
【发布时间】:2021-06-29 11:27:06
【问题描述】:

我有一个网址:http://webaddress.php?id=100

我正在尝试将 'id' 值 100 插入我的 SQL 表的列中。

我尝试了以下方法:

$productid = $conn->real_escape_string($_POST['id']); 

$insertsql = "INSERT INTO TableName(table column)
        VALUES('$productid')";

谁能建议正确的方法?谢谢

【问题讨论】:

  • 它不是 POST,它是 GET
  • 这是$_GET 参数,所以读取为$_GET['id'] 或更改您的表单以发送$_POST 数据
  • prevent sql injections 使用 PDO 或准备好的语句。我认为您需要向我们展示更多代码,您在哪里声明您的变量$rating
  • 警告!!! 您的代码对SQL injection 开放,请使用prepared statements 最好与PDOmysqli 一起使用。

标签: php sql phpmyadmin


【解决方案1】:

我的评论有点长,所以我将其发布为答案。

就像其他人说的那样。如果您将带有 url 的值发送到脚本,那么您需要使用 $_GET 而不是 $_POST 来获取它。要确保 id 确实是一个数字,您可以使用 (int),如 $productid = (int)$_GET['id']; (int) 会将您的变量转换为数字,如果它不是数字,它将返回 0 因此,如果 $productID 大于 0,您还可以在查询之前进行检查,以防止在您的数据库中分配 og 零

也可以使用像 $productID = isset($_GET['id']) ? (int)$_GET['id'] : 0 这样的 isset 函数,所以如果有人在没有参数 id 的情况下访问您的 url,他不会收到未定义的错误。

如有疑问,请使用准备好的语句或 PDO 至prevent sql injection

编辑: 在 w3schools 上,我发现了一些关于 prepared statements and PDO 的很好的解释和示例,尝试将这些示例应用到您自己的项目中

第二次编辑: 我正在阅读我发布的链接的准备好的陈述的例子,在我看来他们犯了一个小错误。 在$stmt->execute() 之后,他们假设数据已正确插入。但是为了确保数据真的被插入,你应该把那部分改成:

// Check if there is really inserted some rows into the database or not
if ($stmt->affected_rows > 0) {
  echo "New records created successfully";
}

【讨论】:

  • 我会说需要用 $_GET 或 $_POST 来获取它。一般来说,根据许多 CRUD 规则,出于安全原因,发送表单应与 method="post" 一起使用(尤其是在处理敏感数据和/或希望最小化好奇用户操作数据的风险时。假设这是评级系统很容易拨打电话,即domain.tld/rate.php?points=10000000 insted 只是100
  • @biesior 我同意你的看法。表单数据几乎总是需要发布,以防止数据被记录到服务器日志文件中
  • 防止数据被记录到服务器日志文件中”我的意思是写敏感数据。
猜你喜欢
  • 2014-10-18
  • 2021-10-16
  • 1970-01-01
  • 2018-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多