Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php “防止线路中断的方法”\"&引用\r";从被移除?_Php_Html_Mysql_Database - Fatal编程技术网

Php “防止线路中断的方法”\"&引用\r";从被移除?

Php “防止线路中断的方法”\"&引用\r";从被移除?,php,html,mysql,database,Php,Html,Mysql,Database,我似乎遇到了这样一个问题:文本区域中的用户输入包含一个换行符(用户开始一个新段落),我用real_escape_字符串对其输入进行了清理,并将其插入到MySQL数据库中。问题是,这些换行符不会被保留。相反,它变成了一个冗长的段落 我运行的是PHPversion7.2.4,我试图重新创建这个问题,看看是不是一些现有的代码导致了这个问题。通常对其他人有用的东西似乎对我没用,比如stru替换和nl2br if(isset($_POST['post'])) { $content = $_POST['

我似乎遇到了这样一个问题:文本区域中的用户输入包含一个换行符(用户开始一个新段落),我用real_escape_字符串对其输入进行了清理,并将其插入到MySQL数据库中。问题是,这些换行符不会被保留。相反,它变成了一个冗长的段落

我运行的是PHPversion7.2.4,我试图重新创建这个问题,看看是不是一些现有的代码导致了这个问题。通常对其他人有用的东西似乎对我没用,比如stru替换和nl2br

if(isset($_POST['post'])) {
  $content = $_POST['content'];

  $content = mysqli_real_escape_string($conn, $content);

  echo "real escaped: " . $content;

  $content = str_replace("\r\n", "<br>", $content);

  echo "str_replaced" . $content;

  echo (nl2br($content, false));

  $insert_query = "INSERT INTO `stories` (`post_id`, `content`) VALUES (NULL, '{$content}')";
                   // INSERT INTO `stories` (`post_id`, `content`) VALUES (NULL, 'egdhfhj')

  $insert_post = mysqli_query($conn, $insert_query);

  if(!$insert_post) {
    die("QUERY FAILED " . mysqli_error($conn));
  } else {
    echo "Posted successfully";
  }

}

echo "Current posts";

$read_query = "SELECT * FROM stories";

$display_posts = mysqli_query($conn, $read_query);

if (!$display_posts) {
  die("QUERY FAILED " . mysqli_error($conn));
} else {

  while ($row = mysqli_fetch_array($display_posts)) {
    $post_id = $row['post_id'];
    $content = $row['content'];

    echo "<p>" . $post_id . "<p>";
    echo "<p>" . $content . "<p>";
  }
}
?>
它从数据库条目中打印出“这是一行,这是下一行”

我的脚本中有几个回音(如你所见),每个回音都打印出来 每次“这是我的第一行\r\n这是下一行”。我的所有功能都不起作用。我这样做对吗


另外,我对PHP和MySQL非常陌生,所以如果是语法错误,我不会感到惊讶,但我发誓我已经看过了,从我所看到的来看一切都是正确的。

你可以在PHP中使用
nl2br()
函数。它将保留您的方面。

通过使用准备好的语句,您可以完全避免执行mysqli\u real\u escape\u字符串和SQL注入的危险(请调查此主题):

$content = $_POST['content'];
$insert_query = "INSERT INTO `stories` (`post_id`, `content`) VALUES (NULL, ?)";
$stmt = $mysqli_prepare($conn, $insert_query);
mysqli_stmt_bind_param($stmt, "s", $content); /* "s" means this is a string parameter */
mysqli_execute($stmt);
mysqli_close($stmt);

OP想要在一个文本区域中输入一个包含到数据库中的换行符,然后按原样检索。@MohitKumar首先,不是我否决了你。你为什么要做出这样的假设?其次,我的解决方案保留了回车符、换行符和输入中的任何其他字符。它比不使用预先准备好的语句的解决方案更安全。我建议您也调查SQL注入和预处理语句。@MohitKumar如果您仔细查看上面的代码,您可以看到变量$content取自$\u POST['content'],在绑定到预处理语句之前未以任何方式进行修改。
$content = $_POST['content'];
$insert_query = "INSERT INTO `stories` (`post_id`, `content`) VALUES (NULL, ?)";
$stmt = $mysqli_prepare($conn, $insert_query);
mysqli_stmt_bind_param($stmt, "s", $content); /* "s" means this is a string parameter */
mysqli_execute($stmt);
mysqli_close($stmt);