#php #xml #ajax #domdocument
#php #xml #ajax #domdocument
Вопрос:
У меня проблема при создании корзины покупок из каталога Всякий раз, когда я ввожу новый товар, предыдущий товар заменяется новым.
В приведенном ниже коде у меня есть XML-файл, goods.xml . В showxml.php Я показываю товары с доступным количеством> 0. затем через getDoc1 я обновляю xmlфайл, и я также хочу обновить корзину покупок. Проблема в том, что когда я выбираю новый элемент, предыдущий элемент заменяется новым. Пожалуйста, помогите мне. Заранее спасибо
Мой код приведен ниже
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) /* amp;amp; 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 теперь отображается shoppingcart, но я не могу обновить значения в корзине покупок, т. Е. увеличить количество товара, нажав кнопку «Добавить в корзину», если товар уже находится в корзине покупок.
мой код:
<!--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)amp;amp;($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. поработайте над форматированием вашего кода, это поможет вам легче находить проблемы.
Ответ №1:
В вашем 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. Кроме того, это облегчит вашу жизнь.
Комментарии:
1. не могли бы вы, пожалуйста, предоставить код для (В вашем javascript эта строка Альтернативно может отображать только строку, а в вашем javascript обновлять таблицу, добавляя строку внизу вашей таблицы)
2. все та же проблема .. я думаю, что у меня проблема в javascript, пожалуйста, подскажите мне правильное решение
3. @carina в чем проблема? он по-прежнему переопределяет выходные данные?
4. нет. но я не могу обновить shoppingcart, т. е. увеличить количество на 1, если товар уже есть в корзине покупок
5. здравствуйте, есть ли кто-нибудь, кто может ответить на это