php - 使用提交按钮更新数据库数据

标签 php html mysql mysqli

我想用新数据更新数据库,这样当您将文本放入文本框中然后单击提交按钮时,数据将被发送到数据库,并带有特定的 ID。我只想发送亮度,代码如下。当我写这样的东西并运行它时,我收到一个 403 错误:禁止访问。我该如何解决这个问题?

<?php
   function updater($value,$id){
// Create connection
   $conn = new mysqli( 'localhost' , 'user_name' , '' , 'data_base_name' );
// Check connection
   if ($conn->connect_error) {
       die("Connection failed: " . $conn->connect_error);
   }
   $sql = "UPDATE table_name SET name=$value WHERE id=$id";
   if ($conn->query($sql) === TRUE) {
       echo "Record updated successfully";
   } else {
       echo "Error updating record: " . $conn->error;
   }
//$conn->close();
}
?>

<!DOCTYPE html>
<html>
<header>
</header>
<body>
    <form action="<?php updater($_POST['name'],1); ?>" method="post" style="height:50px;width:50px;">
        <input type="text" name="name" /><br><br>
        <input type="submit" /><br/>
    </form>
</body>
</html>

最佳答案

您需要将 URL 放在执行表单处理的 action 属性中,而不是函数中:

action="<?php updater($_POST['name'],1); ?>"  // not this
action="<?php echo $_SERVER['PHP_SELF']; ?>" // path to this page

如果这是在同一页面上,您可以省略它或使用 $_SERVER['PHP_SELF'],然后捕获表单提交。在该过程中,然后调用您的自定义函数。

if($_SERVER['REQUEST_METHOD'] === 'POST') {
    $value = $_POST['name'];
    $id = 1;

    updater($value, $id);
}

一个简单的解决方法就是引用其中的字符串:

$sql = "UPDATE table_name SET name='$value' WHERE id=$id";

但这对 SQL 注入(inject)是开放的,另一种进行更安全查询的方法是准备它们:

function updater($value,$id) {
    // Create connection
   $conn = new mysqli( 'localhost' , 'user_name' , '' , 'data_base_name' );
    // Check connection
   if ($conn->connect_error) {
       die("Connection failed: " . $conn->connect_error);
   }
   $sql = "UPDATE table_name SET name = ? WHERE id= ?";
   $update = $conn->prepare($sql);
   $update->bind_param('si', $value, $id);
   $update->execute();
   if ($update->affected_rows > 0) {
       echo "Record updated successfully";
   } else {
       echo "Error updating record: " . $conn->error;
   }
}

关于php - 使用提交按钮更新数据库数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29760338/

相关文章:

php - 表未使用 Ajax 和 Mysql 更新

php - 两张表合并成一张表

javascript - 如何在 Bootstrap 中使用 img-circle 图像在悬停时添加标题

mysql - Node sql语法错误

mysql - 使用 MySQL,查找每个时间段的平均值(数据)的最有效方法是什么

sql - Mysql:如何获取点后小数位数超过一定数量的每一行

php - 使用 PHP 或 MySQL 将 AM/PM 时间转换为 24 小时格式?

javascript - 将 jquery 调用发送到外部 url

html - 更改垫进度条 "aria-valuemax"

html - 错误 : Reference. 推送失败:第一个参数在属性中包含一个函数 - firebase