我有一个发布系统,但我不希望人们在发布时能够使用HTML标记,这里是数据库查询的代码。
if (!empty($post1) && !empty($title)) {
strip_tags($post1);
// Only set the picture column if there is a new picture
$query = "INSERT INTO kaoscraft_posts (`username`, `rank`, `gender`, `picture`, `post_date`, `title`, `post`, `category`) VALUES ('$username', '$rank', '$gender', '$picture', NOW(), '$title', '$post1', '$category')";
mysqli_query($dbc, $query);
这是表格
<form enctype="multipart/form-data" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<input type="hidden" name="MAX_FILE_SIZE" value="<?php echo MM_MAXFILESIZE; ?>" />
<fieldset>
<legend>Post Here:</legend>
<label type="hidden" for="title">Title:</label><br />
<input type="text" name="title"><br /><br />
<select id="category" name="category">
<option value="G" <?php if (!empty($category) && $category == 'G') echo 'selected = "selected"'; ?>>General</option>
<option value="Srv" <?php if (!empty($category) && $category == 'G') echo 'selected = "selected"'; ?>>Server</option>
<option value="C" <?php if (!empty($category) && $category == 'G') echo 'selected = "selected"'; ?>>Clan</option>
<option value="SA" <?php if (!empty($category) && $category == 'G') echo 'selected = "selected"'; ?>>Staff App</option>
<option value="V" <?php if (!empty($category) && $category == 'G') echo 'selected = "selected"'; ?>>Videos</option>
</select><br /><br />
<label type="hidden" for="post1">Post Content:</label><br />
<textarea rows="4" name="post1" id="post1" cols="50"></textarea><br />
</fieldset>
<input type="submit" value="Save Post" name="submit" />
</form>
答案 0 :(得分:0)
PHP有一个用于此目的的内置函数:strip_tags。来自他们网站的例子:
<?php
$text = '<p>Test paragraph.</p><!-- Comment --> <a href="#fragment">Other text</a>';
echo strip_tags($text);
echo "\n";
// Allow <p> and <a>
echo strip_tags($text, '<p><a>');
?>
所以你只需添加strip_tags($ post1);在将其添加到数据库之前(或期间)。
答案 1 :(得分:0)
在您致电$post1
后,您需要重新指定strip_tags
。
$post1 = strip_tags($post1);
此外,除非您在其他地方有一些可靠的SQL转义代码,否则 强烈 建议您从SQL注入中保护代码。如果您直接将用户输入放入SQL查询中,他们可能会输入恶意SQL语句。