2011-12-04 61 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它