连接到echoed语句的PHP变量未被回显

时间:2016-08-26 15:12:54

标签: php html ajax

我有一个使用纯javascript ajax的html-js-php页面。

该页面是一份使用负载和信息的问卷。保存你设置。当您点击下一个按钮时,它会保存当前显示的问题,并加载下一组问题。还有一个上一个按钮,最后是一个提交按钮。

html页面有一个容器用于所有内容,然后ajax会引入问题和按钮。

意外的结果是php变量没有与字符串的其余部分一起回显。 php代码位于第二个代码块中,证明此结果的代码位于第三个代码块中。

这是简化的容器:

<body onload="loadSlide(<?php echo $_GET["ID"]; ?>, 'Next', hdn_Section_Counter.value)">
    <div id="div_Questionnaire" class="Main_Content" >
        <p class="Main_Content_Title"> Plannning For Success - Questionnaire </p>
        <div class="Sub_Content" id="div_Questions">
            <p class="Sub_Content_Title"> Questions </p>
            <div id="div_Question_Holder"><!--Holds the questions-->

            </div>
            <input id="hdn_Section_Counter" type="hidden" value="0" Subject="1" Category="1" Section="1"/>
            <!--Keeps track of current slide under 2 counting forums - section count (values 1-22), and Subject-Category-Section-->
        </div>
    </div>
</body>

第一组问题是通过body onload加载的,它调用对加载问题的php文件的ajax调用。跳到问题所在的PHP代码部分...(仅显示“上一步”按钮)

/*$_POST["ID"] was sent over through ajax in the send() method (using POST)
$_SESSION["uid"] is created on login, there is a session_start() (to resume 
the session) at the beginning of the php file.*/
if($_POST["ID"]==$_SESSION["uid"]){
    $Viewing_Student=false;
}else{
    $Viewing_Student=true;
}
var_dump($Viewing_Student);//displays "false" as a boolean value
echo"<input class='Nav_Button' id='btn_Previous' type='button' value='Previous' onclick=\"saveSlide('/my-site/Tools/Planning_For_Success/save_slide.php', ".$_POST["ID"].", this.value, ".$Viewing_Student.")\"/>";

问题是$ Viewing_Student没有进入html。除了一个变量之外,其他所有内容都会到达html。这使得它更加令人困惑,因为$ _POST [&#34; ID&#34;]被连接并正确显示,但不是这个变量。

如注释中所述,变量包含一个值(布尔值为false),这由var_dump检查。

我知道通过查看chrome,firefox和microsoft edge开发人员工具来显示变量:(这里的代码是从chrome开发人员工具中复制的)

<input class="Nav_Button" id="btn_Previous" type="button" value="Previous" onclick="saveSlide('/my-site/Tools/Planning_For_Success/save_slide.php', 1, this.value, )">

变量应该显示在saveSlide()参数的末尾,如下所示:

"this.value, false)"

使用echo语句的所有内容看起来都很好,它甚至可以回声。除此之外,一个变量总是丢失。

清楚地说明我的问题...为什么这个变量($ Viewing_Student)没有被其余的字符串/变量回显?我该如何解决这个问题?

我正在使用的程序/语言/版本:

HTML 5

JS(也是纯javascript AJAX)

PHP 7

Sublime 3

Apache 2.4.17(全部在1个WAMP下载中)

4 个答案:

答案 0 :(得分:2)

您无法将PHP布尔值转储到Javascript(甚至纯文本)中:

?FromListExplicit

注意?as.Node.list 如何成为零长度字符串。这会在您的代码中产生JS语法错误。

基本上,从不输出&#34;文字&#34;从PHP直接进入Javascript上下文。正是这样的情况会产生JS语法错误并终止整个脚本块。始终使用php > echo 'x' . true . 'x'; x1x php > echo 'x' . false . 'x'; xx

false

答案 1 :(得分:2)

这是你必须要知道的一件小事,布尔“假”将被回显为“”&lt; - 空字符串,你可以从Amazon Specs检查它:

  

布尔值TRUE值转换为字符串“1”。 Boolean FALSE转换为“”(空字符串)。这允许在布尔值和字符串值之间来回转换。

答案 2 :(得分:1)

问题是布尔值不是字符串而PHP根本不显示 false 值。所以我建议你替换这一行:

var_dump($Viewing_Student);//displays "false" as a boolean value

这一个:

echo $Viewing_Student?'true':'false';

答案 3 :(得分:0)

听起来你想要字符串,而不是布尔值

if($_POST["ID"]==$_SESSION["uid"]){
$Viewing_Student='false';
}else{
$Viewing_Student='true';
 }