&符以&发送而不是&,当尝试更新MySQL数据库时

时间:2019-04-12 11:02:59

标签: javascript php mysql

我目前正在建立一个“管理员”部分,可以使用此页面添加,更新和删除主站点上显示的信息。

我的所有脚本都能正常运行,信息已添加到数据库,行的更新和删除在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)+"&currenttitle="+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";


1 个答案:

答案 0 :(得分:0)

之所以发生这种情况,是因为您使用了htmlentities(),它将仅看到&字符,并因此而产生一个实体。您可以从所需的输入字段中删除htmlentities或执行以下操作:

$value = str_replace('&', '&', htmlentities($value));

或(更好的imo)

$value = htmlentities(html_entity_decode($value));