Создание формы заказа - проблема превращения кнопки заказа для каждого продукта в одну кнопку - PullRequest
0 голосов
/ 14 августа 2011

Я занят созданием системы заказов.

У меня возникают проблемы при попытке создать форму, для которой требуется только одна кнопка заказа.

В настоящее время форма для каждого результата продукта.Пользователь имеет возможность ввести желаемое количество определенного продукта, а затем может заказать продукт на основе выбранного количества.Идентификатор товара и выбранное количество затем добавляются в сеансы.

Проблема в том, что если есть 5 позиций, то есть 5 кнопок заказа.

Я пытаюсь упростить это, где для 5 продуктов будет только одна кнопка заказаконтроль всего выбора продуктов.

Вот код, относящийся к этому:

//Now we search for our search term, in the field the user specified 

$dataQuery = "SELECT * FROM `products` WHERE upper(`desc`) LIKE '%" 
   . implode("%' AND upper(`desc`) LIKE '%", $keywords_array) 
   . "%' ORDER BY `desc`";

$data = mysql_query($dataQuery) or die(mysql_error());

$tempVar = 0;
//And we display the results 
while ($result = mysql_fetch_array($data)) {
$prId = $result['id'];
$prRefCode = $result['refCode'];
$prDesc = $result['desc'];
$prPack = $result['pack'];
$prMeasure = $result['measure'];
$prQuantity = $result['quantity'];
$prDeptCode = $result['deptCode'];
$prTaxable = $result['taxable'];
$prPrice1 = $result['price1'];
$prPrice2 = $result['price2'];
$prCrdCode = $result['crdCode'];
$prCost1 = $result['cost1'];
$prCost2 = $result['cost2'];

if ($tempVar == 0) {
$pageContent .= '
<p><u>All prices are inclusive of VAT</u></p>
<table class="searchResults" border="1" align="center" width="90%">
<thead>
    <tr>
        <th>Stock Code</th>
        <th>Description</th>
        <th>Packsize</th>
        <th>Price</th>
        <th>In-Stock?</th>
        <th>Quantity</th>
        <th>Submit</th>
    </tr>
</thead>
<tbody>
';
}

    $pageContent .= '
<tr>
    <td>' . $prId . '</td>
    <td>' . $prDesc . '</td>
    <td>' . $prPack . 'x' . $prSize . ' ' . $prMeasure . '</td>
    <td>R' . $prPrice1 . '</td>
';
    if (empty($prQuantity)) {
        $pageContent .= '
<td>No</td>
';
    } else {
        $pageContent .= '
<td>Yes</td>
';
    }
    $pageContent .= '
    <form id="validated" action="" method="post">
    <td>            
            <div>
                <input type="text" 
onkeydown="return ( event.ctrlKey || event.altKey 
                || (47<event.keyCode && event.keyCode<58 && event.shiftKey==false) 
                || (95<event.keyCode && event.keyCode<106)
                || (event.keyCode==8) || (event.keyCode==9) 
                || (event.keyCode>34 && event.keyCode<40) 
                || (event.keyCode==46) )" 
                name="quantity" size ="2" 
                value ="1" 
                style="background: #F4F4F4;
                       font-family: Monaco, monospace;" />
            </div>            
    </td>
    <td>
            <div>
                <input type="hidden" name="id" value="' . $prId . '" />
                <input type="submit" name="action" value="Order" />
            </div>            
    </td>
    </form>     
</tr>
';
$tempVar ++;
}



//This counts the number of results - and if there wasn't any it gives them a little message explaining that 
$anymatches = mysql_num_rows($data);
if ($anymatches == 0) {
    $pageContent .= '
<p>Sorry, but we can not find an entry to match your query</p>
<!-- end .aliLeft --></div>
';
}

if ($anymatches > 0 and count($tempVar) == count($anymatches)) {
    $pageContent .= '
</tbody>
</table>
<!-- end .aliLeft --></div>
';
}

