javascript - 如何获取动态 $_POST 以将其与数据库进行比较
问题描述
我正在创建一个电子商务网站,我正在使用 minicart.js。
我想使用 PHP 将购物车产品包含到结帐页面,如何?
我尝试用 JS 来做,但我不太擅长,所以我需要演练,
我可以通过 $_POST['product_id_1'] 用 PHP 获取值,
问题是我想获得所有购物车中的产品,如果有 1000 个产品怎么办?
我发现它可以与 IN 一起使用,但我仍然需要编写 $product_cart_id = '(1,2,3...1000)';
那也不好,如果有更多怎么办?
我得到的最后一个想法是使用 $_POST['product_id_'.$i] 和 for 循环,
它工作并打印了购物车产品中
的所有值,最后一步是从数据库动态方式获取它们,
当我放入$_POST['product_id_'.$i]
var 和输入查询它说语法错误,
当我将 var 更改为$_POST['product_id_1']
IT WORKS ...
我需要使用 PHP 或 JS 来实现动态化(但我需要更多的 JS 帮助)
// the add to cart button form
<form action="#" method="post">
<input type="hidden" name="cmd" value="_cart">
<input type="hidden" name="add" value="{$row['product_id']}">
<input type="hidden" name="item" value="{$row['product_title']}">
<input type="hidden" name="amount" value="{$row['product_price']}">
<button type="submit" class="cart product-cart">
<i class="fas fa-cart-plus"></i>
</button>
</form>
// btw its the same result without the escape, fetch_array and query function all good and working TESTED
//>>> FUNCTIONS just in case <<<//
function confirm($result) {
global $conn;
if(!$result) {
die("QUERY FAILED . " .mysqli_error($conn));
}
}
function escape($string) {
global $conn;
return mysqli_real_escape_string($conn, $string);
}
function query($sql){
global $conn;
$result = mysqli_query($conn, $sql);
confirm($result);
return $result;
}
function fetch_array($result) {
return mysqli_fetch_array($result);
}
//>>> FUNCTIONS END <<<//
for ($i=1; $i <= 10000; $i++):
$product_cart_quantity = $_POST['quantity_'.$i]; // works with echo
// NOT working way but GOOD
$product_cart_id = $_POST['product_id_'.$i]; // works with echo
$result = query("SELECT * FROM products WHERE product_id =".escape($product_cart_id)."");
// working way but BAD
$product_cart_id = '(1,2,3)'; // works with database comparation but I cant write 1000 product in hands right?
$result = query("SELECT * FROM products WHERE product_id IN".escape($product_cart_id)."");
endfor;
while($row = fetch_array($result)):
echo "<br>".$row['product_title'];
endwhile;
这张图片显示了表单上由 minicart.js 生成的名称,我可以通过 echo 在页面上获取输出
我想将它们存储在 var 中以从数据库中获取内容...
// this is cart module in minicart.js
module.exports = Cart;
},{"./constants":11,"./product":13,"./util/currency":15,"./util/mixin":18,"./util/pubsub":19,"./util/storage":20}],10:[function(require,module,exports){
'use strict';
var mixin = require('./util/mixin');
var defaults = module.exports = {
name: 'staplesbmincart',
parent: (typeof document !== 'undefined') ? document.body : null,
action: 'checkout.php',
target: '',
duration: 30,
// template: '<%var items = cart.items();var settings = cart.settings();var hasItems = !!items.length;var priceFormat = { format: true, currency: cart.settings("currency_code") };var totalFormat = { format: true, showCode: true };%><form method="post" class="<% if (!hasItems) { %>sbmincart-empty<% } %>" action="<%= config.action %>" target="<%= config.target %>"> <button type="button" class="sbmincart-closer">×</button> <ul> <% for (var i= 0, idx = i + 1, len = items.length; i < len; i++, idx++) { %> <li class="sbmincart-item"> <div class="sbmincart-details-name"> <a class="sbmincart-name" href="<%= items[i].get("href") %>"><%= items[i].get("googles_item") %></a> <ul class="sbmincart-attributes"> <% if (items[i].get("item_number")) { %> <li> <%= items[i].get("item_number") %> <input type="hidden" name="item_number_<%= idx %>" value="<%= items[i].get("item_number") %>" /> </li> <% } %> <% if (items[i].discount()) { %> <li> <%= config.strings.discount %> <%= items[i].discount(priceFormat) %> <input type="hidden" name="discount_amount_<%= idx %>" value="<%= items[i].discount() %>" /> </li> <% } %> <% for (var options = items[i].options(), j = 0, len2 = options.length; j < len2; j++) { %> <li> <%= options[j].key %>: <%= options[j].value %> <input type="hidden" name="on<%= j %>_<%= idx %>" value="<%= options[j].key %>" /> <input type="hidden" name="os<%= j %>_<%= idx %>" value="<%= options[j].value %>" /> </li> <% } %> </ul> </div> <div class="sbmincart-details-quantity"> <input class="sbmincart-quantity" data-sbmincart-idx="<%= i %>" name="quantity_<%= idx %>" type="text" pattern="[0-9]*" value="<%= items[i].get("quantity") %>" autocomplete="off" /> </div> <div class="sbmincart-details-remove"> <button type="button" class="sbmincart-remove" data-sbmincart-idx="<%= i %>">×</button> </div> <div class="sbmincart-details-price"> <span class="sbmincart-price"><%= items[i].total(priceFormat) %></span> </div> <input type="hidden" name="product_id_<%= idx %>" value="<%= items[i].get("product_id") %>" /> <input type="hidden" name="googles_item_<%= idx %>" value="<%= items[i].get("googles_item") %>" /> <input type="hidden" name="amount_<%= idx %>" value="<%= items[i].amount() %>" /> <input type="hidden" name="shipping_<%= idx %>" value="<%= items[i].get("shipping") %>" /> <input type="hidden" name="shipping2_<%= idx %>" value="<%= items[i].get("shipping2") %>" /> </li> <% } %> </ul> <div class="sbmincart-footer"> <% if (hasItems) { %> <div class="sbmincart-subtotal"> <%= config.strings.subtotal %> <%= cart.total(totalFormat) %> </div> <button class="sbmincart-submit" type="submit" data-sbmincart-alt="<%= config.strings.buttonAlt %>"><%- config.strings.button %></button> <% } else { %> <p class="sbmincart-empty-text"><%= config.strings.empty %></p> <% } %> </div> <input type="hidden" name="cmd" value="_cart" /> <input type="hidden" name="upload" value="1" /> <% for (var key in settings) { %> <input type="hidden" name="<%= key %>" value="<%= settings[key] %>" /> <% } %></form>',
template: '<%var items = cart.items();var settings = cart.settings();var hasItems = !!items.length;var priceFormat = { format: true, currency: cart.settings("currency_code") };var totalFormat = { format: true, showCode: true };%><form method="post" class="<% if (!hasItems) { %>sbmincart-empty<% } %>" action="<%= config.action %>" target="<%= config.target %>"> <button type="button" class="sbmincart-closer">×</button> <ul> <% for (var i= 0, idx = i + 1, len = items.length; i < len; i++, idx++) { %> <li class="sbmincart-item"> <div class="sbmincart-details-name"> <a class="sbmincart-name" href="<%= items[i].get("href") %>"><%= items[i].get("googles_item") %></a> <ul class="sbmincart-attributes"> <% if (items[i].get("item_number")) { %> <li> <%= items[i].get("item_number") %> <input type="hidden" name="item_number_<%= idx %>" value="<%= items[i].get("item_number") %>" /> </li> <% } %> <% if (items[i].discount()) { %> <li> <%= config.strings.discount %> <%= items[i].discount(priceFormat) %> <input type="hidden" name="discount_amount_<%= idx %>" value="<%= items[i].discount() %>" /> </li> <% } %> <% for (var options = items[i].options(), j = 0, len2 = options.length; j < len2; j++) { %> <li> <%= options[j].key %>: <%= options[j].value %> <input type="hidden" name="on<%= j %>_<%= idx %>" value="<%= options[j].key %>" /> <input type="hidden" name="os<%= j %>_<%= idx %>" value="<%= options[j].value %>" /> </li> <% } %> </ul> </div> <div class="sbmincart-details-quantity"> <input class="sbmincart-quantity" data-sbmincart-idx="<%= i %>" name="quantity_<%= idx %>" type="text" pattern="[0-9]*" value="<%= items[i].get("quantity") %>" autocomplete="off" /> </div> <div class="sbmincart-details-remove"> <button type="button" class="sbmincart-remove" data-sbmincart-idx="<%= i %>">×</button> </div> <div class="sbmincart-details-price"> <span class="sbmincart-price"><%= items[i].total(priceFormat) %></span> </div> <input type="hidden" name="product_id_<%= idx %>" value="<%= items[i].get("product_id") %>" /> <input type="hidden" name="googles_item_<%= idx %>" value="<%= items[i].get("googles_item") %>" /> <input type="hidden" name="amount_<%= idx %>" value="<%= items[i].amount() %>" /> <input type="hidden" name="shipping_<%= idx %>" value="<%= items[i].get("shipping") %>" /> <input type="hidden" name="shipping2_<%= idx %>" value="<%= items[i].get("shipping2") %>" /> </li> <% } %> </ul> <div class="sbmincart-footer"> <% if (hasItems) { %> <div class="sbmincart-subtotal"> <%= config.strings.subtotal %> <%= cart.total(totalFormat) %> </div> <button class="sbmincart-submit" type="submit" data-sbmincart-alt="<%= config.strings.buttonAlt %>"><%- config.strings.button %></button> <% } else { %> <p class="sbmincart-empty-text"><%= config.strings.empty %></p> <% } %> </div> <input type="hidden" name="cmd" value="_cart" /> <input type="hidden" name="upload" value="1" /> <% for (var key in settings) { %> <input type="hidden" name="<%= key %>" value="<%= settings[key] %>" /> <% } %></form>',
styles: '',
strings: {
button: 'Check Out',
subtotal: 'Subtotal:',
discount: 'Discount:',
empty: 'Your shopping cart is empty'
}
};
我希望$_POST['produc_id_'.$i]
根据购物车中的产品进行动态查询
// $i = products in-cart
解决方案
嗨,你能告诉我你的场景吗,通过 Skype 或远程那里发生了什么。以便我可以适当地提供帮助。正如我正在寻找的那样
1)您必须在隐藏字段https://i.stack.imgur.com/ps0A6.png中获取产品的逗号分隔 product_id
2)当您提交表单时,您将必须作为隐藏字段 id 传递,如下所示:
select * from table where product_id in ($_POST[product_id])。希望您的问题能够得到解决。
3)否则,如果您远程与我同行,则可以使用其他解决方案。
推荐阅读
- python - 我需要在我的代码中更改什么以获得这样的输出 [None, 2, None, 4,None]。我正在使用 lambd 函数来执行此操作
- xamarin.ios - 更改所有应用程序 Xamarin iOS 的 UIView 大小
- php - 从 Woocommerce 产品页面中删除指向单个页面的链接
- apache - 来自 Nginx 访问日志的数据流 -> Rsyslog 或 Syslog -> Fluentd -> Kinesis
- django - 在 Django Rest 中覆盖 get 方法时出错
- html - 图像左侧有额外的空白区域。任何事情都有帮助
- gradle - 升级到 gradle-5 后,war 文件很大
- casting - 将 int 转换为 xquery 中对应的 ascii
- javascript - MSEdge 浏览器中 canvas.toBlob() 的兼容性
- reactjs - 如何在 ag 网格自定义单元格编辑器中按下箭头键和输入键时做出 event.stopPropagation() 以反应选择输入字段