我想将交易 table 和 post 中的记录更新为已批准 table,同时将交易批准的状态从 0 更新为 1

I want to update a record from Transactions table and post it to Approved table whilst updating the status of the Transaction approval from 0 to 1

pending_approvals.php

<table id="example" class="display" style="width:100%">
    <thead>
      <tr>
        <th>Transaction ID</th>
        <th>Agent Email</th>
        <th>Sender</th>
        <th>Receiver</th>
        <th>Amount</th>
        <th>Actions</th>
      </tr>
    </thead>
    <tbody>
      <?php
          $trans = "SELECT * FROM transactions";
          $get_trans = mysqli_query($db, $trans);
          while($row = mysqli_fetch_array($get_trans)){?>
          <tr>
             <td><?php echo $row['transaction_id']; ?></td>
             <td><?php echo $row['agent_email'] ;?></td>
             <td><?php echo $row['sender']; ?></td>
             <td><?php echo $row['receiver']; ?></td>
             <td><?php echo $row['amount']; ?></td>
             <td>
               <a class="btn btn-success ti-eye" href="view_transaction.php?transaction_id=<?php echo $row['transaction_id']; ?>"></a>
               <a class="btn btn-info" href="approve.php?transaction_id=<?php echo $row['transaction_id']; ?>"
               onclick="return confirm('Are you sure you would like to confirm this transaction ?');"> Approve</a>
             </td>
          </tr>
      <?php } ?>
   </tbody>
</table>

approve.php

<?php 
include('config.php');
include_once('_header.php');

    $transaction_id = $_GET['transaction_id'];
    $approve = "INSERT INTO approvals SELECT * FROM transactions WHERE transaction_id = '$transaction_id'";
    $run = mysqli_query($db, $approve);
    if($approve){
        $approved = "UPDATE approvals SET approved = TRUE WHERE transaction_id = '$transaction_id'";
        $run = mysqli_query($db, $approve);
    }
?>

<?php include_once('_footer.php'); ?>

交易和批准 table 类似,我的查询只是插入交易 table 中的数据,但没有将批准的列从 0 更新为 1批准 table

首先,正如 Magnus Eriksson 所提到的,您正在检查 $approve 是否本质上不是 false 或 null,因此,它将始终作为 true 通过,因为您将 $approve 设置为 SQL 查询(作为一个字符串)。我认为您的意思是检查是否如 Magnus 所述($运行)。其次,您的 INSERT INTO sql 语句语法不正确。语法应该是这样的:

INSERT INTO table ({column_name}, {another_column_name}) VALUES ({value}, {value});

您不需要在插入中使用 WHERE 子句,因为插入实际上会将记录附加到您的 table(并且不会检查条件是否为真利用它)并且 SELECT 语句无法以您尝试的方式嵌入到您的 INSERT 语句中(我不太确定您为什么要在那里尝试 SELECT 数据,所以我要假设您只是试图插入 transaction_id,因此,给您一个有效的 INSERT sql 语句来插入该数据——我稍后将在此处演示)。第三,您的 UPDATE 语句使用了一个 TRUE 值:请仔细检查该列的数据类型是否创建为布尔值,否则它不起作用(还要确保布尔数据类型甚至是可能的,因为我不相信 SQL 服务器或 MySQL 具有该数据类型——它们使用 BIT 或 TINYBIT,但我可能会弄错)。第四,我想指出您的代码的一个更大问题:它容易 SQL 注入。如果你在 mysqli_query() 上访问官方 PHP documentation,你会注意到一条红色的大警告消息,说明如果你正在插入参数(例如你的$transaction_id).怀有恶意的人可能会为您的 'transaction_id' GET 参数发送恶意值并成功 SQL 注入内容。要解决此问题,我建议数据绑定您的参数,如下所示:

    // Make a connection to the DB:
    $conn = new mysqli($db_server_name, $db_username, $db_pswd, $db_name);

    // Check if connection was successful:    
    if ($conn->connect_error){
         die("Connection failed");
    }

    $sql = "INSERT INTO approvals SELECT * FROM transactions WHERE transaction_id = ?;";
    $stmt = $conn->prepare($sql);
    $stmt->bind_param('s', $transaction_id);
    $stmt->execute();

    // See if it inserted successfully:
    if ($stmt->affected_rows > 0){
        // Success!
    } else {
        // Failed... ):
    }
    
    // Close connections:
    $stmt->close();
    $conn->close();

将您的参数与 bind_param() 绑定可确保它们被视为字符串,因此永远不会被视为 SQL(因此我也建议您也绑定您的更新语句)。