Как вы можете видеть, когда пользователь ищет продукт, запрашивается таблица mysql, еслирезультаты найдены, затем они возвращаются.

В этом процессе для каждого результата создается форма.

Я пытаюсь сделать это, чтобы расширить эту форму, чтобы охватить весь наборРезультаты, затем есть только один вход для «Заказ», так что, по сути, пользователь может вводить количества для различных продуктов, а затем добавить эти продукты и количества к их заказу.выполнить эту задачу?

Я был бы признателен за любой ввод, что когда-либо, спасибо!

EDITED BY OP:

А вот код, управляющий экземпляром пользователяclicking на кнопке заказа:

if (!isset($_SESSION['order']))
{
$_SESSION['order'] = array();
}

if (!isset($_SESSION['quantity']))
{
$_SESSION['quantity'] = array();
}

if (isset($_POST['action']) and $_POST['action'] == 'Order' and $_POST['quantity'] > 0)
{
// Add item to the end of the $_SESSION['order'] array
$_SESSION['order'][$_POST['id']] = $_POST['id'];
$_SESSION['quantity'][$_POST['id']] = $_POST['quantity'];
header('Location: .');
exit();
}

А вот код, который настраивает значение количества для суммирования заказа:

$total = 0;
if (count($order) > 0)
{
foreach ($order as $product)
{
    mysql_data_seek( $totalsSql, 0);  //<- this line, to reset the pointer for every EACH.
while($row = mysql_fetch_assoc($totalsSql))
    {
     $prodId = $row['id'];
     $prodPrice1 = $row['price1'];
     $prodQuantity = $quantity[$prodId];
    if ($product == $prodId) 
        {
        $total += ($prodPrice1*$prodQuantity);
        break;
        }
    }
}
}

EDITED BY OP:

См.исправлен код контроллера:

$productQuantities=$_POST['quantity'];
if (isset($_POST['action']) and $_POST['action'] == 'Order' and $productQuantities > 0)
{
foreach($productQuantities as $productId=>$quantityS)
{
    if ($quantityS > 0) 
        {
        $_SESSION['order']["$productId"] = $productId;
        $_SESSION['quantity']["$productId"] = $quantityS;
        header('Location: .');
        exit();
        }
}
}

1 Ответ

2 голосов
/ 14 августа 2011

Внесите следующие изменения в свой код:

..................
...................

<form id="validated" action="" method="post">
while ($result = mysql_fetch_array($data))
{

..........................
.................
......................

    <td>            
            <div>
                <input type="text" 
onkeydown="return ( event.ctrlKey || event.altKey 
                || (47<event.keyCode && event.keyCode<58 && event.shiftKey==false) 
                || (95<event.keyCode && event.keyCode<106)
                || (event.keyCode==8) || (event.keyCode==9) 
                || (event.keyCode>34 && event.keyCode<40) 
                || (event.keyCode==46) )" 




                // Notice that I have changed name="quantity" to name="quantity[$prId]"
                //    VVVVVVVVVVVVVVV
                name="quantity[$prId]" size ="2" 
                //    ^^^^^^^^^^^^^^^



                value ="1" 
                style="background: #F4F4F4;
                       font-family: Monaco, monospace;" />
            </div>            
    </td>

...............
.................
................
...............

</tbody>
</table>
<!-- end .aliLeft --></div>
</form>';
}

Теперь получите количества для идентификаторов продуктов в файле php, куда отправляется форма: -

<?php
$productQuantities=$_POST['quantity'];


if (!isset($_SESSION['order']))
{
    $_SESSION['order'] = array();
}

if (!isset($_SESSION['quantity']))
{
    $_SESSION['quantity'] = array();
}    

foreach($productQuantites as $productId=>$quantity)
{    
    if ($quantity>0)
    {
        // Add item to the end of the $_SESSION['order'] array
        $_SESSION['order'][$productId] = $productId;
        $_SESSION['quantity'][$productId] = $quantity;
        header('Location: .');
        exit();
    } 

}
?>
...