【问题标题】:php/mysql UPDATE where id = blahphp/mysql 更新其中 id = blah
【发布时间】:2013-04-14 19:25:56
【问题描述】:

我有一个站点,您可以在其中通过 php 向 mysql 服务器发送问候消息,以及一个管理员登录页面。在管理员登录页面中,它显示所有状态为待处理、已拒绝或已接受的消息,每个消息旁边的按钮拒绝和接受。 目前,每当我点击“接受”或“拒绝”时,所有消息都会在数据库中被拒绝或接受。我想让按钮使用参数调用脚本,该参数是它们接受/拒绝的消息的 id,但老实说,我不知道正确的语法。任何帮助将不胜感激。

$query = "SELECT name, location, message, status FROM messages ORDER by status ";
if ($query_run = mysql_query($query)) 
{
    while ($query_row = mysql_fetch_assoc($query_run)) 
    {
        $name = $query_row['name'];
        $location = $query_row['location'];
        $message = $query_row['message'];
        $status = $query_row['status'];    

        echo '<form method="POST" action="login.php">';
        echo 'From: '.$name.'<br>Location: '.$location.'<br>Status: '.$status.'<br>Message: '.$message.'<br><br>';
?>

<input type="submit" value="Approve" name="accept">
<input type="submit" value="Reject" name="reject"></form>

<?php

if (isset($_POST['accept'])) 
{
    echo 'Accepted!';
    $updateAccept = "UPDATE messages SET status = 'a'"; 
    mysql_query($updateAccept);   
};

if (isset($_POST['reject'])) 
{
    echo 'Rejected!';
    $updateAccept = "UPDATE messages SET status = 'r'"; 
    mysql_query($updateAccept);
}

【问题讨论】:

  • UPDATE ... WHERE 你需要一个WHERE 子句。
  • 添加一个带有记录 id 的隐藏字段,使用 $_POST 读取它并将其应用于您的 sql-query。
  • 请考虑切换到 mysqli 或 PDO,而不是弃用的 mysql_* 函数。
  • 那么问题出在哪里?只需添加一个WHERE 子句就可以了?

标签: php html mysql


【解决方案1】:

像这样为每个提交按钮绑定一个隐藏字段

<form method="POST">
    <input type="submit" value="Whatever" name="trigger_update" />
    <input type="hidden" name="id_to_be_updated" value="<?php echo 'pass your id here'; ?>" />
</form>

<?php
   if(isset($_POST['trigger_update'])) {
      //Do sanitization according to your needs
      mysqli_query($connection, "UPDATE tbl_name SET column_name = 'whatever' WHERE id = {$_POST['id_to_be_updated']}");
   }
?>

【讨论】:

  • 虽然是...同时,不是。键入转换 ID 或其他东西,不要将原始 post 数据放入 SQL 语句中。
  • @Jon 这就是为什么我提到要根据他的需要进行消毒:)
  • 哈哈,没错,但你在更新中显示了$_POST,我只是认为你应该显示重新分配,然后显示“根据您的需要进行清理”类型的东西。 =]
  • 你好,外星人先生。你发布帮助,这基本上是我想做的:有 WHERE = $_POST 批准/拒绝按钮。但是,我对 php 还很陌生,我不太清楚你所说的“在这里传递你的 id”和“根据你的需要进行清理”是什么意思。 Jon 是说你不应该在 SQL 语句中发布原始的帖子数据,还是你完全不能?在此先感谢,到目前为止帮助很大
  • @user2280332 Pass Your ID HERE 表示当您循环记录时,在该隐藏字段中回显 id 值并清理数据意味着尽管在这种情况下数据将由您预定义,但很可能任何错误的值都会附有报价或其他您需要清理的内容,因此我已经提到在发布/更改数据库中的数据之前始终清理数据......同样mysql_()已被弃用,开始使用mysqli_()或PDO :)
【解决方案2】:

您只需要在您的 UPDATE 语句中添加一个 WHERE 子句:

 $updateAccept = "UPDATE messages SET status = 'a' WHERE id = '$id'"; 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-03
    • 1970-01-01
    • 2014-03-08
    • 2013-05-26
    • 2023-03-29
    • 1970-01-01
    相关资源
    最近更新 更多