Выдача корзины - PullRequest
       16

Выдача корзины

0 голосов
/ 18 апреля 2011

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

В приведенном ниже коде у меня есть xml-файл goods.xml. В showxml.php я показываю элементы с количеством: 0>. затем через getDoc1 я обновляю xmlfile и хочу обновить корзину покупок. Проблема в том, что когда я выбираю новый элемент, предыдущий элемент заменяется новым. Пожалуйста, помогите мне. Заранее спасибо

Мой код указан ниже

XML-файл: goods.xml

<?xml version="1.0" encoding="utf-8"?>
<items>
  <item>
    <itemno>1</itemno>
    <sellerid>1</sellerid>
    <itemname>jj</itemname>
    <unitprice>90</unitprice>
    <QuantityAvailable>-9</QuantityAvailable>
    <ItemDescription>jnjhjh</ItemDescription>
    <QuantitySold>0</QuantitySold>
    <QuantityHold>17</QuantityHold>
  </item>
<item>
<itemno>2</itemno>
<sellerid>1</sellerid>
<itemname>jj</itemname>
<unitprice>90</unitprice>
<QuantityAvailable>2</QuantityAvailable>
<ItemDescription>jnjhjh</ItemDescription>
<QuantitySold>0</QuantitySold>
<QuantityHold>20</QuantityHold>
</item>
</items>

Функция JavaScript:

unction getDoc1(itemno)
{    
    if (window.XMLHttpRequest)
    {        
        xmlhttp=new XMLHttpRequest();    
    }     
    else     
    {      
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");  
    }    
    xmlhttp.onreadystatechange=function()     
    {        
        if (xmlhttp.readyState==4) /* && xmlhttp.status==200) */       
        {            
            document.getElementById("updatexml").innerHTML=xmlhttp.responseText;            
        } 
    }     
    var url="updatexml.php";
    url=url+"?itemnum="+itemno;
    xmlhttp.open("GET",url,true);    
    xmlhttp.send(null);  }

PHP: showxml.php:

<?php
    $xmlFile = "../../data/Assign/goods.xml";
    $doc= DOMDocument::load($xmlFile);
    $item = $doc->getElementsByTagName("item"); 
    echo"Shopping Catalogue";
    echo "<table border=1><tr><th>ItemNo</th><th>ItemName</th><th>Description</th><th>Price</th><th>Quantity Available</th><th>Add To Cart</th></tr>";   

    foreach($item as $node) 
    {   
        $itemno = $node->getElementsByTagName("itemno");
        $itemno = $itemno->item(0)->nodeValue;
        $itemname = $node->getElementsByTagName("itemname");
        $itemname = $itemname->item(0)->nodeValue;   
        $itemdes = $node->getElementsByTagName("ItemDescription");
        $itemdes= $itemdes->item(0)->nodeValue;  
        $price = $node->getElementsByTagName("unitprice");
        $price = $price->item(0)->nodeValue;
        $quant = $node->getElementsByTagName("QuantityAvailable");
        $quant = $quant->item(0)->nodeValue;
        if($quant>0)
            echo" <tr><td>{$itemno}</td><td>{$itemname}</td><td>{$itemdes}</td><td>{$price}</td><td>{$quant}</td><td><form> <input type='button' name='submit'  value='Add One To Cart' onClick='getDoc1(\"$itemno\");'/> </form></td></tr>";
        $count++;
    }

    echo "</table>";
    if ($count ==0) 
        echo"No data available";    
?>

Updatexml.php:

<?php   
    $itemnum=$_GET['itemnum'];          
    $xmlFile = "../../data/Assign/goods.xml";
    $doc= DOMDocument::load($xmlFile);
    $item = $doc->getElementsByTagName("item"); 

    foreach( $item as $node)  
    {
        $itemno = $node->getElementsByTagName("itemno");
        $itemno=$itemno->item(0)->nodeValue;
        $qua = $node->getElementsByTagName("QuantityAvailable");
        $qua=$qua->item(0)->nodeValue;
        $qhold = $node->getElementsByTagName("QuantityHold");
        $qhold=$qhold->item(0)->nodeValue;
        $unitprice = $node->getElementsByTagName("unitprice");
        $unitprice=$unitprice->item(0)->nodeValue;
        if($itemno==$itemnum)
        {
            $itemnoo=$itemno;
            $quantity=1;
            $price=$unitprice; 
            $node->getElementsByTagName("QuantityAvailable")->item(0)->nodeValue=$qua-1;
            $node->getElementsByTagName("QuantityHold")->item(0)->nodeValue=$qhold+1;
         }
       }             
       $doc->save("../../data/Assign/goods.xml");             
       echo"Shopping Cart";
       echo "<table border=1><tr><th>ItemNo</th><th>Quantity</th><th>Price</th><th>Remove from Cart</th></tr>";    
       echo" <tr><td>{$itemnoo}</td><td>{$quantity}</td><td>{$price}</td><td><form> <input type='button' name='submit'  value='Remove from Cart' onClick='getDoc1(\"$itemnoo\");'/> </form></td></tr>";
       echo"<tr><td>Total:</td><td> $price  </td></tr>";
       echo "</table>";
?>

Я сделал некоторые изменения в updatexml.php, теперь он отображает корзину покупок, но я не могу обновить значения в корзине, т. Е. Увеличить количество товара, нажав кнопку «Добавить одну корзину», если товар уже есть в корзине. мой код:

<!--file updatexml.php -->

