如何使用一个按钮处理两个 ajax 函数以将变量传递给 php 形式



我有两个javascript函数,用于传递两个不同的变量.第一个javascript是传递下拉列表中的区域,第二个是传递第二个下拉列表中的名称。现在我想在一个按钮提交中完成它。下面是我的代码,它部分有效。当我将值传递给php时,它会运行两到三次以获得结果,并得到错误的结果。我的 ajax 或 sql 查询有什么问题吗?

$(function() { 
	 $('#form').submit(function(e) { 
e.preventDefault();
		var id=$(".area").val();
		var dataString = 'id='+ id;
$.ajax({
type        : 'POST',
url         : 'LeaveRecord1.php',
data        : dataString,
})
.done(function(data) {
$('.results').html(data);    
})
});
}); 
$(function() { 
	 $('#form').submit(function(e) { 
e.preventDefault();
	  	var idd=$(".slct2").val();
		var dataStringg = 'idd='+ idd;

$.ajax({
type        : 'POST',
url         : 'LeaveRecord1.php',
data        : dataStringg,
})
.done(function(data) {
$('.results').html(data);    
})
});
});
<td><input type="submit"   name="report" class="report" id="report" onClick=" myFunction();"></td>

用于捕获值的 PHP 文件

$poarr =Array();
if (isset($_POST['id'])) {
$sarea=$_POST['id'];
$sql = "SELECT tblLeaveHeader.RefNo, tblLeaveHeader.StaffId, tblLeaveHeader.Branch, tblLeaveHeader.Remark, tblLeaveHeader.Createby, tblLeaveHeader.Approvedd, tblLeaveHeader.Approveby, tblLeaveHeader.AreaCode
FROM tblLeaveHeader INNER JOIN tblStaff ON tblLeaveHeader.AreaCode = tblStaff.AreaCode AND tblLeaveHeader.StaffId = tblStaff.StaffId WHERE (tblLeaveHeader.AreaCode = '$sarea')";
};

if (isset($_POST['idd'])) {
$suser=strtoupper($_POST['idd']);
$sql = "SELECT tblLeaveHeader.RefNo, tblLeaveHeader.StaffId, tblLeaveHeader.Branch, tblLeaveHeader.AreaCode, tblLeaveHeader.Remark, tblLeaveHeader.Createdd, tblLeaveHeader.Createby, 
tblStaff.StaffName FROM tblLeaveHeader INNER JOIN tblStaff ON tblLeaveHeader.StaffId = tblStaff.StaffId AND tblLeaveHeader.AreaCode = tblStaff.AreaCode WHERE (tblStaff.StaffName = '$suser')";
};
$link = odbc_connect(DB_HSATTEND, DB_USER, DB_PASS);
$res = odbc_exec($link,$sql); 
while ($row = odbc_fetch_array($res)) {
$poarr[] = $row;
} 
odbc_free_result($res);
odbc_close($link); 

