在onchange事件中运行php查询

时间:2014-02-05 10:14:31

标签: javascript php mysql

我是新手,我很难在javascript中构建mysql查询。想法是在下拉值更改时运行mysql查询。

以下是代码: 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);

6 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

唯一的方法是使用AJAX(或类似的,但使用其他数据封装方法,如JSON),这是一个非常广泛的主题。太详细,这里详细解释,但我会给出一个概述。

基本上,AJAX(异步Javascript和XML)是一种使用XML编码异步请求服务器信息的方法。顾名思义,您将使用Javascript。大多数浏览器中的Javascript API在此需求中提供XMLHttpRequest对象(或旧IE中的ActiveXObject)。所以让我们创建一个新对象:

ajax = new XMLHttpRequest();

此对象提供a few methods and fields,但我们只会讨论最重要的内容:open()send()onreadystatechangereadyState,{{1} }和status。要加载一个网页(可以是任何东西,但通常这是xml或从php页面生成的xml,在你的例子中我们什么都没读,只是请求触发PHP脚本)我们使用open()方法,比如这(仅举例):

responseXML

现在我们已经建立了一个我们可以发送的请求:

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

完成!这很可能会触发您的PHP脚本,但如果我们想要正确执行,我们应该通过注册(匿名)状态更改函数(ajax.send(); 字段)来检查是否存在任何错误。当请求机会的状态(e.x.从onreadystatechangeLOADING

时,将触发此功能
DONE

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为成功HTTP response status codestatus)。

您也可以使用jQuery库来简化此操作,但实现的过程基本相同。

希望这有帮助!

答案 2 :(得分:0)

当用户更改html页面上的下拉列表值时,您需要使用ajax来执行php代码。

答案 3 :(得分:0)

使用Ajax。你不能直接从Javascript运行MySQL。您可以做的是,在更改时,使用ajax将其传输到不同的PHP页面,您可以在其中运行SQL脚本

答案 4 :(得分:0)

使用ajax将值传输到php文件,并在更改选择值时在该php文件中执行查询

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


jQuery.post("runquery.php", {

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

},  function(data, textStatus){



});

});
{p}在runquery.php执行php代码,你想要改变选择值,就像这样

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

答案 5 :(得分: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);

script.php替换为脚本的有效网址。 我没有测试它,所以你可能需要改变一些东西,但我认为你会得到这个想法。