【问题标题】:Dynamically update user selection using using ajax使用 ajax 动态更新用户选择
【发布时间】:2015-07-13 21:17:53
【问题描述】:

我需要有关此代码的帮助。如果请求的库存项目(数据库)小于他的请求(数量),我想动态禁止用户添加到购物车。将不胜感激,如果我能知道我错在哪里并且可能有人为我纠正它。

HTML 表单

<form action="cart.php?adm_id=<?php echo urlencode($patient["adm_id"]);?>" method="post" name="CartForm" target="_self">
<p>Product Name:<select name="prod_name" size="1" id="prod_name">
<option value="Select">Select</option>
<?php
while ($line = mysqli_fetch_array($query, MYSQL_ASSOC)) { 
 ?>
<option value="<?php echo $line['prod_name'];?>"> <?php echo $line['prod_name'];?> </option>  
<?php } ?> 

</select></p>
<p>Quantity:<input  type="number" name="qty"   id="qty" size="30"  required="required"/></p>
<input name="submit" type="submit" value="Add to Cart" id="btn"/> | <input name="reset" type="reset" value="Cancel" />

Ajax 代码:

<script src="javascript/jquery-2.0.3.js">
</script>
<script type="text/javascript">
$(document).ready(function(ex) {
    //$('#stock').load('pharmacy_summary.php');
 $('#qty').change(function(){
var prod_name = $('#prod_name').val();
var qty= $('#qty').val();
$.ajax({
    url: 'confirmStock.php',
    data:{prod_name: prod_name, qty: qty},
    success: function(e){
        if(e == 'true'){
            /*if the quantity is greater than the stock*/
            alert('stock Item is lower to your request, reduce it');
            $('#btn').prop('disabled', true);
        }else{
            $('#btn').prop('disabled', false);
        }    }
})});    
});
</script>

PHP/MYSQLI 代码:(ConfirmStock.php)

<?php require_once("/includes/db_connection.php");?> 
<?php require_once("/includes/functions.php");?> 
<?php 
if(isset($_GET['prod_name'])){

  $getProd = $_GET['prod_name']; 
  $getQty = $_GET['units'];

 global $connection;
  $val = "SELECT * FROM pharmacy_stock_tab WHERE prod_name='".$getProd."'";
   $conf = mysqli_query($connection,$val); 
   $fetchVal = mysqli_fetch_array($conf);
   $stock = $fetchVal['units']; 
   if($getQty>$stock){
    return $stock;
   }else{
   return  $stock;
   }

 }

?>

【问题讨论】:

  • 一方面MYSQL_ASSOC 必须是MYSQLI_ASSOC - 你在混合API。
  • 那么在您的cart.php?adm_id 中,您正在执行 GET 方法,但除了混合 GET 和 POST 之外,没有任何匹配的方法。 if(isset($_GET['prod_name'])){ 应该是 if(isset($_GET['adm_id'])){
  • 你的代码有什么问题?
  • @Fred,谢谢,cart.php?adm_id 已从顶部发送。我只是没有将它包括在问题中。 $患者= find_patients_by_id($_GET["adm_id"]);但是,这不是问题,因为它在这方面工作得很好。此外,它应该读取 isset prod_name 而不是 adm_id。原因是这样的:当用户选择产品名称并继续选择数量时,我希望能够将该数量与数据库中该产品名称的总数量进行比较。如果选择的数量大于 DB(total)qty,则触发警报并禁用 btn 添加到购物车,否则成功添加。期间
  • 好的。好吧,有人在下面为您提供了答案; 试一试 ;-)

标签: php ajax mysqli


【解决方案1】:

您必须更改发送响应的方式和处理响应的方式。更改 ConfirmStock.php 中的代码 按以下方式更改返回语句

$result = array();
if($getQty>$stock){
   $result['success'] = 'true';
   $result['stock'] = $stock;
 }else{
$result['success'] = 'false';
}
header('Content-Type: application/json');
echo json_encode($result);
die();

Ajax中成功方法

   success: function(response){

    if(response.success == 'true'){
        /*if the quantity is greater than the stock*/
        alert('stock Item is lower to your request, reduce it');
        $('#btn').prop('disabled', true);
    }else{
        $('#btn').prop('disabled', false);
    }    }

【讨论】:

  • 我试了一下。但用户的扩展量超过了数据库数量,以至于数据库数量现在显示 -value。有什么进一步的帮助吗?
  • 任何进一步的帮助,我想要这个任务的解决方案,我已经完成了你的建议但没有工作。
  • 你得到了什么响应,你用 alert(JSON.stringify(response)) 之类的成功方法提醒响应;
猜你喜欢
  • 1970-01-01
  • 2020-06-16
  • 2014-03-31
  • 1970-01-01
  • 2015-07-08
  • 1970-01-01
  • 2017-09-20
  • 2015-01-19
  • 2013-01-25
相关资源
最近更新 更多