2012-09-20 82 views
0

如果用戶單擊按鈕,我想更改php變量(由var b1和var b2調用$ start和$ end)。現在我知道PHP是服務器端,但我該怎麼做呢?我讀一些有關使用$得到,但我不知道如何實現它:單擊事件時更改php變量

所有的
<?php if (is_user_logged_in()) { ?> 
<input type="submit" value="Start Chat" id="start_chat" style="position: absolute; top: 30px; left: 10px;" /> 
<?php 
} ?> 

<script> 
jQuery('#start_chat').click(function(){ 
    $(this).data('clicked', true); 
}); 

var b1 = '<?php echo $start; ?>'; 
var b2 = '<?php echo $end; ?>'; 


if(jQuery('#start_chat').data('clicked')) { 
    // change var b1 and b2 
} else { 
    // do not change anything 
} 


</script> 

<div id="eu_la"> 
<?php 
$start = strtotime('9:30'); 
$end = strtotime('12:30'); 
$timenow = date('U'); 
if((date('w') == 4) && ($timenow >= $start && $timenow <= $end)) { // day 2 = Tuesday 
    include('facut_mine.php'); 
    } 
    else { 
do_shortcode('[upzslider usingphp=true]'); 
    } ?> 
+0

http://www.w3schools.com/php/php_forms.asp – theintersect

+0

你想改變什麼變量?我無法弄清楚你在這裏試圖完成什麼。 – Vlad

+0

$ start和$ end由var b1和var b2調用 –

回答

5

您當前的代碼在這裏,添加:

// change var b1 and b2 
$.ajax({ 
    type: "POST", 
    url: "chat.php", 
    data: { b1: "123", b2: "456" } 
}); 

chat.php

$start = $_POST['b1']; 
$end = $_POST['b2']; 

更新:

,如果你需要加載在javascript中返回數據:

chat.php進行這些更改:

// variables 
if (!empty($_POST)) { 
    $data['b1'] = $_POST['b1']; 
    $data['b2'] = $_POST['b2']; 
} 

// to not lose them 
$_SESSION['chat'] = $data; 

// to keep it compatible with your old code 
$start = $data['b1']; 
$end = $data['b2']; 

// send the JSON formatted output 
echo json_encode($data); 

在你的客戶端代碼:

// change var b1 and b2 
$.ajax({ 
    type: "POST", 
    url: "chat.php", 
    dataType: 'json', 
    data: { b1: "123", b2: "456" } 
}).done(function(data) { 
    b1 = data.b1; 
    b2 = data.b2; 
}); 

我沒有測試,但是希望工程!

+0

是的,它的確如此。謝謝!歡迎來到 –

+0

,很高興聽到! :) – Mahdi

1

首先,輸入標籤必須包含在一個窗體標籤。因此,

<?php if (is_user_logged_in()) { ?> 
<form method="GET"> 
<input type="submit" value="Start Chat" id="start_chat" style="position: absolute; top: 30px; left: 10px;" /> 
<input type="hidden" name="start" value="[WHATEVER YOU WANT GOES HERE]" /> 
<input type="hidden" name="end" value="[WHATEVER YOU WANT GOES HERE]" /> 
</form> 
<?php 
} ?> 

然後,在PHP代碼

if (isset($_GET['start'])) 
    $start = $_GET['start']; 
if (isset($_GET['end'])) 
    $start = $_GET['end']; 

這將設置$開始和$結尾的變量,無論你通過表單提交的值。但是,您的JavaScript代碼將無法正常工作

jQuery('#start_chat').click(function(){ 
    $(this).data('clicked', true); 
}); 


if(jQuery('#start_chat').data('clicked')) { 
    // change var b1 and b2 
} else { 
    // do not change anything 
} 

第一段代碼將事件偵聽器添加到#start_chat元素。然而,問題在於當數據('clicked')未被設置時,後面的代碼片段被讀取並且被執行(通過解釋器)。所以它不會進入如果分支。

1

正如你所說的,PHP是服務器端。這就是爲什麼你必須調用一個Ajax-Send到服務器,把新的值傳遞給php腳本。然後,您必須加載通過Javascript(Ajax onready)從PHP提供的答案,並用新加載的頁面替換頁面(部分)。

似乎對我來說非常複雜,只是爲了改變開始和結束時間。只要做到這一點直接在JS)

+0

是的,但是我可以做到這一點do_shortcode('[upzslider usingphp = true]');在JavaScript?我以爲wordpress要求php ... –

+0

不,這不能在Js中完成。但是,您可以將其包含在文檔中,並通過CSS/Js隱藏它(如果不包含「關鍵」數據,則與facut_mine.php一樣)。所以您避免了使用Ajax的需要,並且您的頁面將在單個請求中加載。 –