2014-02-05 28 views
0

我是新手,我很難在javascript中構建mysql查詢。這個想法是在下拉值改變時運行mysql查詢。在onchange事件中運行php查詢

下面是代碼: HTML代碼

<select name="cmbStatus" id="cmbStatus" onchange="check()"> 
      <option value="All" selected>All</option> 
      <option value="New">New</option> 
      <option value="In Progress">In Progress</option> 
      <option value="Down">Down</option> 
      <option value="Complete">Complete</option> 
      </select> 
      <label> 
      <input type="text" name="textfield" id="textfield"> 
      </label 

JS代碼

<script> 
function check() 
{ 
    document.getElementById("textfield").value = document.getElementById("cmbStatus").value; 
} 
</script> 

PHP代碼

$query="SELECT * FROM incident_ticket where Status = 'cmbstatus.value' "; 
$result=mysql_query($query); 
$num=mysql_numrows($result); 
+0

使用ajax代替內部編寫php代碼javascript – krishna

+0

您無法以此方式組合客戶端和服務器端語言。使用其他人所建議的AJAX [從這裏開始](http://api.jquery.com/jquery.ajax/) –

+1

如果它給你提供你需要的信息,不要忘記標記一個答案是正確的。 – Jite

回答

0

你需要使用AJAX來執行PHP代碼,當用戶改變下拉在html頁面上的值。

0

使用Ajax。你不能直接從Javascript運行MySQL。你可以做的是,使用ajax將它轉移到不同的PHP頁面,在那裏你可以運行你的SQL腳本

3

PHP代碼在服務器上運行,而javascript(如果不是服務器端JavaScript)運行在客戶端。
這意味着你不能直接在javascript事件的javascript函數中運行php代碼,導致它已經在服務器上運行,甚至在頁面甚至加載到客戶端之前。
這種情況下通常使用的是AJAX。

使用ajax,您可以向服務器上的php腳本(包含您希望更新的數據)發送一個請求,並在php腳本中運行查詢。

有跡象表明,使得發送請求這樣容易,大多數人幾個不同的JavaScript庫可能會建議使用jQuery,其中一個簡單的Ajax post請求看起來是這樣的:

$.ajax({ 
    type: "POST", 
    url: "thephpscript.php", 
    data: data, 
    success: function(){/*onsuccess*/} 
}); 

但這需要您在執行請求之前加載jquery庫。這是另一個問題,爲此,我會建議你閱讀了jQuery文檔:http://www.jquery.com


此外:
我真的建議您不要在PHP中使用mysql_*功能無論是。
mysql_* api已棄用,將在未來版本的php中刪除。
您在示例中獲得的代碼也對sql-injections開放,這非常糟糕。
改爲使用mysqliPDO,並且在查詢中使用它之前轉義數據或使用prepared statements

0

使用Ajax價值轉移到PHP文件,並在runquery.php上改變選擇值

$("#cmbStatus").onchange(function(e) { 


jQuery.post("runquery.php", { 

selcval:$("#cmbStatus").val() 

}, function(data, textStatus){ 



}); 

}); 

在PHP文件執行查詢你想在這樣的選擇值的變化執行什麼執行PHP代碼

$query="SELECT * FROM incident_ticket where Status = '".$_POST['selcval']."' "; 
$result=mysql_query($query); 
$num=mysql_numrows($result); 
0

如前所述,問題在於PHP腳本在服務器上運行,而JS在瀏覽器中運行「實時」。儘管你可以很輕鬆地達到目標。

這個想法是,你將AJAX調用綁定到onchange事件。我建議使用jQuery。

JS

$('#cmbStatus').change(function() { 
    $.post("script.php", { value: this.value }); 
    $('#textfield').val(this.value); 
}); 

的script.php

$query="SELECT * FROM incident_ticket where Status = '" . $_POST['value'] . "' "; 
$result=mysql_query($query); 
$num=mysql_numrows($result); 

與腳本的有效替換URL script.php。 我沒有測試它,所以你可能需要改變一些東西,但我想你會明白。

1

要做到這一點的唯一方法是使用AJAX(或類似的,但與其他數據封裝方法,如JSON),這是一個非常廣泛的主題。這裏要詳細解釋,但我會給出一個概述。

基本上AJAX(異步Javascript和XML)是一種通過使用XML編碼異步請求服務器信息的方式。顧名思義你將會使用Javascript。大多數瀏覽器中的Javascript API在這種需求中提供了對象XMLHttpRequest(或者舊版IE中的ActiveXObject)。所以讓我們創建一個新的對象:

ajax = new XMLHttpRequest(); 

此對象提供a few methods and fields,但我們只討論最重要的:open()send()onreadystatechangereadyStatestatusresponseXML。加載一個網頁(可以是任何東西,但通常這是xml或從PHP頁面生成xml,在你的例子中我們什麼都沒讀,但只是請求觸發一個PHP腳本),我們使用open()方法,就像這樣(只是一個例如):

ajax.open("GET", "some_php_file.php"); 

現在,我們已經建立了一個要求,我們可以把它:

ajax.send(); 

完成!這很可能會觸發你的PHP腳本,但如果我們想要做的正確,我們應該通過註冊(匿名)狀態更改函數(onreadystatechange字段)來檢查是否有任何錯誤。當請求機會(e.x.從LOADINGDONE

ajax.onreadystatechange = function() 
{ 
    if (ajax.readyState != 4 || ajax.status != 200) 
    { 
    // Do some error handling, like displaying a user visible error message or something 
    // The requested information is available as an XML object in the responseXML field 
    } 
} 

readyState = 4狀態意味着文件已經要求該功能將被觸發(狀態DONE)和statusHTTP response status code成功(200 OK)。

您也可以使用jQuery庫,它簡化了這個過程,但實現了基本相同的過程。

希望這會有所幫助!

+0

fyi,AJAX和JSON是完全不相關的主題^^ – moonwave99

+0

@ moonwave99是的,現在不清楚。當然,我的意思是使用JSON或XML(如在AJAX中)進行數據封裝。有時候談論使用AJAX的人實際上正在使用不同的數據封裝方法。對於任何特定的編碼,XMLHttpRequest對象不受限制,還可以使用CSV文件,純文本等。在Web環境中,AJAX已成爲異步數據請求的重疊術語(我認爲是因爲它的受歡迎程度和早期發病)。如果我錯了,請糾正我的錯誤;) – Jori