2016-07-07 10 views
0

これは私のPHPコードです。警告ウィンドウを使用してエラーを表示する必要があります。カントエコーPHPの内部に<script>のタグをエコー?

if ($projectid=="") 
    { 
    $error = 'You must choose a project. 
       Click &lsquo;back&rsquo; and try again.'; 
    include error.html.php'; 
    exit(); 
    } 

これは、ブラウザのスクリプトタグで最大

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
     <meta charset="utf-8"> 
     <title>Script Error</title> 
     <meta charset="utf-8"> 
     <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
     <meta name="viewport" content="width=device-width, initial-scale=1"> 


    </head> 

    <body> 

     <script> 
      var error = <?php echo $error ; ?>; 
       window.onload = function(){ alert(error); } 
     </script> 
    </body> 
</html> 

Wahtsによって解析されたことになっているerror.html.phpのですか? PHPの実行を妨げていますか?

+1

アラートには何が表示されますか? – Devon

+1

JavaScriptはクライアント側で実行され、サーバー側ではPHPが、twainは2人で満たされます... – Katie

+1

@Katie lol - JavascriptがJSファイルではなくインラインHTMLであれば、それに欲しい。 – awl19

答えて

5

本当の問題は、これがあなたのレンダリング結果がどのように見えるかということですあなたへ?私はそうは思わない。

を生じるはずである
var error = <?=json_encode($error);?>; 

:はるかに良い

var error = "You must choose a project.\r\n     Click &lsquo;back&rsquo; and try again."; 

+0

はい私はJSONが必要であることを知りませんでした。ありがとう! JSONとは何ですか、なぜそれが必要ですか? – marc

+0

技術的に、あなたはしません。それはJSがそれを理解できるように文字列を再フォーマットする単なる方法です。それは、リテラル改行を '\ n'に置き換えるようなことを行います。そのため、インタプリタはこれがすべて1つの文字列の一部であることを理解することができます。 これも手動で行うこともできますが、JSONフォーマッタは便利なショートカットです。 –

1

問題はjavascriptがクライアントで実行され、ページがロードされた後でサーバー上でphpが実行された後に実行されることです。

ただし、ページがロードされた後phpが、その後javascript変数ページのロード時の値を設定し、することができ、次のような何かを行うことができ、メッセージを表示するようにjavascriptを実行します。編集内容に基づいて

<?php 
$error = "test me"; 
echo "<script>error = '" . $error . "'</script>"; 
?> 

<script> 
var error; 
window.onload = function(){ 
    alert(error); 
} 

</script> 

UPDATE 、ここで更新答えがあります。 ページがロードされるときに、$errorjavascript変数に割り当てるには、echo "<script>error = '" . $error . "'</script>"が必要です。

if ($projectid=="") 
    { 
    $error = 'You must choose a project. 
       Click ‘back’ and try again.'; 
    echo "<script>error = '" . json_encode($error) . "'</script>" 
    include error.html.php'; 
    exit(); 
} 

とHTML

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
     <meta charset="utf-8"> 
     <title>Script Error</title> 
     <meta charset="utf-8"> 
     <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
     <meta name="viewport" content="width=device-width, initial-scale=1"> 


    </head> 

    <body> 

     <script> 
      var error; 
       window.onload = function(){ alert(error); } 
     </script> 
    </body> 
</html> 
+0

私はあなたのソリューションを組み込みましたが、機能しません。私は詳細を追加するために私の質問を編集しました。 – marc

+1

'

0

あなたは確かにinline phpを使ってjavascriptコードを生成することができます。もちろん、それらはServer-SideとClient-Sideという異なるコンテキストで実行されますが、それはほとんど無関係です。

しかし、2つの言語がそのように通信していないことを認識する必要がありますが、JSの一部はPHPの出力によって生成されています。あなたはその出力について注意する必要があります。あなたが持っている問題の1つは、JSが複数行の文字列をサポートしないため、PHPの$ errorの値に改行を付けることができないということです。

代わりにこれを試してみてください:修正の

if ($projectid=="") 
    { 
    $error = 'You must choose a project. Click \"back\" and try again.'; 
    include 'error.html.php'; 
    exit(); 
    } 

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
     <meta charset="utf-8"> 
     <title>Script Error</title> 
     <meta charset="utf-8"> 
     <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
     <meta name="viewport" content="width=device-width, initial-scale=1"> 


    </head> 

    <body> 

     <script> 
      var error = "<?php echo $error ; ?>"; 
       window.onload = function(){ alert(error); } 
     </script> 
    </body> 
</html> 

一覧:include文で

  1. 固定引用符。
  2. JSコードのインラインPHPエコーに関する引用符を追加しました。
  3. $エラーvarの改行を削除しました。JSはそれをすべて1行で取得します。
  4. html引用符を削除し、エスケープされた通常引用符で置き換えました。アラートボックスはそれらを処理しません。
関連する問題