获取所有选中复选框的值,并将它们添加到查询字符串

时间:2015-04-10 19:58:24

标签: javascript php jquery

我会尽量做到简短而客观。我正在开发一个购物车系统,对于某些产品类别,我需要创建一个复选框,对应于可以为单个产品添加的其他产品及其数量。我有一个脚本按类别显示产品,如果类别ID与指定的数字ID匹配,则从数据库表 extraals 中恢复其他产品,并在复选框中显示其价格在行中属于该类别的产品。在我的页面 products.php 中,我有以下代码来显示数据库中的产品:

$sql = "SELECT p.product_id, p.product_name, p.product_price, 

p.category_id, c.category_name FROM products p, categories c WHERE c.category_id = p.category_id ORDER BY p.category_id, p.product_name";
$stmt = $connection->prepare($sql);
$stmt->execute();

$sql2 = "SELECT additional_id, additional_name, additional_price FROM additionals ORDER BY additional_name";
$stmt2 = $connection->prepare($sql2);
$stmt2->execute();

$num = $stmt->rowCount();
$category = null;

if($num>0)
{
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC))
    {
        extract($row);
        if($category != $category_id)
        {
            if(!is_null($category)) { echo "</table>"; }

        echo "<h1>{$category_name}</h1>
        <table>
            <tr>
                <th>NAME</th>
                <th>PRICE</th>
                <th>QUANTITY</th>";
                if($category_id == 1) echo" <th>ADDITIONALS</th>";
            echo "</tr>";

            $category = $category_id;
        }
        echo "
        <tr>
            <td>
                <div class='product-id' style='display: none'>{$product_id}</div>
                <div class='product-name'>{$product_name}</div></td>
                <td>&#36;{$product_price}
            </td>
            <td>
                <input type='number' name='quantity' value='1' min='1' max='20'/>
            </td>";
            if($category_id == 1)
            {
                echo "<td>";
                while ($row = $stmt2->fetch(PDO::FETCH_ASSOC))
                {
                    extract($row);
                    echo "
                    <input type='checkbox' name='acr[]' value='{$additional_id}'/>{$additional_name} - &#36;{$additional_price} <input type='number' name='quantity_acr[]' value='1' min='1' max='5'/><br/>
                    ";
                }
                echo "</td>";
            }
            echo "<td>
                <form class='add'>
                    <button type='submit'>Add</button>
                </form>
            </td>
        </tr>";
    }
    echo "</table>";
}

使用此代码,我的输出是这样的: http://i.imgur.com/1mEPljR.png
类别ID 1对应于食品类别,因此,将显示附加列 我使用这个jQuery代码来获取值并将它们添加到查询字符串:

$(document).ready(function()
{
    $('.add').on('submit', function()
    {
        var product_id = $(this).closest('tr').find('.product-id').text();
        var product_name = $(this).closest('tr').find('.product-name').text();
        var quantity = $(this).closest('tr').find('input').val();
        window.location.href = "add_to_cart.php?product_id=" + product_id + "&product_name=" + product_name + "&quantity=" + quantity;
        return false;
    });
});

这是我的问题。我不知道如何在查询字符串中存储其他选中的复选框产品及其各自的数量!在 add_to_cart.php 中,我有以下代码从Query String中获取变量,在数据库中比较它们并将产品添加到SESSION:

if (isset($_GET['product_id']) && $_GET['product_id'] != "")
{
    if(isset($_SESSION['cart']))
    {
        $count = count($_SESSION['cart']);
        $product_id_session = $count++;
    }
    else
    {
        $product_id_session = 0;
    }
    $product_id = isset($_GET['product_id']) ? $_GET['product_id'] : "";
    $product_name = isset($_GET['product_name']) ? $_GET['product_name'] : "";
    $quantity = isset($_GET['quantity']) ? $_GET['quantity'] : "";

    $sql = "SELECT * FROM products WHERE product_id LIKE '{$product_id}' AND product_name LIKE '{$product_name}' LIMIT 1";
    $stmt = $connection->prepare($sql);
    $stmt->execute();

    $num = $stmt->rowCount();

    if($num == 1)
    {
        if($quantity <= 0 || $quantity > 20)
        {
            header('Location: products.php?action=invalidquantity&product_name=' . $product_name);
        }
        else if(!isset($_SESSION['cart']))
        {
            $_SESSION['cart'] = array();
        }
        if(isset($_SESSION['cart']))
        {
            while ($row = $stmt->fetch(PDO::FETCH_ASSOC))
            {
                extract($row);
                $columns = array
                (
                    'product_id_session' => $product_id_session,
                    'product_id' => $product_id,
                    'product_name' => $product_name,
                    'product_price' => $product_price,
                    'quantity' => $quantity
                );
            }
            $_SESSION['cart'][$product_id_session] = $columns;
            header('Location: products.php?action=added&product_name=' . $product_name);
        }
    }   
    else
    {
        redirect_to("products.php");
    }
}

我需要对选中的复选框执行相同的操作!在数据库中将它们与 additional_id 进行比较,并在相应产品阵列的SESSION中插入它们的名称和价格,但我不知道如何执行此操作。我希望你明白我想做什么。我整天都在尝试这个,但是我目前的知识不允许我超越这一点。我谦卑地请别人帮助我。

2 个答案:

答案 0 :(得分:0)

输入字段的名称为acr[]。这意味着假设提交方法是GET,你将在$_GET['acr']内有一个数值数组。

因此,您将$_GET['acr'][0]$_GET['acr'][1]等。

您始终可以使用var_dump($_GET)查看所有输入值。

对于每种产品类型,在括号内使用唯一标识符可能更有意义。

例如,使用名称acr[garlic]acr[01234]表示产品ID。

答案 1 :(得分:0)

试试这个:http://jsfiddle.net/zkky5c0f/

$(document).ready(function(){
var allCheckbox = '';
$('input[type=\"checkbox\"]').each(function(){
    if(allCheckbox !== ''){
        allCheckbox += '-' + $(this).val(); 
    }else{
        allCheckbox +=  $(this).val(); 
    }

});
 alert(allCheckbox);
});

在你的代码中它就像:

$(document).ready(function()
{
    $('.add').on('submit', function()
   {
    var product_id = $(this).closest('tr').find('.product-id').text();
    var product_name = $(this).closest('tr').find('.product-name').text();
    var quantity = $(this).closest('tr').find('input').val();
    var allCheckbox = '';
    $('input[type=\"checkbox\"]').each(function(){
     if(allCheckbox !== ''){
        allCheckbox += '-' + $(this).val(); 
     }else{
        allCheckbox +=  $(this).val(); 
     }
});
    window.location.href = "add_to_cart.php?product_id=" + product_id + "&product_name=" + product_name + "&quantity=" + quantity + "&checkbox=" + allCheckbox;
    return false;
});

});

然后在PHP中你可以简单地将字符串分解为- 例如:

$checkbox = explode($_GET['checkbox']);

希望这有助于:)