这是我的版本。根据我从您的解释中了解到的情况,应适用以下原则:

  • 如果未选择组合框值,则显示警报:"请选择一个值"。
  • 。否则,如果在组合框".areas"中仅选择了区域,则仅发布选定的区域值。
  • 否则(例如,如果在组合框".names"中选择了名称(,则仅发布所选名称值。

如果你真的有别的意思,那么请考虑一下,用更好的解释重新编辑你的问题。

请仔细阅读所有代码,因为我应用了我发现更好的名称和 ID。另请注意,我在 ajax 中使用了return false,不再使用preventDefault()了。此外,您的数据库代码缺少两个基本元素:

  • 预准备语句 - 避免 MySQL 注入。
  • 异常处理 - 捕获 PHP 代码中可能引发的所有异常。

有关预准备语句 + 异常处理(使用 mysqli(的完整示例,请参阅 THIS。你真的不想在没有他们的情况下继续编程;-(

索引.php(带表格(:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Test</title>
<script src="https://code.jquery.com/jquery-3.2.1.min.js" type="text/javascript" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" crossorigin="anonymous"></script>
<script src="index.js" type="text/javascript"></script>
</head>
<body>
<form id="form" name="form" action="" method="post">
<select id="area" name="area" class="area">
<option value="">- Select area -</option>
<option value="123">Area 1</option>
<option value="456">Area 2</option>
<option value="789">Area 3</option>
</select>
<select id="slct2" name="slct2" class="slct2">
<option value="">- Select name -</option>
<option value="John">John</option>
<option value="Smith">Smith</option>
<option value="Mikaela">Mikaela</option>
</select>
<input type="submit" name="report" class="report" id="report">
</form>
<br/><br/>
<div class="results">
Here comes the results...
</div>
</body>
</html>

index.js (使用 ajax(:

$(document).ready(function () {
$('#form').submit(function (e) {
var areaCode = $(".area").val();
var staffName = $(".slct2").val();
var data = {};
if (areaCode === '' && staffName === '') {
alert('Please choose a value from selects!');
return false;
} else if (areaCode !== '' && staffName === '') {
data.areaCode = areaCode;
} else {
data.staffName = staffName;
}
var ajax = $.ajax({
method: 'post',
dataType: 'html',
url: 'LeaveRecord1.php',
data: data
});
ajax.done(function (response, textStatus, jqXHR) {
$('.results').html(response);
});
ajax.fail(function (jqXHR, textStatus, errorThrown) {
$('.results').html(textStatus + '<br />' + errorThrown);
});
ajax.always(function (response, textStatus, jqXHR) {
//...
});
return false;
});
});

LeaveRecord1.php(处理表单值的位置(:

<?php
$poarr = array();
if (isset($_POST['areaCode'])) {
$areaCode = $_POST['areaCode'];
$sql = "SELECT 
tblLeaveHeader.RefNo,
tblLeaveHeader.StaffId,
tblLeaveHeader.Branch,
tblLeaveHeader.Remark,
tblLeaveHeader.Createby,
tblLeaveHeader.Approvedd,
tblLeaveHeader.Approveby,
tblLeaveHeader.AreaCode 
FROM tblLeaveHeader 
INNER JOIN tblStaff ON 
tblLeaveHeader.AreaCode = tblStaff.AreaCode 
AND tblLeaveHeader.StaffId = tblStaff.StaffId 
WHERE tblLeaveHeader.AreaCode = '" . $areaCode . "'";
} elseif (isset($_POST['staffName'])) {
$staffName = strtoupper($_POST['staffName']);
$sql = "SELECT 
tblLeaveHeader.RefNo,
tblLeaveHeader.StaffId,
tblLeaveHeader.Branch,
tblLeaveHeader.AreaCode,
tblLeaveHeader.Remark,
tblLeaveHeader.Createdd,
tblLeaveHeader.Createby,
tblStaff.StaffName 
FROM tblLeaveHeader 
INNER JOIN tblStaff ON 
tblLeaveHeader.StaffId = tblStaff.StaffId 
AND tblLeaveHeader.AreaCode = tblStaff.AreaCode 
WHERE tblStaff.StaffName = '" . $staffName . "'";
}
$link = odbc_connect(DB_HSATTEND, MYSQL_USERNAME, MYSQL_PASSWORD);
while ($res = odbc_exec($link, $sql)) {
do {
while ($row = odbc_fetch_array($res)) {
$poarr[] = $row;
}
odbc_free_result($res);
} while (odbc_next_result($res));
}
odbc_close($link);
if (count($poarr) > 0) {
echo '<pre>' . print_r($poarr, TRUE) . '</pre>';
} else {
echo 'There are some errors somewhere :-(';
}

你可以使用以下ajax,但你必须根据这个重写你的php和sql。

$(function() { 
$('#form').submit(function(e) { 
e.preventDefault();
var id=$(".area").val();
var idd=$(".slct2").val();
var dataString = 'id='+ id+'&idd='+idd;
$.ajax({
type    : 'POST',
url     : 'LeaveRecord1.php',
data    :  dataString,
success : function(data) {
$('.results').html(data);    
},
});
});
}); 

你的PHP代码应该是

<?php
$poarr =Array();
$empty = false;
if (isset($_POST['id'])) {
$sarea=$_POST['id'];
$sql = "SELECT tblLeaveHeader.RefNo, tblLeaveHeader.StaffId, tblLeaveHeader.Branch, tblLeaveHeader.Remark, tblLeaveHeader.Createby, tblLeaveHeader.Approvedd, tblLeaveHeader.Approveby, tblLeaveHeader.AreaCode
FROM tblLeaveHeader INNER JOIN tblStaff ON tblLeaveHeader.AreaCode = tblStaff.AreaCode AND tblLeaveHeader.StaffId = tblStaff.StaffId WHERE (tblLeaveHeader.AreaCode = '$sarea')";
$link = odbc_connect(DB_HSATTEND, DB_USER, DB_PASS);
$res = odbc_exec($link,$sql); 
while ($row = odbc_fetch_array($res)) {
$poarr[] = $row;
$empty = true;
} 
odbc_free_result($res);
if($empty){
if (isset($_POST['idd'])) {
$suser=strtoupper($_POST['idd']);
$sql = "SELECT tblLeaveHeader.RefNo, tblLeaveHeader.StaffId, tblLeaveHeader.Branch, tblLeaveHeader.AreaCode, tblLeaveHeader.Remark, tblLeaveHeader.Createdd, tblLeaveHeader.Createby, tblStaff.StaffName FROM tblLeaveHeader INNER JOIN tblStaff ON tblLeaveHeader.StaffId = tblStaff.StaffId AND tblLeaveHeader.AreaCode = tblStaff.AreaCode WHERE (tblStaff.StaffName = '$suser')";
$res = odbc_exec($link,$sql); 
while ($row = odbc_fetch_array($res)) {
$poarr[] = $row;
} 
odbc_free_result($res);
}
}
odbc_close($link); 
}
?>

最新更新