【问题标题】:PHP - Show box for each productPHP - 每个产品的显示框
【发布时间】:2018-01-22 02:04:26
【问题描述】:

我正在尝试为每种产品显示以下框之一:(Image here)。但是当我在数据库中添加另一个产品时,它似乎没有为我的产品页面添加另一个视图。 Here 你看到了我的数据库,但我的产品页面上只有一张图片。该页面看起来与上面发布的第一张图片相同。如果有人知道为什么我的产品没有显示每个产品,只有第一个产品,请告诉我。 我知道我的代码不安全,不整洁。在我完成这项工作后我会这样做,所以不要以此评判我。只有我问的问题。谢谢。

我的 PHP 代码都在我在 div 容器中调用的这个函数中:

function grabProducts($con) {

    ?>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <div class="col-md-12" id="please_wait">
        <div class="panel panel-warning">
            <div class="panel-heading">
                <h3 class="panel-title"><i>Loading, Please Wait...</i></h3>
            </div>
            <div class="panel-body">

            </div>
        </div>
    </div>
    <script>
    $(document).ready(function() {
        $('#please_wait').fadeOut(7000);
        $('#content_purchase').hide(0).delay(5000).fadeIn("slow");
    });
    </script>
    <?php

    $users = $this->grabUserInfos($con);
    foreach ($users as $user) {
        $username = $user[1];
        $email = $user[3];
    }

    $site_config = new site_config();
    $member_config = new member_config();

    $result = mysqli_query($con, "SELECT * FROM products");
    $count = mysqli_num_rows($result);

    $site_callback = $site_config->grabSiteSettings_manual($con, 'site_url').'/pizza/includes/checkout.php';
    $site_return_success = $site_config->grabSiteSettings_manual($con, 'site_url').'/pizza/products.php?status=complete';
    $site_return_canceled = $site_config->grabSiteSettings_manual($con, 'site_url').'/pizza/products.php?status=canceled';

    // See if there are any products in the database
    if ($count > 0) {

        // While loop for each product element
        while ($row = mysqli_fetch_array($result)) {
            $id = $row['id'];
            $name = $row['name'];
            $description = $row['description'];
            $picture = $row['picture_location'];
            $price = $row['price'];
            $stock_monitering = $row['stock_monitering'];
            //$stock = $row['stock'];

            // Count the number links in each product
            $product_count = mysqli_query($con, "SELECT COUNT(*) FROM ebook WHERE used_status = '0'");
            $row_product_count = mysqli_fetch_row($product_count);
            $count_product_stock = $row_product_count[0];
            $stock = $count_product_stock;

            $new_stock = $stock - 1;

            $getValidatedCheck_ = mysqli_query($con, "SELECT txn_id, hasValidated, item_name, amount, currency, payment_date FROM payment_logs WHERE userId = '$username' ORDER BY id DESC LIMIT 1");

            // Count the number of payment_logs that correspond to the logged in user
            $payment_log_count = mysqli_query($con, "SELECT COUNT(*) FROM payment_logs WHERE userId = '$username'");
            $row = mysqli_fetch_row($payment_log_count);
            $count_payment_logs = $row[0];

            $now = strtotime("-10 minutes");

            // If there are no transactions for that user show the products like normal
            if($count_payment_logs <= 0) {
                // If there is not enough stock, show out of stock
                if($stock <= 0) {
                    $display = "out_of_stock";
                } else if($stock > 0) {
                    $display = "show_products";
                }
            } else if($count_payment_logs >= 1) {

                // While loop for our successful payment_logs for each user
                while ($row = mysqli_fetch_array($getValidatedCheck_)) {                        
                    $txn_id = $row['txn_id'];
                    $validated_check = $row['hasValidated'];    
                    $item_name = $row['item_name'];
                    $item_price = $row['amount'];   
                    $item_currency = $row['currency'];
                    $payment_date = $row['payment_date'];

                    // If they've not already seen the success message, show them it now and update their hasValidated from 0 to 1 so they don't see it again
                    if ($validated_check == '0') {
                        // If stock monitering is on, update our stock to 1 less than we had before the purchase
                        if($stock_monitering == '1') {
                            mysqli_query($con, "UPDATE products SET stock = '$new_stock' WHERE name = '$name'");
                        }
                        $product_count = mysqli_query($con, "UPDATE ebook SET used_status = '1', assigned_to = '$username',  transaction_id = '$txn_id' WHERE used_status = '0'");
                        $display = "show_success";
                    } else {
                        if($stock <= 0) {
                            $display = "out_of_stock";
                        } else if($stock > 0) {
                            $display = "show_products";
                        }
                    }
                }
            }

    switch($display) {
        case "show_products":
            ?>
            <div class="col-md-3" id="content_purchase" style="display: none;">
                <div class="panel panel-danger">
                    <div class="panel-heading">
                        <h3 class="panel-title">Price: <i>$<?php echo $price; ?></i>
                            <div class="fRight" style="float: right;"><i><?php echo $name; ?></i> Stock
                                (<?php echo $stock; ?>)
                            </div>
                        </h3>
                    </div>
                    <center>
                        <div class="panel-body">
                            <img src="<?php echo $picture; ?>"
                                 style="width: 85%; height: 100px; margin: 15px 0px 15px 0px; border-radius: 5px; border: 2px solid #ED4949;">
                            <form name="paypal_form" action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="POST">
                                <input type="hidden" name="cmd" value="_xclick">
                                <input type="hidden" name="business" value="<?php echo $site_config->grabSiteSettings_manual($con, 'paypal_address'); ?>">
                                <input type="hidden" name="item_name" value="<?php echo $name; ?>">
                                <input type="hidden" name="item_number" value="<?php echo $id; ?>">
                                <input type="hidden" name="amount" value="<?php echo $price; ?>">
                                <input type="hidden" name="quantity" value="1">
                                <input type="hidden" name="currency_code" value="USD">
                                <input type="hidden" name="custom" value="username=<?php echo $username; ?>&product= <?php echo $name; ?>">
                                <input type="hidden" name="notify_url" value="<?php echo $site_callback; ?>">
                                <input type="hidden" name="return" value="<?php echo $site_return_success; ?>">
                                <input type="hidden" name="cancel_return" value="<?php echo $site_return_canceled; ?>">

                                <button type="submit" class="btn btn-danger"
                                        style="vertical-align : bottom; margin-bottom: 15px; display: block; width: 85%;">
                                    <i class="fa fa-paypal"></i>aypal
                                </button>
                                <form>
                        </div>
                    </center>
                </div>
            </div>
            ';
        break;
        case "show_success":
        ?>
        <div class="col-md-12" id="content_purchase" style="display: none;">
            <div class="panel panel-success">
                <div class="panel-heading">
                    <h3 class="panel-title"><i>PAYMENT SUCCESS!</i></h3>
                </div>
                <div class="panel-body">
                    <p>You've successfully purchased <i><?php echo $item_name; ?></i> for <i><?php echo $item_price; ?> <i><?php echo $item_currency; ?></i>. We have emailed you your receipt to <?php echo $email; ?>. You can click <a href="myFiles.php" style="color: white;">here</a> to download your purchased files.<br>Click <a href="<?php echo $url_path; ?>" style="color: white;">here</a> to purchase again.</p>
                </div>
            </div>
        </div>
        <?php
        mysqli_query($con, "UPDATE payment_logs SET hasValidated = '1' WHERE userId = '$username' ORDER BY id DESC LIMIT 1");
        break;
        case "no_products":
        ?>
        <div class="col-md-12" id="content_purchase" style="display: none;">
            <div class="panel panel-danger">
                <div class="panel-heading">
                    <h3 class="panel-title"><i>Currently No Products For Sale</i></h3>
                </div>
                <div class="panel-body">
                    <p>There are currently no products up for sale.</p>
                </div>
            </div>
        </div>
        <?php
        break;
        case "out_of_stock":
        ?>
            <div class="col-md-3" id="content_purchase" style="display: none;">
                <div class="panel panel-danger">
                    <div class="panel-heading">
                        <h3 class="panel-title">Price: <i>$<?php echo $price; ?></i>
                            <div class="fRight" style="float: right;"><i><?php echo $name; ?></i> Stock
                                (<?php echo $stock; ?>)
                            </div>
                        </h3>
                    </div>
                    <center>
                        <div class="panel-body">
                            <img src="<?php echo $picture; ?>"
                                 style="width: 85%; height: 100px; margin: 15px 0px 15px 0px; border-radius: 5px; border: 2px solid #ED4949;">
                            <p style="margin: 0px 15px 0px 15px;"><i><?php echo $name; ?></i> is currently out of stock. Please come back later and try again.</p>
                        </div>
                    </center>
                </div>
            </div>
        <?php
        break;
    }
    }
    } else {
        $display = 'no_products';
    }
 }

