【问题标题】:How to get dynamic $_POST to compare it to database如何获取动态 $_POST 以将其与数据库进行比较
【发布时间】:2019-11-01 20:31:57
【问题描述】:

我正在创建一个电子商务网站,我正在使用 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'] 它可以工作...

我需要使用 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;

This image show the names generated by minicart.js on the form, AND I CAN get the output on the page with echo

and this image that i echo the product title with it

我想将它们存储在 var 中以从 db 中获取内容...

// 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">&times;</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 %>">&times;</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">&times;</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 %>">&times;</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 = 购物车中的产品

【问题讨论】:

  • 您是否通过表单获得这些$_POST['product_id_'.$i]
  • 是的,它在添加到购物车按钮中形成
  • 我在您的表单中没有看到name=product_id_1
  • 我暂时不关心sql注入,stmt只在最后一步
  • Carl Binalla,我为你添加了我现在拍的照片

标签: javascript php arrays mysqli minicart


【解决方案1】:

您好,您可以通过 Skype 或远程向我展示您的场景吗?以便我可以适当地提供帮助。 正如我所期待的那样

1) 您必须在隐藏字段https://i.stack.imgur.com/ps0A6.png 中获取产品的逗号分隔 product_id

2) 当您提交表单时,您将必须作为隐藏字段 id 传递,如下所示:

从表中选择 *,其中 product_id 在 ($_POST[product_id])。希望您的问题能够得到解决。

3) 如果你和我一起远程,其他解决方案。

【讨论】:

  • 非常感谢我已经面临这个问题 2 天了,如何通过 Skype 联系 tou? (如果不是给你带来麻烦)
  • 这是我的 Skype 名字 live:xcypherz1998
猜你喜欢
  • 2020-08-15
  • 1970-01-01
  • 1970-01-01
  • 2013-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-07
相关资源
最近更新 更多