我目前正在建立一个“管理员”部分,可以使用此页面添加,更新和删除主站点上显示的信息。
我的所有脚本都能正常运行,信息已添加到数据库,行的更新和删除在99.9%的情况下都没有错误。
数据库由3列TITLE,DESCRIPTION和Image设置,更新任何行时,我都将TITLE中的值用作WHERE语句的参考。
但是,任何包含“&”符号的标题都可以正常下载并插入到我的HTML中,但是,当发送到我的更新脚本时,它们将以&发送。然后,这将无法在更新脚本中正确注册,然后将无法更新。我知道'&'在转义时会转换为'&',但无法理解为什么还有第二个'amp;'。被发送?
任何人都可以阐明这一点/向我指出解决此问题的适当文档吗?
脚本功能(dbtable和titler是决定要插入表的变量)
function updating(indexno) {
var current = document.getElementById('title'+indexno).innerHTML;
var newtitle = document.getElementById('titlelink'+indexno).value;
var newdesc = document.getElementById('desclink'+indexno).value;
var newimage = document.getElementById('imagelink'+indexno).value;
if(newtitle == ""){
newtitle = document.getElementById('title'+indexno).innerHTML;
};
if(newdesc == ""){
newdesc = document.getElementById('description'+indexno).innerHTML;
};
if(newimage == ""){
newimage = document.getElementById('image'+indexno).innerHTML;
}
var request = "updatingdb.php?newtitle="+escape(newtitle)+"&newdesc="+escape(newdesc)+"&newimage="+escape(newimage)+"¤ttitle="+escape(current)+"&thetable="+escape(dbtable);
var xhr = new XMLHttpRequest();
xhr.open("GET", request);
xhr.onreadystatechange = function () {
if (xhr.readyState == 4 && xhr.status == 200) {
console.log(xhr.responseText);
}
};
xhr.send(null);
thetester(dbtable,titler);
}
PHP脚本
$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";
答案 0 :(得分:0)
之所以发生这种情况,是因为您使用了htmlentities()
,它将仅看到&
字符,并因此而产生一个实体。您可以从所需的输入字段中删除htmlentities
或执行以下操作:
$value = str_replace('&', '&', htmlentities($value));
或(更好的imo)
$value = htmlentities(html_entity_decode($value));