【问题讨论】:

  • 您忘记了起始标签或此处出现语法错误 ';休息; case "show_success": ?> 可能这就是它没有显示超过 1 个产品的原因。
  • @MahmoodSanjrani 哦,是的,谢谢,但这还没有解决。
  • 必须尝试在 while 循环中打印一些内容。可能是循环没有按预期工作。

标签: php foreach while-loop


【解决方案1】:

您还应该循环您的 UI 框,以便您可以在数据库中拥有相同数量的产品并打印该框。

$sql = "Select * from product";
foreach('fetch all product from DB'){
?>
    <div class="col-md-3" id="content_purchase" style="display: none;">
        <div class="panel panel-danger">
            <div class="panel-heading">
                <h3 class="panel-title">Price: <i>$<?php echo $price; ?></i>
                    <div class="fRight" style="float: right;"><i><?php echo $name; ?></i> Stock
                        (<?php echo $stock; ?>)
                    </div>
                </h3>
            </div>
            <center>
                <div class="panel-body">
                    <img src="<?php echo $picture; ?>"
                             style="width: 85%; height: 100px; margin: 15px 0px; border-radius: 5px; border: 2px solid #ED4949;">
                    <form name="paypal_form" action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="POST">
                        <input type="hidden" name="cmd" value="_xclick">
                        <input type="hidden" name="business" value="<?php echo $site_config->grabSiteSettings_manual($con, 'paypal_address'); ?>">
                        <input type="hidden" name="item_name" value="<?php echo $name; ?>">
                        <input type="hidden" name="item_number" value="<?php echo $id; ?>">
                        <input type="hidden" name="amount" value="<?php echo $price; ?>">
                        <input type="hidden" name="quantity" value="1">
                        <input type="hidden" name="currency_code" value="USD">
                        <input type="hidden" name="custom" value="username=<?php echo $username; ?>&product= <?php echo $name; ?>">
                        <input type="hidden" name="notify_url" value="<?php echo $site_callback; ?>">
                        <input type="hidden" name="return" value="<?php echo $site_return_success; ?>">
                        <input type="hidden" name="cancel_return" value="<?php echo $site_return_canceled; ?>">

                        <button type="submit" class="btn btn-danger"
                                    style="vertical-align : bottom; margin-bottom: 15px; display: block; width: 85%;">
                            <i class="fa fa-paypal"></i>aypal
                        </button>
                    <form>
                </div>
            </center>
        </div>
    </div>
<?php
} //end loop

对不起,我忘记了语法。 :D 但这就是逻辑。

【讨论】:

  • 好的,谢谢,但你能解释/帮助我了解 foreach 语法中的内容吗?
  • 目前是原生 PHP。它不会让我在我的案例函数中放置一个 foreach 。它向我显示了错误syntax error, unexpected '$sql' (T_VARIABLE), expecting case (T_CASE) or default (T_DEFAULT) or '}'
  • 据我记得这会做。 :) 只是搜索一些例子。我可能错了。 :) $result = mysql_query("select * from mytable"); while ($row = mysql_fetch_object($result)) { echo $row->user_id;回声$行->全名; }
  • 并确保for循环在php标签内。
  • 你能帮我处理一下foreach吗?您发布的语法不准确。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-17
  • 2012-09-02
  • 1970-01-01
  • 1970-01-01
  • 2016-09-16
相关资源
最近更新 更多