Php 记录不存在';t显示为已保存

Php 记录不存在';t显示为已保存,php,mysql,sanitize,Php,Mysql,Sanitize,这就是我通过php表单对数据库输入的数据进行清理的方法 function sanitize_input($data){ global $connect; $data = htmlspecialchars($data); $data = trim($data); $data = nl2br($data); $data = mysqli_real_escape_string($connect, $data); return $data; } 输

这就是我通过php表单对数据库输入的数据进行清理的方法

function sanitize_input($data){

    global $connect;

    $data = htmlspecialchars($data);
    $data = trim($data);
    $data = nl2br($data);
    $data = mysqli_real_escape_string($connect, $data);
    return $data; 
}
输出

function sanitized_output($data){

    $data = htmlspecialchars($data);
    $data = strip_tags($data, '<p><a>')     ;   
    $data = str_replace(array('\r\n', '\n\r'),'',$data);
    return $data; 
}

请指出问题。

尝试从这两个函数中删除
htmlspecialchars()
函数,然后查看结果。

像这样尝试使用下面的所有函数删除所有标记

$data = htmlspecialchars($data);
$data = strip_tags($data, '<p><a>')     ;   
$data = str_replace(array('\r\n', '\n\r'),'',$data);

一般来说,我喜欢在保存数据时完成所有工作。在输出数据时,您很少希望格式化数据,因为您只需保存一次数据,然后多次输出

使用
global
是另一个坏主意。将变量作为参数注入函数

让我们重写函数

function sanitize_input($data, $connect){
    $data = strip_tags($data, '<p><a>'); 
    $data = mysqli_real_escape_string($connect, nl2br(trim($data)));
    return $data; 
}
function sanitize\u输入($data,$connect){
$data=strip_标签($data,);
$data=mysqli_real_escape_string($connect,nl2br(trim($data));
返回$data;
}

这样,您就不需要
经过消毒的\u输出了
。没有必要使用
htmlspecialchars

您在做双重工作。你应该逃避你正在做的事情。您的sanitize_输入方法是一种数据销毁方法。我不想使用它。@VMai正是这么做的,但什么是正确的方法来清理数据并保持段落和换行符完整。我按照你的建议做了,这就是发生的事情这是第1段\r\n\r\n这是第2段我完全按照你说的做了。现在输出为“这是第1段\r\n\r\n这是第2段”。您需要先修复输入的数据
$data = htmlspecialchars($data);
$data = strip_tags($data, '<p><a>')     ;   
$data = str_replace(array('\r\n', '\n\r'),'',$data);
  function sanitized_output($data){

            $data = nl2br($data);
            return $data; 
        }
function sanitize_input($data, $connect){
    $data = strip_tags($data, '<p><a>'); 
    $data = mysqli_real_escape_string($connect, nl2br(trim($data)));
    return $data; 
}