首页 > 解决方案 > 有没有办法使用未设置的会话

问题描述

如果单击删除按钮,我在浏览器上看不到任何成功消息。我再次注意到我注释掉了未设置的功能

unset($_SESSION['message']);

unset($_SESSION['msg_type']);

该消息将显示在浏览器上,但问题是即使我刷新页面,该消息仍会显示,请问现在可能是什么问题。

My codes:  
if(isset($_GET['delete'])){
    $id = $_GET['delete'];
    $db->query("DELETE FROM music WHERE id=$id") or die($db->error());

    $_SESSION['message'] = "Rocord has been deleted!";
    $_SESSION['msg_type'] = "danger";

    header("location: music.php");
}

//display message 
 <?php 
   session_start();        
    if(isset($_SESSION['message'])):?>

    <div class="alert alert-<?=$_SESSION['msg_type']?>">

    <?php 
        echo $_SESSION['message'];
 
        unset($_SESSION['message']);
        unset($_SESSION['msg_type']);
        
  
    ?> </div>
    <?php endif ?>

标签: phpsession

解决方案


你开始会议了吗?session_start();如果您还没有添加,请在文件顶部添加。

您的代码容易受到 SQL 注入,并且您没有过滤或验证传入的数据。如果在这里您期望一个数值,例如 5,为什么不对其进行过滤或类型转换为 int 以确保这是您真正想要的值。如果它是一些危险的 SQL 而不是数值怎么办?

$id = (int) $_GET['id']; 
OR 
$id = filter_var($_GET['id'], FILTER_SANITIZE_NUMBER_INT);

类型转换或过滤会将任何非数字值变为 0。

 $db->query("DELETE FROM music WHERE id=$id")

你不应该像那样在你的 SQL 中放置值。 如何防止 SQL 注入?


推荐阅读