我有一个显示广告资源的页面。当库存变得有缺陷(或任何其他状态)时,我想从下拉列表中选择该选项,并相应地更新数据库而无需刷新页面。我一直在玩.ajax和jQuery,我觉得我很接近我不能让它工作得很好。
首先,这是填充下拉列表的代码。这段代码没有任何问题(在我的网站的其他地方使用)。虽然我会包括名称和身份用途
$myQuery2 = "SELECT InventoryItemStatus.InventoryItemStatusID, InventoryItemStatus.InventoryItemStatusDescription FROM InventoryItemStatus";
$myConnection = mysql_connect($myServer,$myUsername,$myPassword);
if (!$myConnection){
die('Conncetion Failed:' . mysql_error());
}
@mysql_select_db($myDatabase) or die("Unable to select database");
$result2 = mysql_query($myQuery2) or die (mysql_error());
if(mysql_num_rows($result2)){
$select2= '<select style="width:90px" id="StatusList" name="StatusList">';
$select2.='<option value="0.5"> --Status-- </option>';
while($rs=mysql_fetch_array($result2)){
$select2.='<option value="'.$rs['InventoryItemStatusID'].'">'.$rs['InventoryItemStatusDescription'].'</option>';
}
}
$select2.='</select>';
这是我正在使用的jQuery代码。 .change运行正常。 (如果我用警报替换$ .ajax方法,当我更改下拉列表时,它会提示弹出窗口)
<script type="text/javascript">
$(document).ready(function(){
$('[name="StatusList"]').change(function() {
var mydata = $('[name="StatusList"]').val();//$(this).val();
var inputdata = $('[name="StarmontInventoryItemID"]').val();
$.ajax({
type: 'POST',
url: 'update_status/update_starmont.php',
data: {StatusList:mydata ,StarmontInventoryItemID:inputdata}
});
});
});
</script>
这是我的PHP代码中包含的表单。这包括一个隐藏字段,其中包含我想要更改其状态的库存项目的唯一ID,以及下拉菜单。
<form method='post'>
{$select2}
<input type='hidden' value='{$row14['InventoryItemID']}' name='StarmontInventoryItemID' id='StarmontInventoryItemID'/>
</form>
这是在更改时调用的php脚本。我认为这是我没有正确使用的部分。我不清楚数据如何传递给这个脚本。我无法弄清楚它是否在$ _POST变量中传递。
include_once('../../../php/common.php');
include_once('../../../php/db.php');
$InventoryItemID = $_POST['StarmontInventoryItemID'];
//$InventoryItemStatusID = $_POST['StatusList'];
mysql_query("UPDATE InventoryItem SET InventoryItemStatusID = 2 WHERE InventoryItemID = '$InventoryItemID'") or die (mysql_error());
如您所见,我只是尝试将库存项目ID传递给脚本,并将该项目更新为状态“2”。我的最终结果是将其更新为下拉菜单的值,但我确信如果我能让这部分工作,我可以弄清楚其余部分。
提前感谢您的帮助! Bonnejournée!
修改
非常感谢你。不幸的是,我遇到了另一个问题。例如,我有10个库存物品。我做复杂的查询来检索数组中所需的所有信息,然后我做一个foreach。看起来顶部的库存项目正确地更新状态,但是它下面的任何项目都不会执行sql查询以进行更新。
if (sizeof($rows14) > 0) {
foreach($rows14 as $row14):
$query17 = "
SELECT
SystemID,
Serial
FROM
Device
WHERE
Device.InventoryItemID = :InventoryItemID
";
$query_params17 = array(
':InventoryItemID' => $row14['InventoryItemID']
);
try {
$stmt17 = $db->prepare($query17);
$stmt17->execute($query_params17);
}
catch(PDOException $ex) {
die("Failed to run query: " . $ex->getMessage());
}
$row17 = $stmt17->fetch();
$myQuery2 = "SELECT InventoryItemStatus.InventoryItemStatusID, InventoryItemStatus.InventoryItemStatusDescription FROM InventoryItemStatus";
$result2 = mysql_query($myQuery2) or die (mysql_error());
if(mysql_num_rows($result2)){
$select2= '<select style="width:90px" name="StatusList">';
while($rs=mysql_fetch_array($result2)){
if($rs['InventoryItemStatusID'] == $row14['Status']){
$select2.='<option value="'.$rs['InventoryItemStatusID'].'" selected="'.$row14['Status'].'">'.$rs['InventoryItemStatusDescription'].'</option>';
}
else{
$select2.='<option value="'.$rs['InventoryItemStatusID'].'">'.$rs['InventoryItemStatusDescription'].'</option>';
}
}
}
$select2.='</select>';
echo"
<tr class='tableRowClass2'>
<td height='20'>{$row14['OnHand']}</td>
<td height='20'>{$row14['ItemName']} - {$row17['SystemID']} - {$row17['Serial']}</td>
<td height='20'>
<form method='post'>
{$select2}
<input type='hidden' value='{$row14['InventoryItemID']}' name='StarmontInventoryItemID'/>
</form>
</td>
</tr>";
endforeach;
}
我尝试了多种不同的方法来使用它来处理所有库存项目。我不确定将它放在foreach循环中是否有效。再次感谢任何帮助!
答案 0 :(得分:2)
你必须编辑你的JS
$(document).ready(function(){
$("#StatusList").change(function() {
var mydata = $(this).val();
var inputdata = $("#StarmontInventoryItemID").val();
$.ajax({
type: 'POST',
url: 'update_status/update_starmont.php',
data: {StatusList:mydata ,StarmontInventoryItemID:inputdata }
});
});
});
在jquery中ajax cal数据桅杆是一张地图{myvar:myvalue},其中myvar就是你的PHP代码中的内容$ _POST ['myvar']
success: success
成功是如果你有一个成功的ajax调用就会执行的函数你可以像这样使用它
success: function(data) { console.log(data) ... }
答案 1 :(得分:1)
现在你将ajax调用中的值发送为一个简单的字符串,你希望它是一个键/值对。
改变这个:
data: mydata
对于这样的事情:
data: {'StarmontInventoryItemID' : mydata}
现在服务器端,您应该可以访问$_POST['StarmontInventoryItemID']
请注意,您始终可以print_r($_POST)
查看发布数据如何到达服务器端。
提交通知:您使用的是已弃用的mysql_*
方法,需要切换为mysqli_*
或PDO
。您的查询也不安全,并且可以使用SQL注入。