我是新手,我很难在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);
答案 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开放,这非常糟糕
请改用mysqli或PDO,并在查询中使用数据之前转义数据,或使用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()
,onreadystatechange
,readyState
,{{1} }和status
。要加载一个网页(可以是任何东西,但通常这是xml或从php页面生成的xml,在你的例子中我们什么都没读,只是请求触发PHP脚本)我们使用open()
方法,比如这(仅举例):
responseXML
现在我们已经建立了一个我们可以发送的请求:
ajax.open("GET", "some_php_file.php");
完成!这很可能会触发您的PHP脚本,但如果我们想要正确执行,我们应该通过注册(匿名)状态更改函数(ajax.send();
字段)来检查是否存在任何错误。当请求机会的状态(e.x.从onreadystatechange
到LOADING
)
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 code(status
)。
您也可以使用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
替换为脚本的有效网址。
我没有测试它,所以你可能需要改变一些东西,但我认为你会得到这个想法。