2012-02-02 82 views
0

我正在使用“mysql_real_escape_string”将数据插入到mySQL中。来自mySQL的PHP​​结果不显示输入值内部的引号

为了检索它,我通过使用反斜杠来回显它,并且它工作正常,除了当我将值放入输入值(如本例中)时。单引号工作正常,例如:Milky's Home ...但是双引号,剪下脚本,在第一个引号中:。例如:银河系的“家”到底应该只:银河的

如果我删除的stripslashes,它表明:银河/的/

所以,还是削减它在第一次报价。

这是脚本:

$id=mysql_real_escape_string($_POST[id]); 

<? 
echo stripslashes($Titlez['titlez']); 
?> 
<input type="text" size="150px" name="titlez" value="<? echo stripslashes($Titlez['titlez']); ?>"> 

我也尝试过这两个选项,但给出相同的结果:

<? 
$titlez = stripslashes($Titlez['titlez']); 
echo '<input type="text" size="150px" name="titlez" value="'.$titlez.'">'; 
echo "<input type=\"text\" size=\"150px\" name=\"titlez\" value=\"".$titlez."\">"; 
?> 
+0

在传入数据保存到数据库之前,您应该对传入数据进行反斜杠()。另外,正如你发现的那样,魔语引用非常糟糕。如果可以,然后关闭它们。 – GordonM 2012-02-02 08:14:45

+0

我建议你将你的代码转换到PDO,使用准备好的语句,然后它会保护你免受MySQL注入。用PDO你不应该关心mysql_real_escape_string。 – 2018-02-28 13:41:51

回答

2

试试这个

$titlez = htmlentities(stripslashes($Titlez['titlez'])); 
0

,则不应使用mysql_real_escape_string任何东西,但将数据插入到MySQL。另外,一旦数据存储在数据库中,由mysql_real_escape_string添加的斜杠(或任何用于转义特殊字符的内容)将被删除,因此,当您从数据库中提取数据时,您不需要使用“stripslashes”或任何其他的不可逃避的方法。

正如其他人已经提到,你会想要禁用你的php.ini中的魔术引号,如果你还没有。否则,额外的斜线会自动添加到任何请求数据中。

一旦将数据嵌入到HTML中,您将使用htmlentities(正如Rezigned所述)正确地转义特殊字符。

+0

谢谢大家,我很容易在文件夹MAMP/conf/php5.2/php.ini中找到php.ini,我用文本编辑器打开它,并将magic_quotes_gpc = On改为 – Sebastian 2012-02-03 12:02:29

+0

@GordonM但是我怎样才能修改它服务器。这是一个VPS,在ISPconfig中,我看到这个/etc/php5/apache2/php.ini,但在FTP中,我没有看到一种方式到达那里。 – Sebastian 2012-02-03 12:08:38