我如何正确地重定向URL使用php头函数

cczfrluj  于 2023-06-20  发布在  PHP
关注(0)|答案(1)|浏览(116)

我试图重定向URL到父文件后,删除命令已exicuted从一个子文件,并显示sweetalert2成功消息的父文件。它在我的本地机器上工作得很好,但在在线服务器上不工作。拜托,我需要你的帮助。
这会转到我的子文件(actions.php

<a href="actions.php?delid=<?php echo ($row->employee_id); ?>"class="del_btn" title="click to block">
      <i class="fas fa-ban"></i>
  </a>

然后我得到了Idactions.php

if (isset($_GET['delid'])) {
    $rid = intval($_GET['delid']);
    $sql = "update employees set status='0' where employee_id='$rid'";
    $query = $dbh->prepare($sql);
    $query->bindParam(':rid', $rid, PDO::PARAM_STR);
    $query->execute();
    header('location: employees.php?delid=1');
  }
jv4diomz

jv4diomz1#

你的prepared statement有根本性的缺陷,容易被sql注入。您需要在sql中使用?样式的占位符或命名占位符,例如:rid-您不能混合使用这两种类型并希望它能工作。您还将提供的变量转换为int,因此对于int数据类型使用PDO常量而不是字符串可能是有意义的。

if( isset( $_GET['delid'] ) ) {

    $rid = intval($_GET['delid']);
    $sql = 'update `employees` set `status`='0' where employee_id=:rid';
    
    $stmt = $dbh->prepare( $sql );
    $stmt->bindParam( ':rid', $rid, PDO::PARAM_STR );
    $stmt->execute();
    
    exit( header('Location: employees.php?delid=1') );
}

使用问号占位符语法,您可以执行以下操作:

if( isset( $_GET['delid'] ) ) {

    $rid = intval($_GET['delid']);
    $sql = 'update `employees` set `status`='0' where employee_id=?';
    
    $stmt = $dbh->prepare( $sql );
    $stmt->bindParam( 1, $rid, PDO::PARAM_STR ); #  note here the use of 1 to indicate the first placeholder
    $stmt->execute();
    
    exit( header('Location: employees.php?delid=1') );
}

相关问题