<?php

        $itemnum=$_GET['itemnum'];                    
        $xmlFile = "../../data/folder/goods.xml";
        $doc= DOMDocument::load($xmlFile);
        $item = $doc->getElementsByTagName("item");    
        foreach( $item as $node)  
        {
        $itemno = $node->getElementsByTagName("itemno");
        $itemno=$itemno->item(0)->nodeValue;
        $qua = $node->getElementsByTagName("QuantityAvailable");
        $qua=$qua->item(0)->nodeValue;
        $qhold = $node->getElementsByTagName("QuantityHold");
        $qhold=$qhold->item(0)->nodeValue;
        if(($itemno==$itemnum)&&($qua>0))
           { 
          $node->getElementsByTagName("QuantityAvailable")->item(0)->nodeValue=$qua-1;
          $node->getElementsByTagName("QuantityHold")->item(0)->nodeValue=$qhold+1; 
           } 
        }            
        $doc->save("../../data/folder/goods.xml"); 




        $xmlFile = "../../data/folder/goods.xml";
        $doc= DOMDocument::load($xmlFile);
        $item = $doc->getElementsByTagName("item");
        echo"Shopping Cart";
        echo "<table border=1><tr><th>ItemNo</th><th>Quantity</th><th>Price</th><th>Total</th><th>Remove from Cart</th></tr>";     
        foreach( $item as $node)  
        {
        $itemno = $node->getElementsByTagName("itemno");
        $itemno=$itemno->item(0)->nodeValue;
        $qua = $node->getElementsByTagName("QuantityAvailable");
        $qua=$qua->item(0)->nodeValue;
        $qhold = $node->getElementsByTagName("QuantityHold");
        $qhold=$qhold->item(0)->nodeValue;
        $unitprice = $node->getElementsByTagName("unitprice");
        $unitprice=$unitprice->item(0)->nodeValue;   
        $quantity=1;
        if($qhold>0) 
           { 
           $total=$unitprice*$quantity;
           echo" <tr><td>{$itemno}</td><td>{$quantity}</td><td>{$unitprice}</td><td>{$total}</td><td><form> <input type='button' name='submit'  value='Remove From Cart' onClick='getDoc1(\"$itemno\");'/> </form></td></tr>";
           } 
        }            
        echo"</table>";

?>    

1 Ответ

0 голосов
/ 18 апреля 2011

В вашем javascript эта строка

document.getElementById("updatexml").innerHTML=xmlhttp.responseText; 

означает, что при каждом XMLHttpRequest (каждый раз, когда вы добавляете в корзину ??) элемент с идентификатором «updatexml» будет обновляться с ответом от updatexml.php в вашем случае с этим

         echo"Shopping Cart";
         echo "<table border=1><tr><th>ItemNo</th><th>Quantity</th><th>Price</th><th>Remove from Cart</th></tr>";    
         echo" <tr><td>{$itemnoo}</td><td>{$quantity}</td><td>{$price}</td><td><form> <input type='button' name='submit'  value='Remove from Cart' onClick='getDoc1(\"$itemnoo\");'/> </form></td></tr>";
         echo"<tr><td>Total:</td><td> $price  </td></tr>";
         echo "</table>";

Как видите, вы указываете только один элемент. Как только вы добавите еще один, ответ переопределит вашу корзину. Таким образом, ваш updatexml.php должен перечислить все продукты **, и посмотреть что-то вроде этого

<--updatexml.php--->

<?php


           $itemnum=$_GET['itemnum'];           

            $xmlFile = "../../data/Assign/goods.xml";
            $doc= DOMDocument::load($xmlFile);
            $item = $doc->getElementsByTagName("item"); 

           echo"Shopping Catalogue";
            echo "<table border=1><tr><th>ItemNo</th><th>ItemName</th><th>Description</th><th>Price</th><th>Quantity Available</th><th>Add To Cart</th></tr>";   



             foreach( $item as $node)  
           {
            $itemno = $node->getElementsByTagName("itemno");
            $itemno=$itemno->item(0)->nodeValue;
            $qua = $node->getElementsByTagName("QuantityAvailable");
            $qua=$qua->item(0)->nodeValue;
            $qhold = $node->getElementsByTagName("QuantityHold");
            $qhold=$qhold->item(0)->nodeValue;
            $unitprice = $node->getElementsByTagName("unitprice");
            $unitprice=$unitprice->item(0)->nodeValue;
               if($itemno==$itemnum)
             {
              $itemnoo=$itemno;
              $quantity=1;
              $price=$unitprice; 
             $node->getElementsByTagName("QuantityAvailable")->item(0)->nodeValue=$qua-1;
             $node->getElementsByTagName("QuantityHold")->item(0)->nodeValue=$qhold+1;
             }
              if($qua>0)
              {
             echo" <tr><td>{$itemno}</td><td>{$itemname}</td><td>{$itemdes}</td><td>{$price}</td><td>{$quant}</td><td><form> <input type='button' name='submit'  value='Add One To Cart' onClick='getDoc1(\"$itemno\");'/> </form></td></tr>";
               }

           }             
            $doc->save("../../data/Assign/goods.xml"); 



             echo "</table>";

** В качестве альтернативы вы можете отобразить только строку и в своем javascript обновить таблицу, добавив строку в нижней части таблицы. Кроме того, почему вы не используете JQuery? (тогда вы можете поиграть с JSON. Кроме того, это сделает вашу жизнь проще.

...