2011-12-04 44 views
3

我想做一個確認框,它將希望執行哪個php代碼。 繼承人我的代碼:在javascript的IF語句中使用PHP

<script type="text/javascript"> 
    var answer = confirm('Are you sure?'); 

    if(answer==true) 
     { 
      <?php $confirmation = 1; ?> 
     } 
    else 
     { 
      <?php define("CONFIRMATION", 1, true); ?> 
     } 
     alert('<?php echo $confirmation; ?>') 
     alert('<?php echo defined("CONFIRMATION"); ?>') 
</script> 

的問題是,即使我點擊YES,從定義()函數$確認和布爾返回1 無論我點擊,(取消或確定)其中之一應該是0 (我之前已經聲明瞭$確認) 但是,if和else塊都使用了兩個代碼! 通常它是這樣的

回答

13

您從根本上誤解了PHP正在做什麼。

在頁面發送到瀏覽器之前,PHP會在服務器上進行評估。當瀏覽器看到它並執行javascript時,所有的PHP都消失了。

在瀏覽器窗口中使用瀏覽器的「查看源代碼」,並在其中包含此代碼。你會看到它看起來像這樣:

<script type="text/javascript"> 
var answer = confirm('Are you sure?'); 

if(answer==true) 
    { 
      } 
else 
    { 
      } 
    alert('1') 
    alert('1') 
</script> 

你要麼需要實現你想要的東西在JavaScript中,在瀏覽器上運行,或者您需要發送一個新請求到服務器,並得到了新的一頁(直接或間接)回覆您的回覆。

10

這將永遠不會工作,因爲PHP處理之前輸出發送到瀏覽器。如果你真的需要在PHP中修改某些東西,那麼請嘗試使用AJAX調用。

http://ajaxpatterns.org/XMLHttpRequest_Call

,或者嘗試使用jQuery的$.ajax();功能。 Start by looking here

下面是一個簡單的例子:的script.php

<script type="text/javascript"> 
var answer = confirm('Are you sure?'); 
$.ajax({ 
    type: 'GET', 
    url: '/path/to/script.php', 
    data: 'answer=' + answer, 
    success: function(response) { 
     alert(response); 
    } 
}); 
</script> 

內容:

<?php 
    if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) 
     && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest' 
    ) { 
     // AJAX request 
     $answer = $_GET['answer']; 
     // ... 
    } 
+0

那麼這意味着我無法處理我的php代碼中提到的confirmmboxes的值? – sarkolata

+0

你可以在_PHP script_中。這是使用AJAX的目的。 –

3

你是誤會這裏會發生什麼順序。

首先,PHP會輸出javascript層。您的if塊將如下所示:

if (answer == true) 
{ 
} 
else 
{ 
} 

javascript引擎應該優化它,並完全忽略它。如果您需要讓PHP使用JavaScript層的輸入來處理某些內容,請考慮使用AJAX。

3

通常它是這樣工作的

沒有,它永遠不會是這樣的。 PHP在JavaScript之前執行,所以它永遠不會像這樣工作。

我想從我所看到的,你會想是

<a href="?confirmation=1" onclick="return confirm('Are you sure?')">Your link</a> 

這會在當前頁面$_GET['confirmation']設置爲"1"

4

如果沒有post/get請求,您將無法觸發PHP代碼執行。 爲了您的需要,您應該在表單提議之間進行選擇,或在確認時在查詢字符串中填充填充參數的頁面鏈接。

P.S. 查詢字符串參數是「?」在格式變量=值

例如:

index.php?answered=1 

你,然後能夠檢索使用PHP $ _ POST這些vatiable /值,$ _ GET或在這樣的方式$ _REQUEST變量:

所以你不能這樣做,因爲 當你通過JavaScript檢查是否已執行else語句PHP的,所以你不能做到這一點 但JavaScript的前
if ($_REQUEST['answered'] == 1) { //confirmed 
... 
} 
2

PHP執行。然而,你可以使用Ajax它