根据表单输入从SQL数据库中提取数据
Pulling data from SQL database depending on form input
我正在制作一个表单,其中更改一个"选择"元素修改另一个"选择"元素的值。这两个元素的值都来自MSSQL数据库。实现这一功能的代码的最佳方法是什么?
我能想到有两种方法来做这件事。
-
将表存储到一个javascript变量中,并使第一个元素的onchange事件修改第二个元素。
-
发送一个GET请求到页面并重新加载它,使用PHP修改第二个元素
我不喜欢第一种方法,因为将数据库从PHP端存储到javascript端似乎有点粗糙,而且非常麻烦。我也不喜欢第二种方式,因为重新加载页面会破坏用户体验,让他不得不再次向下滚动。
您应该使用AJAX来拉入数据并填充第二个选择元素。简而言之,AJAX只是在幕后发生的单独的页面请求。您可以使用它来加载一个简单的HTML页面或部分,并在DOM元素中显示它,或者您可以使用它来动态检索结构化数据。
最好的方法是使用JSON (JavaScript Object Notation)。在这种情况下,您将使用Javascript对PHP页面进行AJAX调用,该PHP页面将在表示第一个选择元素的值的查询字符串中接受一个参数。这样,您就可以调用MSSQL数据库来获取第二个选择的所有相应选项,然后将这些选项回显出来。反过来,用于发出AJAX请求的Javascript可以解析响应并将其解释为Javascript对象文字,从而允许您循环遍历结果并对它们执行所需操作。这里有一个例子(我使用jQuery,因为它使AJAX非常简单)。
在表单页面的顶部:
$(document).ready(function() {
$('#select1').change(function() {
var select1val = $(this).val();
$.getJSON('/path/to/response.php', 'select1=' + select1val, function(response) {
$('#select2').empty();
if(response) {
for(var option in response) {
$('<option/>').val(option.value).html(option.label).appendTo($('#select2'));
}
}
});
});
});
然后你的response。php页面应该是这样的:
<?php
$select1 = $_GET['select1'];
// Do validation here, to make sure it's a legitimate value for select1. Never trust the
// user input directly.
// Replace this with whatever code you use to make DB queries.
$options = $mydb->query("SELECT value,label FROM select2_options WHERE select1_value=?", $select1);
echo json_encode($options);
如果不想重新加载页面,请使用Ajax
。阅读更多关于AJAX的信息
$('#select1').change(function() {
var value = $(this).val();
var dataString = 'id='+ value;
if(value != '')
{
$.ajax({
type: "POST",
url: "fetchOptionsForSelect2.php",
data: dataString,
success: function(html) {
$('#select2').html(html);
}
});
}
else
{
//reset select2
$('#select2').html("<option value=''>Select value from select1 first</option>");
}
});
这是一个独立的示例,可以满足您的要求。乍一看可能很复杂,但通过jQuery的AJAX是相当直接的。
这个例子使用了两个文件:
1) TEST.PHP -包含javascript/AJAX,和HTML与<select>
控件
2) PROCESS.PHP -接收来自test.php的数据(通过AJAX),对该数据运行MySQL查找,将HTML返回给test.php
TEST.PHP
<html>
<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$("#workers").change(function(event) {
var w = $(this).val();
//alert('Value of w is: ' + w);
//return false;
$.ajax({
type: "POST",
url: "process.php",
data: 'worker=' + w,
success:function(data){
//alert(data);
$('#laDiv').html(data);
}
}); //END ajax
});
}); //END $(document).ready()
</script>
</head>
<body>
Worker:
<select id="workers">
<option>Roy</option>
<option>John</option>
<option>Dave</option>
</select>
<div id="laDiv"></div>
</body>
</html>
PROCESS.PHP
<?php
$w = $_POST['worker'];
$ret = '
Fruit Options:
<select id="fruitopts" name="Select2">
';
if ($w == 'Roy'){
$ret .= '
<option>Apples</option>
<option>Oranges</option>
<option>Pears</option>
';
}else if ($w == 'John') {
$ret .= '
<option>Peaches</option>
<option>Grapes</option>
<option>Melons</option>
';
}else if ($w == 'Dave') {
$ret .= '
<option>Nut</option>
<option>Jelly</option>
';
}
$ret .= '</select>';
echo $ret;
结果如下:
。TEST.PHP -用户从下拉菜单中选择"workers"
B. change()事件触发,获取("w")的值,并将其发送给process.php
c. PROCESS.PHP在$_POST[]
数组中接收一个名为w
的变量键,存储在$w
d. PROCESS.PHP对选定的worker ($w
的值)进行MySQL查找
PROCESS.PHP在一个名为$ret的变量中构造一些HTML,然后将其返回
f. TEST.PHP接收$中HTML字符串。Ajax成功函数
g. TEST.PHP调用接收到的数据data
(-1表示原创性)
h. TEST.PHP将收到的HTML注入id=" laddiv "的DIV
希望对你有帮助。
使用http://www.appelsiini.net/projects/chained
<script src="jquery.chained.min.js"></script>
<select id="mark" name="mark">
<?php
foreach($select1_opt as $opt)
{
echo "<option value=$opt>$opt</option>";
}
?>
</select>
<select id="series" name="series">
<?php
foreach($select2_opt as $opt)
{
echo "<option value=$opt>$opt</option>";
}
?>
</select>
- 如何从重定向的支付处理器网站提取交易详细信息并保存到我的rails 4数据库
- 使用javascript、jquery和PHP自动完成从数据库中提取城市的输入
- React组件从Flux存储中呈现数据,但从Mongo数据库中提取数据时不呈现
- 如何获得要渲染的字符实体(PHP从数据库中提取以在Fullcalendar中显示)
- 如何将从数据库中提取的数字传递到javascript数据部分
- 单击时从数据库中提取数据
- 什么可能导致 MVC 应用在从数据库中提取后无法在 IE 中显示当前信息
- Chrome扩展程序:在后台提取数据并存储在数据库中
- 将事件从数据库提取到完整日历中
- 如何从我的 MySQL 数据库中提取数据以在页面加载时预填充表单
- 从 API 中提取信息并将其添加到数据库(平均堆栈)
- Ajax,PHP,Javascript在组合框选择后从数据库中提取值
- 从字符串中提取信息并将其保存到数据库
- 如何使用PHP从数据库中提取数据并将其传递给Javascript
- 以ng重复从数据库中提取的项目的相反顺序
- googlemapsv3切换从SQL数据库提取的标记的可拖动属性
- 需要帮助自动建议显示(以列表形式)从数据库中提取/匹配的数据
- 需要使用Java脚本从数据库中提取算术和逻辑运算符
- 用Javascript自动创建从数据库中提取的对象
- 使用PEAR从数据库提取的Excel文件中的前导零