允许将标点符号提交给MySQL db

时间:2014-11-02 22:23:33

标签: php mysql forms

我已经设置了所有内容,但是这很有效,但是当我点击提交时,如果没有MySQL语法错误,我就无法添加'或任何其他标点符号。我想知道如何在表单的文本行中添加标点符号。我在Collat​​ion下设置了utf8_unicode_ci,但我仍然遇到语法错误。

textarea是我希望能够提交任何标点符号或字符的地方。这就是我所拥有的。

这是我正在使用的表格

print "<form method=post action=reply.php>";
print "<h3>Reply:</h3>";

print "<br><textarea name=reply_content textarea rows=4 cols=50></textarea>";
print "<input type=hidden name=reply_user value={$_SESSION['user_name']}>";
print "<input type=hidden name=topic_id value=$id>";
print "<br><input type=submit></form>";

这是reply.php的SQL

$reply_content=$_POST['reply_content'];
$reply_time=date('Y-m-d H:i:s');
$reply_user=$_POST['reply_user'];
$topic_id=$_POST['topic_id'];

mysql_query("INSERT INTO reply VALUES ('reply_id', '$reply_user', '$reply_content', '$reply_time', '$topic_id')") OR die(mysql_error());

print "<center><h1>Reply Posted Successfully</h1>";

我知道有办法做到这一点,我只是不知道怎么做。如果有人能帮帮我,我真的很感激!

3 个答案:

答案 0 :(得分:2)

你需要做很多事情,但要专门用单引号添加值等,你需要做一些简单的事情:

$reply_content = mysql_real_escape_string($_POST['reply_content']);

这将需要$_POST['reply_content']并在必要时添加反斜杠,以便可以将其插入MySQL。如果要向用户显示数据,请不要忘记将其反转。你不希望他们看到他们不期待的斜线。

另外,根据你的例子你应该......

  1. 如果你必须使用mysqli_,用mysqli_ *替换你所有的mysql_ *函数(不推荐使用mysql_ *函数替换为mysqli_ *对应函数)
  2. 清理用户的任何输入 - 不要相信他们发送给您的内容。来自@Michael Berkowski的评论指向“How can I prevent SQL injection in PHP”是一个很好的开始,“SQL Injection”是另一个

答案 1 :(得分:1)

试试这个(参见mysql_real_escape_string):

$reply_content = mysql_real_escape_string($_POST['reply_content']);

此外,还有一些正确方法的提示:

您正在将会话中的用户名写入隐藏的输入字段。 试试这样:

session_start();
$reply_user = $_SESSION['user_name'];

您添加了一个属性&#39; textarea&#39;在

<textarea ... textarea>...

删除此

像这样编辑您的HTML输出:

print "<form method='post' action='reply.php'>";
print "<h3>Reply:</h3>";

print "<br><textarea name='reply_content' rows='4' cols='50'></textarea>";
print "<input type='hidden' name='reply_user' value='{$_SESSION['user_name']}'>";
print "<input type='hidden' name='topic_id' value='$id'>";
print "<br><input type='submit'></form>";

或者像这样:

// Some PHP Stuff
?>
<form method="post" action="reply.php">
<h3>Reply:</h3>
<textarea name="reply_content" rows="4" cols="50"></textarea><br/>
<input type="hidden" name="topic_id" value="<?php echo $id; ?>" />
<input type="submit" />
</form>
<?php
// Go on with php stuff

在这里还有更多工作要做但是因为看起来你是PHP的新手,现在应该没问题了

提一下:您的代码对sql injection

不安全

答案 2 :(得分:-1)

尝试使用mysql_real_escape_string

$content = "<form method=post action=reply.php>";
$content .= "<h3>Reply:</h3>";

$content .= "<br><textarea name=reply_content textarea rows=4 cols=50></textarea>";
$content .=  "<input type=hidden name=reply_user value={$_SESSION['user_name']}>";
$content .=  "<input type=hidden name=topic_id value=$id>";
$content .=  "<br><input type=submit></form>";

$content = mysql_real_escape_string($content);