2012-06-07 59 views
0

有沒有辦法當我點擊一個按鈕時它會執行一堆php代碼?JS OnClick會執行php代碼塊的事件

例如;

<input type="button" value="Submit Order" class="minibutton" **onClick="executePHP"**> 

這個按鈕對象就在這裏,如果我點擊它,這個php代碼將被執行。

include("../includes/connect.php"); 
    include("../includes/generateTimestamp.php"); 
    include("../includes/knowthename.php"); 


    $pid=$_POST['submit_id']; 
    $pname = $_POST['submit_name']; 
    $total = $_POST['submit_total']; 
    $quantity = $_POST['submit_qty']; 
    $price = $_POST['submit_price']; 
    $unit = $_POST['submit_unit']; 
    $change = $_POST['submit_sukli']; 
    $payment = $_POST['submit_payment']; 
    $count = $_POST['count']; 
    //explode 
    $newpid = explode(";",$pid); 
    $newpname = explode(";",$pname); 
    $newquantity = explode(";",$quantity); 
    $newprice = explode(";",$price); 
    $newpriceunit = explode(";",$unit); 


    $sql = mysql_query("INSERT INTO sales (sales_date, total_price, emp_id) VALUES ('$timestamp','$total', '$employee_id')"); 
    mysql_query($sql); 
    $id_gen = mysql_insert_id(); 
    $count = $count - 1; 
    while($count = -1){ 

      $product_id = $newpid[$count]; 
      $product_name = $newpname[$count]; 
      $product_quantity = $newquantity[$count]; 
      $product_price = $newprice[$count]; 

      $sql2("INSERT INTO sales_details (sales_id,product_id,sales_qty,unit_price,net_price) VALUES ('$id_gen','$newpid[$count]','$product_quantity[$count]', 
      '$product_price[$count]','$newpriceunit[$count]')"); 
      mysql_query($sql2);   
     } 
    header('Location: prompt.php?x=5'); 

    }else{ 
     echo 'Nothing here!'; 
     } 

我想要做的onclick功能的斷路器,如果我點擊它,它就會別讓並繼續執行這些一串代碼,

如果沒有辦法,我能做到這一點,是有其他方法?

函數isset不起作用,因爲數據將會因爲原始數據來自$ _POST而丟失(數組)。我的希望是onclick事件,但我不知道如何。

請賜教我電腦的風險!

+0

我會說這可能可以用一個jQuery/Ajax請求完成 - http://api.jquery.com/jQuery.ajax/ – Batfan

回答

3

您只能將JavaScript附加到瀏覽器事件。如果您想執行服務器端代碼(例如PHP),則需要調用服務器。在你的情況下,忘記JavaScript並將你的表單發佈到你的PHP頁面。

<form method="post" action="file.php"> 

    <!-- form inputs --> 

    <input type="button" value="Submit Order" class="minibutton" /> 

</form> 

然後把你的代碼file.php

編輯

把所有的數據後在一個隱藏的表單字段。然後當你點擊按鈕時,它將重新提交發布數據。

foreach($_POST as $key => $val) { 
    echo '<input type="hidden" name="'.htmlspecialchars($key).'" value="'.htmlspecialchars($val).'" />'."\n"; 
} 

如果你有一個多維數組後,就serialize()它,把它貼在1場

echo '<input type="hidden" name="data" value="'.htmlspecialchars(serialize($_POST)).'" />'."\n"; 

然後unserialize()它的另一面。

$_POST = unserialize($_POST['data']); 
+0

就像我說過的,我不能做一個POST並在isset上得到它,因爲文件數據也來自另一個POST方法。 如果我這樣做,那麼所有的數據將被刪除,它是一個陣列。 –

+0

什麼? morechars – ddlshack

+0

好的,原始數據來自sales.php使用POST。 我目前的頁面是checkorder.php。 我已經顯示來自sales.php的所有數據。 現在我做了一個按鈕,如果該按鈕被點擊,那麼它會執行一個PHP塊將數據放入數據庫。 –

0

使用jQuery:

$('.minibutton').on('click', function(e) { 
    // do some ajax stuff here 
}); 

例子:http://api.jquery.com/jQuery.ajax/

+0

它是一個很好的解決方案,但我還沒有嘗試過的AJAX或jquery,我會在未來嘗試。如果有的話,我正在使用基本的php和js來完成這個項目。 –

0

如果您.PHP需要的是來自於點擊的元素值,沒有你不。 如果你的代碼本身只是一堆php,與客戶端請求無關,你可以在js函數中回顯它,並在點擊時調用它。

+0

我想這可能會工作,但事情是如何把一個PHP代碼內JS函數? 我可以通過這個得到錯誤,但我會嘗試看看它是否有效 –

+0

實際上沒有 - 我的意思是你打電話給你的php -while-在服務器上,並通過.php回顯一個可能產生的js代碼(唯一的東西可以被js調用而不會觸及服務器) - 你不能在客戶端調用.php;只有.php echo(js/html)的結果,只是在你的函數中回顯出來。 – 2012-06-08 01:21:55