我似乎遇到了一个问题,其中文本区域中的用户输入包含换行符(用户开始一个新段落),我用real_escape_string清理了它们的输入并插入到MySQL数据库中。问题是,这些换行符未保留。而是变成了一个隆隆的段落。
我正在运行PHP版本7.2.4,并且我尝试重新创建该问题,以查看是否是导致该问题的某些现有代码。通常对别人有用的东西似乎对我没有帮助,例如str_replace和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>";
}
}
?>
基本上,我的目标是采用换行符的形式来输入确切的格式,并按照输入的方式打印出来。当前在我的表单中,如果您输入:
This is one line.
This is the next.
它从数据库条目中打印出“这是一行。这是下一行”。
我在脚本中有几个回声(如您所见),每个回声都会打印 每次都“这是我的第一行\ r \ n这是下一行”。我的所有功能均无作用。我这样做正确吗?
P.S。我是PHP和MySQL的新手,因此,如果语法错误,我不会感到惊讶,但是我发誓我已经看过了,而且从我所看到的来看,一切看起来都是正确的。
答案 0 :(得分:1)
您可以在PHP中使用{{1}}函数。它将保留您的方面。
答案 1 :(得分:0)
通过使用准备好的语句,可以避免完全执行mysqli_real_escape_string和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);