Javascript 以&;amp;amp;而不是&;amp;尝试更新MySQL数据库时
我目前正在建立一个“管理”部分,在这里可以使用这一页添加、更新和删除主站点上显示的信息 我的所有脚本都按预期运行,信息被添加到数据库,行被更新和删除,99.9%的情况下没有错误 数据库设置为3列TITLE、DESCRIPTION和Image,当更新任何行时,我使用TITLE中的值作为WHERE语句的引用 但是,任何包含“&”符号的标题都可以很好地下载并按预期插入到我的HTML中,但是当发送到我的更新脚本时,它们会作为&;发送;。这将无法正确注册到更新脚本中,然后更新失败。我知道转义时“&”会转换为“&”,但我无法理解为什么会有第二个“amp;”被派去 有人能解释一下这个问题吗/给我指出解决这个问题的适当文档吗 Javscript函数(dbtable和titler是决定要插入的表的变量) PHP脚本Javascript 以&;amp;amp;而不是&;amp;尝试更新MySQL数据库时,javascript,php,mysql,Javascript,Php,Mysql,我目前正在建立一个“管理”部分,在这里可以使用这一页添加、更新和删除主站点上显示的信息 我的所有脚本都按预期运行,信息被添加到数据库,行被更新和删除,99.9%的情况下没有错误 数据库设置为3列TITLE、DESCRIPTION和Image,当更新任何行时,我使用TITLE中的值作为WHERE语句的引用 但是,任何包含“&”符号的标题都可以很好地下载并按预期插入到我的HTML中,但是当发送到我的更新脚本时,它们会作为&;发送;。这将无法正确注册到更新脚本中,然后更新失败。我知道转义时“&”
$thetable = htmlentities($_GET['thetable']);
$currenttitle = htmlentities($_GET['currenttitle']);
$newtitle = htmlentities($_GET['newtitle']);
$newdesc = htmlentities($_GET['newdesc']);
$newimage = htmlentities($_GET['newimage']);
$db = mysqli_connect($servername, $user, $password);
if (!$db)
{
echo"NO CONNECTION AVAILABLE";
exit();
}
mysqli_select_db ($db, "testing");
$query ="UPDATE `$thetable` SET `TITLE`= '$newtitle', `DESCRIPTION` ='$newdesc', `IMAGE` = '$newimage' WHERE `TITLE` = '$currenttitle'";
echo$query;
$results = mysqli_query($db, $query);
if(!$results)
{
echo"not working";
exit();
}
echo"updated";
之所以会出现这种情况,是因为您使用了
htmlentities()
,它只会看到&
字符,因此会从中生成一个实体。您可以从所需的输入字段中删除htmlentities
,或者执行以下操作:
$value = str_replace('&', '&', htmlentities($value));
或(国际海事组织更好)
htmlentities
不是准备数据插入SQL查询的正确函数。当您将数据引入该上下文时,应针对您将其引入的上下文对其进行适当的处理。JS中的escape
已被弃用,而且在这里也不是正确的函数。@04FS您能详细说明一下吗?因为你的评论总结起来是“你错了”,没有关于使用什么/去哪里找到有助于解决问题的相关信息的指导。这实际上增加了一个“amp;”价值观。因此,使用A&B作为A*amp;amp;B
$value = str_replace('&', '&', htmlentities($value));
$value = htmlentities(html_entity_decode($value));