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

Posted

技术标签:

【中文标题】使用提交按钮更新数据库数据【英文标题】:Update database data with submit button 【发布时间】:2015-06-27 21:55:32 【问题描述】:

我想用新数据更新数据库,这样当您将文本放入文本框中,然后单击提交按钮时,数据将被发送到具有特定 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>

【问题讨论】:

这个action="&lt;?php updater($_POST['name'],1); ?&gt;" 绝对有问题。另外,您的值是一个字符串;在你的 SET 中这样对待它。 你不调用action属性里面的函数,你把表单要处理的url放在那里 我知道....你能告诉我真正的方法吗? @Ghost 愿意为您效劳吗? ;-) 我得跑了。 我的英文不太好...你什么意思?请写信告诉我如何完成这项工作...... tnx 很多! 【参考方案1】:

您需要将 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 注入开放,另一种进行更安全查询的方法是准备它们:

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;
   

【讨论】:

请注意,这是非常不安全的。但这就是根据问题您将如何做到的。最终,您可能想要查看 Prepared statements。 我想我会加我的 2 美分;现在我真的要飞了;不运行大声笑 看起来我的 2 美分已经消失了,哈哈,成为 SET name='$value' 我感觉你会想出一个准备好的报表版本,但不确定你是否和我的同时进行更新。需要报价SET name='$value' @Fred-ii- 一如既往,我只是需要一些时间来修改整个部分【参考方案2】:

像这样:

<?php
function updater($value,$id)
    // Create connection
    $conn = new mysqli( 'localhost' , 'user_name' , 'pass' ,'data_base_name' );
    $value =mysqli_real_escape_string($conn,$value);
    $id =mysqli_real_escape_string($conn,$id);
    // 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();
   

if(isset($_POST['name']))
    updater($_POST['name'],$_POST['id'])

?>

<!DOCTYPE html>
<html>
<header>
</header>
<body>
<form action="" method="post" style="height:50px;width:50px;">
    <input type="hidden" name="id" value="1" />           
    <input type="text" name="name" /><br><br>
    <input type="submit" /><br/>
</form>
</body>
</html>

【讨论】:

以上是关于使用提交按钮更新数据库数据的主要内容,如果未能解决你的问题,请参考以下文章

Django 视图和表单提交按钮更新数据库

使用下拉列表更新表值而不使用提交按钮

使用 While 循环内的多个输入元素和 While 循环外的单个提交按钮更新 MySQL 数据库

第一个表单提交插入行后续提交更新同一行

使用表单提交更新数据库中选定的下拉值

使用ajax更新Mysql数据库表