Witam.

Zrobiłem obsługę koszyka. Gdy dodaję produkt do niego to jest dobrze, dopóki nie kliknę na jakiś inny odnośnik do strony. Wtedy znów tak jakby ten produkt jest dodawany. Dalej gdy znów klikam na inny odnośnik to już nic się nie zmienia. Po prostu za pierwszym razem tak jakby ten produkt się dwa razy dodaje.

Mam nadzieję, że mnie każdy zrozumiał bo lepiej tego wytłumaczyć nie umiem, ale jak coś to piszcie to wam się postaram wytłumaczyć.

A teraz czas na kody źródłowe.

Plik główny INDEX.PHP ma następującą składnię:

  1. <?php
  2.  
  3. if (isset($_GET['lang']))
  4. {
  5.  if ($_GET['lang'] == 'pl' || $_GET['lang'] == 'en')
  6. {
  7.  $lang = $_GET['lang'];
  8.  $_SESSION['lang'] = $_GET['lang'];
  9. }
  10. elseif (isset($_SESSION['lang']) && ($_SESSION['lang'] == 'pl' || $_SESSION['lang'] == 'en'))
  11. {
  12.  $lang = $_SESSION['lang'];
  13. }
  14. else
  15. {
  16.  $lang = 'pl';
  17.  $_SESSION['lang'] = 'pl';
  18. }
  19.  }
  20. else
  21. {
  22.  if ( isset( $_SESSION['lang'] ) && ( $_SESSION['lang'] == 'pl' || $_SESSION['lang'] == 'en' ) )
  23.  {
  24. $lang = $_SESSION['lang'];
  25.  }
  26.  else
  27.  {
  28. $lang = 'pl';
  29. $_SESSION['lang']= 'pl';
  30.  }
  31. }
  32.  
  33. include_once("config.php");
  34. include_once("functions_" . $server . ".php");
  35.  
  36. $strona = new Page;
  37. $strona->DBConnect($host, $user, $pass, $db);
  38.  
  39. if (!isset($HTTP_SESSION_VARS['koszyk']))
  40. {
  41.  $HTTP_SESSION_VARS['koszyk'] = array();
  42.  $HTTP_SESSION_VARS['produkty'] = 0;
  43.  $HTTP_SESSION_VARS['calkowita_wartosc'] = '0.00';
  44. }
  45.  
  46. require_once( './includes/lang/'.$lang.'/napisy.txt');
  47. ?>
  48.  
  49. <?php echo '<?xml version="1.0" encoding="ISO-8859-2"?>'; ?>
  50. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  51.  
  52. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl">
  53. <head>
  54. <meta http-equiv="Content-type" content="text/html; charset=iso-8859-2" />
  55. <title><?echo $lng['tytul'];?></title>
  56. <link rel="stylesheet" type="text/css" href="style.css" />
  57. </head>
  58.  
  59. <body bgcolor="#D8D7D0">
  60. <center>
  61. <div align="center">
  62. <table width="1007" border="0" cellpadding="0" cellspacing="0">
  63.  <tr>
  64. <td colspan=13 style="background-repeat: no-repeat; background-position: center" background="gfx/logo.jpg" height="119"></td>
  65.  </tr>
  66. </table>
  67.  
  68. <br />
  69.  
  70. <table width="1007" align="center">
  71.  <tr>
  72. <td bgcolor="#B3B3B4" style="font-weight:bold; color:#555555; border-width:2; border-color:#E6E6E6; border-style:solid; font-size:19;">
  73.  <marquee behavior="alternate" direction="right">
  74.  <?
  75.  $tekst = $strona->SelectSimple('tekst', $prefix . '_mininews', 'jezyk', $lang, ''');
  76.  if ($tekst != -1) echo $tekst;
  77.  ?>
  78.  </marquee>
  79. </td>
  80.  </tr>
  81. </table>
  82.  
  83. <table width="1007" border="0" cellpadding="0" cellspacing="0">
  84.  <tr>
  85. <td background="#BDB76B">&nbsp;</td>
  86.  </tr>
  87. </table>
  88.  
  89. <table width="100%" border="0" cellpadding="0" cellspacing="0">
  90.  <tr>
  91. <td background="#BDB76B" height="221" valign="top">
  92.  <table width="1007" border="0" cellpadding="0" cellspacing="0" align="center">
  93. <tr valign="top">
  94.  <td width="2%" height="568">&nbsp;</td>
  95.  <td width="12%" height="568">
  96. <?include "includes/menu.inc";?>
  97.  </td>
  98.  <td width="2%" height="568">&nbsp;</td>
  99.  <td width="60%" height="568">
  100. <table width="100%" border="0" cellpadding="0" cellspacing="0" align="center">
  101.  <tr>
  102. <td background="gfx/news_top.gif" valign="top" height="13">
  103.  <font size="1" face="Verdana, Arial, Helvetica, sans-serif"><?echo $lng['naglowek'];?></b></font>
  104. </td>
  105.  </tr>
  106.  <tr>
  107. <td bgcolor="#e6e6e6" height="184" valign="top">
  108.  <?
  109.  $page = $_GET['page'];
  110.  
  111.  if(!isset($page))
  112.  {
  113. $page="index_" . $_SESSION['lang'];
  114.  }
  115.  
  116.  if (file_exists ("includes/$page.inc"))
  117.  {
  118.  include "includes/$page.inc";
  119.  }
  120.  else
  121.  {
  122.  echo "<blockquote>" . $lng['blad_strony'] . "</blockquote>";
  123.  }
  124.  ?>
  125.  </td>
  126. </tr>
  127. <tr>
  128.  <td background="gfx/news_bottom.gif" height="2" valign="top"></td>
  129. </tr>
  130.  </table>
  131. </td>
  132. <td width="2%" height="568">&nbsp;</td>
  133. <td width="12%" height="568">
  134.  <?include "includes/menu2.inc";?>
  135. </td>
  136. <td width="2%" height="568">&nbsp;</td>
  137.  </tr>
  138. </table>
  139.  </td>
  140. </tr>
  141. </table>
  142. <br />
  143. <table width="1007" border="0" cellpadding="0" cellspacing="0">
  144. <tr>
  145.  <td width="1007" background="gfx/stopka.gif" height="2" valign="top">
  146. <div align="center"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><?echo $lng['prawa'];?> &copy; 2007 | Engine by <b>Kojac&Flesik</b></font></div>
  147.  </td>
  148. </tr>
  149. </table>
  150. </div>
  151. </body>
  152. </html>


Ten plik to oczywiście główny plik strony. Jest tu tworzona sesja, w której przechowywany jest m.in. zawartość koszyka. Ładowane są także prawe i lewe menu. Tam są różne produkty, które po kliknięciu mają adres, np: 'http://127.0.0.1/catering/index.php?page=pokaz_koszyk&nowy=7'. Tak więc do strony 'index.php' inkludowany jest plik 'pokaz_koszyk.inc', który kod jest poniżej:

  1. <?
  2. require_once( './includes/lang/'.$lang.'/napisy.txt');
  3. require("config.php");
  4. ?>
  5.  
  6. <blockquote>
  7. <br />
  8.  
  9. <?
  10. $user = new User;
  11.  
  12. if ($user->CheckCorrectUser($lng['blad'], $lng['blad_niezalogowany']))
  13. {
  14.  $strona->MakeHeader($lng['koszyk_nagl']);
  15.  ?>
  16.  <div align="center">
  17.  <br />
  18.  <?
  19.  
  20.  $nick = $_SESSION['prawid_uzyt'];
  21.  $id = $user->CheckID($nick, $prefix."_users");
  22.  
  23.  if ($_GET['nowy'])
  24.  {
  25. if(isset($_SESSION['koszyk'][$nowy]))
  26.  $_SESSION['koszyk'][$nowy]++;
  27. else
  28.  $_SESSION['koszyk'][$nowy] = 1;
  29.  
  30. $_SESSION['calkowita_wartosc'] = $strona->CountPrize($_SESSION['koszyk'], $prefix."_menu");
  31. $_SESSION['produkty'] = $strona->CountProducts($_SESSION['koszyk']);
  32.  }
  33.  
  34.  if ($_SESSION['koszyk'] && array_count_values($_SESSION['koszyk']))
  35.  {
  36. $strona->ShowBag($_SESSION['koszyk']);
  37. echo "<b>SUMA</b>: " . $_SESSION['calkowita_wartosc'];
  38.  }
  39.  else
  40.  {
  41. echo "<b>" . $lng['koszyk_pusty'] . "</b>";
  42. echo "<br /><br /><hr />";
  43.  }
  44.  
  45.  echo "<br /><a href=\"index.php?page=kasa\">==> [<b>" . $lng['koszyk_kasa'] . "</b>] <==</a><br /><br />";
  46.  ?>
  47.  </div>
  48.  <?
  49. }
  50. ?>
  51. </blockquote>


Więc po kliknięciu na ten link wszystko jest dobrze, czyli dodaje się jeden produkt, o wartości takiej, jaki ma przypisany. Ale z jakiegoś powodu, jak kliknę w inny link (np. galerię zdjęć na stronie) to ten koszyk zwiększa dodany produkt o jeden. I nie wiem dlaczego, co źle zrobiłem :/