【问题标题】:Url() based on product selectionUrl() 基于产品选择
【发布时间】:2017-10-16 13:14:36
【问题描述】:

所以我是 php、Smarty 和 mysql 的新手。我只想知道处理以下问题的最佳方法:

(我会向您展示我的代码,但因为我只是想要经验丰富的指导,我 保持简短)

我需要实现的目标:我有一个产品列表页面,其中列出了我的 3 种产品。此列表填充在我的.tpl 文件中。我的数据库连接和查询从.php 文件中读取。

现在,当我点击一个产品时,我想生成一个新的(产品详细信息)网址并仅显示该产品,该产品仅具有该产品属性。

我想知道如何处理这个问题,我想我只会为产品详细信息页面创建一个新的.tpl 文件。当您单击产品列表页面上的链接(产品)时,它会将您重定向到该产品的产品详细信息页面。

如何(请指导)

那么,为每个产品生成 url 的最佳方式是什么? (仅在新的 .tpl 中显示所选产品及其详细信息)。

我想从可以从数据库表中检索的产品属性中生成一个 url?这可能吗?也许有链接可以阅读?

我是否必须在我的数据库中为我生成的 url() 创建一个列?

在这方面的任何帮助都会很棒!

我的代码:我还没有为产品详细信息页面设置 .tpl

.php

<?php

$new = ['product_id','product_category','product_price','product_quantity','product_about','product_color'];

//Database connection
 $db = mysqli_connect('xxx','xxx','xxx','xxx')
 or die('Error connecting to MySQL server.');

//access Smarty template engine
require_once('Smarty-3.1.30/libs/Smarty.class.php');

$smarty = new Smarty();
$smarty->template_dir = 'views';
$smarty->compile_dir = 'tmp';


//query product page
$query = "SELECT * FROM cs_shop";
mysqli_query($db, $query) or die('Error querying database.');

$result = mysqli_query($db, $query);


//query an array of products
$rows = array();

 //loop start
 while ($row = mysqli_fetch_array($result)) {
    $rows[] = array(
        'product_id' => $row['product_id'],
        'product_category' => $row['product_category'],
        'product_price' => $row['product_price'],
        'product_quantity' => $row['product_quantity'],
        'product_about' => $row['product_about'],
        'product_color' => $row['product_color']
    );
}

//db collect data
$smarty->assign('row', $rows); 
//template
$smarty->display('index.tpl');

mysqli_close($db);

?>

.tpl(这是显示产品列表的循环)

<div class="test divider">
    {section name=prod loop=$row}
    <div class="colm3">
        <div class="col3 r1">
            <div class="products-container">
                <h5>{$row[prod].product_name}</h5>
                <a class="producy_img_link" href="#" >
                    <img src="{$row[prod].prod_img}" style="width:auto; height:255px;">
                </a>
            </div>
        </div>

        <a href="#">
            <div class="block-right">
                <h6>{$row[prod].product_vintage}</h6>
                <h5>{$row[prod].product_veriatel}</h5>
                <div>
                    <span class="price">R {$row[prod].product_price}</span>
                </div>
            </div>
        </a>
    </div>
    {/section}
</div>

【问题讨论】:

    标签: php mysql get smarty template-engine


    【解决方案1】:

    创建一个页面以显示产品详细信息product.php 和product.tpl,并使用href 中的产品ID 链接到基于product_id 的不同产品。

    <div class="test divider">
        {section name=prod loop=$row}
        <div class="colm3">
            <div class="col3 r1">
                <div class="products-container">
                    <h5>{$row[prod].product_name}</h5>
                    <!-- create a link for each product based on the product id -->
                    <a class="producy_img_link" href="product.php?prod_id={$row[prod].product_id}" >
                        <img src="{$row[prod].prod_img}" style="width:auto; height:255px;">
                    </a>
                </div>
            </div>
    
            <a href="#">
                <div class="block-right">
                    <h6>{$row[prod].product_vintage}</h6>
                    <h5>{$row[prod].product_veriatel}</h5>
                    <div>
                        <span class="price">R {$row[prod].product_price}</span>
                    </div>
                </div>
            </a>
        </div>
        {/section}
    </div>
    

    然后在您的PHP 中使用$_GET 获取产品ID

    <?php
    
    // Database connection
    $db = mysqli_connect('xxx', 'xxx', 'xxx', 'xxx')
    or die('Error connecting to MySQL server.');
    
    $product_id = $_GET['prod_id']; // gets the product id
    
    $sql = "SELECT * FROM cs_shop WHERE product_id = $product_id";
    $result = mysqli_query($db, $sql);
    //query an array of products
    $rows = array();
    
    //loop start
    while ($row = mysqli_fetch_array($result)) {
        $rows[] = array(
            'product_id' => $row['product_id'],
            'product_category' => $row['product_category'],
            'product_price' => $row['product_price'],
            'product_quantity' => $row['product_quantity'],
            'product_about' => $row['product_about'],
            'product_color' => $row['product_color']
        );
    }
    
    //db collect data
    $smarty->assign('row', $rows);
    //template
    $smarty->display('product.tpl');
    
    mysqli_close($db);
    
    ?>
    

    【讨论】:

    • 非常感谢!!我已经完成了这项工作,但很高兴看到我以正确的方式使用它!谢谢大佬!
    • 我唯一的区别是 $_get ---> $productId = (isset($_GET["product_id"]) && is_numeric($_GET["product_id"]) && (int)$ _GET["product_id"] > 0) ? (int)$_GET["product_id"] : 0;
    • 是的,最好总是检查你的价值观。看看w3schools.com/php/php_mysql_prepared_statements.asp,将有助于防止sql注入
    • 我仍在学习曲线中,所以我知道我必须在某个时候查看 sql 注入,但感谢它的一个非常好的范围,我也将尝试。
    • 您是否可以检查我即将提出的新问题?回到我的编码学习曲线......将非常感激! @2by2
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-26
    • 2014-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-30
    • 2021-05-19
    相关资源
    最近更新 更多