2016-08-26 10 views
0

純粋なjavascript ajaxを使用するhtml-js-phpページがあります。エコーされた文に連結されたPHP変数がエコーされていません

このページは、セットアップとして保存する&の負荷を使用するアンケートです。次のボタンを押すと、現在表示されている質問が保存され、次の質問がロードされます。また、前のボタンがあり、最後に送信ボタンがあります。

htmlページにはすべてのものが入っているので、ajaxは質問とボタンを表示します。

予期せぬ結果は、PHP変数が残りの文字列とエコーされないことです。 phpコードは第2のコードブロックにあり、この結果を示すコードは第3のコードブロックにあります。ここで

は単純化されたコンテナです:

<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> 

質問の最初のセットが質問にロードするPHPファイルへのAJAX呼び出しを呼び出しボディのonloadを介してロードされます。

/*$_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.")\"/>"; 

(のみ前のボタンを表示する)...問題があり、このPHPコードの部分にスキップする問題は、$ Viewing_StudentがHTMLになっていないです。他のすべては、その1つの変数を除いてhtmlに達します。 $ _POST ["ID"]が正しく連結されて表示されますが、この変数は正しく表示されないため、さらに混乱します。

コメントに記載されているように、変数は値(ブール値false)を保持します。これはvar_dumpによってチェックされます。

私は変数は、クロム、を見て、表示されていない知っているFirefoxとマイクロソフトエッジ開発者向けツール:変数がに表示されているはず

<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,)"> 

(ここではChromeデベロッパーツールからコピーしたコード)以下のようにsaveSlide()の引数の終わり:echo文と

"this.value, false)" 

すべてが、それさえもエコーうち、罰金のように見えます。これを除いて、1つの変数は常に欠けています。

私の質問を明確に述べるには...この変数($ Viewing_Student)が他の文字列/変数にエコーされないのはなぜですか?これをどうすれば解決できますか?私が使用しています

プログラム/言語/バージョン:

HTML 5

JS(純粋なJavaScriptのAJAX)3

のApache 2.4.17 7

崇高

PHP (すべて1 WAMPダウンロードでダウンロード)

答えて

2

PHPをダンプすることはできませんそのようなJavascriptの(あるいはプレーンテキスト)にブール値:

php > echo 'x' . true . 'x'; 
x1x 
php > echo 'x' . false . 'x'; 
xx 

注意をfalseは長さゼロの文字列になりましたか。それはあなたのコードでJS構文エラーを生成します。

基本的にNEVERは、PHPの "text"をJavascriptコンテキストに直接出力します。 JS構文エラーを生成し、スクリプトブロック全体を消去することができるのは、まさにこのような状況です。常にjson_encode()を使用します。

php > echo 'x' . json_encode(true) . 'x'; 
xtruex 
php > echo 'x' . json_encode(false) . 'x'; 
xfalsex 
1

問題はブール値が文字列ではなく、PHPは、単に値が表示されないということです。この1により

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

:だから私はあなたがこの行を置き換えるアドバイス

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

あなたは、文字列をしたいような音ではなく、ブール

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

実際にこの状況でブール値が意味をなさないようになります(それはあなたの学生を見ているかどうか、はい、いいえ)。 json_encode(marcが示唆しているように)を置き換えて、問題を修正しました。 – Tyler

+0

それは並べ替えてうれしいねえ、我々は何かを学んだ! –

2

それはあなたが知っている必要があります小さなことです空の文字列の場合は、manual

からチェックすることができます。この場合、ブール値「false」は「<」とエコーされます。

ブール値TRUEは文字列 "1"に変換されます。 Boolean FALSEは ""(空文字列)に変換されます。これにより、ブール値と文字列値の間の変換が可能になります。

+0

まあ、それを指しているマーク。私は彼の答えを受け入れることができるようにウェブサイトを待っています。 – Tyler

関連する問題