我创建了一个PHP博客系统。这是'创建帖子功能'看起来像
以下是代码:
<?php
session_start();
include('db_connect.php');
if(!isset($_SESSION['user_id'])){
header('Location: login.php');
exit();
}
if(isset($_POST['submit'])){
$title = $_POST['title'];
$body = $_POST['body'];
$category = $_POST['category'];
$title = $db->real_escape_string($title);
$body = $db->real_escape_string($body);
$user_id = $_SESSION['user_id'];
$date = date('Y-m-d G:i:s');
$body = htmlentities($body);
if($title && $body && $category){
$query = $db->query("INSERT INTO posts (user_id, title, body, category_id, posted) VALUES('$user_id', '$title', '$body', '$category', '$date')");
if($query){
echo '<div style="position:absolute; bottom: 40px; left: 500px; padding: 10px; background: red; box-shadow: 0px 3px 12px 2px #000; color: #fff;">Post Added</div>';
}else{
echo '<div style="position:absolute; bottom: 40px; left: 500px; padding: 10px; background: red; box-shadow: 0px 3px 12px 2px #000; color: #fff;">An unexpected error has occured.</div>';
}
}else{
echo '<div style="position:absolute; bottom: 40px; left: 500px; padding: 10px; background: red; box-shadow: 0px 3px 12px 2px #000; color: #fff;">Please enter all the required information to proceed</div>';
}
}
?>
<div id="mainbox">
<form action="<?php echo $_SERVER['PHP_SELF']?>" method="post">
<input type="text" name="title" placeholder="Enter Post Title Here">
<p></p>
<textarea name="body" cols=50 rows=10 placeholder="Enter Post Content Here"></textarea>
<p></p>
<select name="category">
<?php
$query = $db->query("SELECT * FROM categories");
while($row = $query->fetch_object()){
echo "<option value='".$row->category_id."'>".$row->category."</option>";
}
?>
</select>
<p></p>
<input type="submit" name="submit" value="Submit">
</form>
</div>
正如您所看到的,我添加的段落已被删除。如何防止这种情况并保留段落?
答案 0 :(得分:2)
输入数据的方式是使用换行符。当它粘贴在HTML页面中时,它们不可见,因为在HTML中折叠了空格。要保持换行符,请使用nl2br()
将其转换为HTML。
请注意,每次打印时最好转换数据,而不是使用<br>
标记将数据存储在数据库中。否则,如果您去编辑帖子,突然之间您正在处理HTML而不是纯文本 - 这不是用户期望的。不仅如此,您还可以通过允许任意HTML来暴露自己的安全风险。
因此,在该示例页面上,执行以下操作:
<?php
while($query->fetch()):
$html_body = nl2br($body);
$lastspace = strrpos($html_body, ' ');
?>
<h2><?php echo $title?></h2>
<p><?php echo substr($html_body, 0, $lastspace)."<a href='blog/post.php?id=$post_id'>..</a>"?></p>
<p>Category: <?php echo $category?>
<hr />
<p></p>
<?php endwhile?>
答案 1 :(得分:0)
在php中使用 htmlentities 或html前标签
已更新
echo "<pre>" . $postedData . "</pre>";
或
echo htmlentities($postedData);