Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z dodaniem zmiennych
Forum PHP.pl > Forum > PHP
attimo
  1. <?php function pokaz_koszyk()
  2. {
  3. $polaczenie = mysql_connect('', '', '') or die("brak polaczenia: ".mysql_error());
  4. $baza = mysql_select_db('attimo_cba_pl',$polaczenie) or exit("nie wybrano bazy, blad". mysql_error());
  5. mysql_query("SET NAMES utf8");
  6. mysql_query("SET CHARACTER_SET utf8_polish_ci");
  7. $zapytanie = "SELECT id,nazwa, opis, zdjecie, cena FROM Produktyelektronika WHERE id=" .join(' OR id=', $_SESSION['koszyk']);
  8. $wynik = mysql_query($zapytanie, $polaczenie) or die(mysql_error());
  9. while($rekord = mysql_fetch_assoc($wynik))
  10. {
  11.  
  12. echo "<div class='pokazkoszprod'>";
  13. echo "<table class='pokazkosztab'>";
  14.  
  15.  
  16.  
  17. echo "<td class='obrazekpokazkosz'>";
  18.  
  19. echo "<img src=".$rekord['zdjecie']." width='50' height='50' hspace='1' vspace='10' align='left' />" . "</td>";
  20. echo "<td class='nazwapokazkosz'>" . $rekord['nazwa'];
  21. $nazwa = $rekord['nazwa'];
  22. $cel = 'http://attimo.cba.pl/pokazprodukt.php';
  23. ?>
  24.  
  25. <a href = "<?php echo $cel;?>?akcja=wyswietl&id=<?php echo $rekord['id'];?>">Opis</a>
  26.  
  27. <?php
  28. ?>
  29. <form action = "<?php echo $_SERVER['PHP_SELF'];?>"method = "post">
  30. <?php
  31. echo "</td>";
  32. echo "<td class='iloscpokazkosz'>";
  33. echo "Cena: " . $rekord['cena']." ". " Sztuk: ". $_SESSION['produkty'];
  34. echo "<input type='text' name='ilosc' size='5' />";
  35. echo "<input type='hidden' name='id' value=".$_rekord['id']." />";
  36. echo "<input type='submit' name='ok' value='Dodaj' />";
  37.  
  38. if ($_POST['ok']){
  39. $ilosc = $_POST['ilosc'];
  40. $_SESSION['produkty'] = $_SESSION['produkty'] + $ilosc;
  41. }
  42. ?>
  43. </form>
  44. <?php
  45. echo "</table>";
  46. echo "</div>";
  47.  
  48. }
  49.  
  50.  
  51. }
  52. ?>


Dlaczego źle dodaje ? i jak zrobić by dla każdego produktu ilość sztuk była indywidualna ?
futura
Cytat
jak zrobić by dla każdego produktu ilość sztuk była indywidualna


Musisz stworzyć tablicę dwuwymiarową, tzn. $koszyk['nazwa_produktu']['ilosc_sztuk']
attimo
  1. array_push($_SESSION['koszyk'],$idd);
  2. array_push($_SESSION['koszyk']['produkty'], 1)


Nie wiem czy jest to właściwy tok myślenia, ale wydaje sie, że powinno zostać zapisane coś takiego:

  1. $_SESSION['koszyk'][0] => id np. 1
  2. produkty[0] => 1
  3. $_SESSION['koszyk'][1] => id np. 5
  4. produkty[1] => 1


Przy opcji dodawania ilości produktu zastosowałbym taki kod:
  1. $_SESSION['koszyk']['produkty'] = $_SESSION['koszyk']['produkty'] + $ilosc;


Zaznaczam, że to wszystko znajduje się w pętli która wybiera produktu i danym id z tablicy
  1. $_SESSION['koszyk']
więc wartość dla 'produkty' powinna sie rownac elementowi ktory znajduje sie w tej tablicy czyli.


Wybiera produkt o id = 5 z bazy i dopisuje do produkty[1] ilosc jaka zostala wpisana w formularzu.
  1. $_SESSION['koszyk'][1] => id np. 5
  2. produkty[1] => 1


Nie wiem czy ta logika jest słuszna. Wiem natomiast, że nie bardzo chce to działać sad.gif wyskakuje błąd:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

Poradzicie coś ?
futura
Cytat
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1


Jak sama treść mówi masz coś źle z zapytaniem do bazy danych.

Ja mam zrobione to tak:

Na stronie z info o produkcie mam tak:

Kod
        <form action=\"koszyk.php\" method=\"post\">
            <input type=\"hidden\" name=\"dodaj\" value=\"".$tablica['id']."\" />
            <div><strong>Ilosc: <input type=\"text\" name=\"ilosc\" value=\"1\" size=\"5\" /> szt.</strong></div>
            <br />
            <div><strong>Cena: ".$tablica['cena']." PLN</strong></div>
            <div><input type=\"image\" src=\"images/dodaj.png\" /></div>
        </form>


gdzie $tablica jest to wynik zapytania do bazy danych.

W pliku koszyk.php mam tak:

Kod
<?php
$koszyk_stan = true;
include("include/config.php");
include("header.php");
include("walidacja.php");

echo "<div id=\"products_big\">
      <form method=\"post\" action=\"koszyk.php\">
      <input type=\"hidden\" name=\"akcja\" value=\"updatekoszyk\" />
          <div class=\"nazwa_koszyk\"></div>
        <table class=\"tabela_koszyk\" cellpadding=\"0\" cellspacing=\"0\">
        <tr><th>Nazwa produktu</th><th width=\"50\">Ilość</th><th width=\"50\">Usuń</th><th width=\"80\">Cena PLN</th></tr>";
        foreach($koszyk as $klucz=>$wartosc)
        {
            $zapytanie = mysql_query("SELECT * FROM test_produkty WHERE id='".(int)$klucz."' LIMIT 1");
            if (mysql_num_rows($zapytanie)>0)
                {
                    $produkt = mysql_fetch_array($zapytanie);
                    $cena = $produkt['cena'];
                    echo "<tr><td>".$produkt['nazwa']."</td><td><input size=\"4\" type=\"text\" name=\"ilosci[".$klucz."]\" value=\"".$wartosc."\" disabled=\"disabled\" /></td><td><a href=\"koszyk.php?usun=".$klucz."\"><img src=\"images/koszyk_usun.png\" alt=\"Usuń\" /></a></td><td>".($cena*$wartosc)."</td></tr>";
                    }
            }
            echo "<tr><td colspan=\"3\"><strong>Razem: </strong><td><strong>".$suma." PLN</strong></td></tr>";
        echo "</table>
  <div class=\"koszyk_btns\">
      <a href=\"products.php\"><img src=\"images/btn_kontynuuj.jpg\" alt=\"Kontynuuj zakupy\" /></a>"; if(sizeof($koszyk) > 0) {echo "<a href=\"zamowienie.php\"><img src=\"images/btn_zamowienie.jpg\" alt=\"Zamówienie\" /></a></div>";}
  echo "</form></div>
  </div></div><div id=\"main_down\"></div>";
include("footer.php");
?>

W pliku header.php, który includowany jest na początku skryptu, mam:

Kod
if (!isset($_SESSION["koszyk"]))
{
    session_register("koszyk");
    $koszyk=array();
}
else
    $koszyk=unserialize($_SESSION["koszyk"]);
    
if ($koszyk_stan==true)
{
  if ((int)$_POST["dodaj"]>0)
  {
    if (isset($koszyk[(int)$_POST["dodaj"]]))
    {
      $koszyk[(int)$_POST["dodaj"]]+=(int)$_POST["ilosc"];
    }
    else
    {
      $koszyk[(int)$_POST["dodaj"]]=(int)$_POST["ilosc"];
    }
  }
  
  if ((int)$_GET["usun"]>0)
  {
    unset($koszyk[(int)$_GET["usun"]]);
  }
  
  if ($_POST["akcja"]=="updatekoszyk")
  {
    foreach ($koszyk as $klucz=>$wartosc)
    {
      if ($_POST["ilosci"][$klucz]==0) unset($koszyk[$klucz]);
      else $koszyk[$klucz]=$_POST["ilosci"][$klucz];
    }
  }

  $_SESSION["koszyk"]=serialize($koszyk);
}
  
  $suma=0;
  
  foreach($koszyk as $klucz=>$wartosc)
  {
    $zapytanie = mysql_query("SELECT `cena` FROM `test_produkty` WHERE `id`='".(int)$klucz."' LIMIT 1");
    if (mysql_num_rows($zapytanie)>0)
    {
      $produkt=mysql_fetch_array($zapytanie);
      $cena=$produkt["cena"];
      $suma+=($cena*$koszyk[$klucz]);
    }
  }


Tutaj dodajemy,aktualizuje,my koszyk odnośnie danego produktu, którego "id" zostało pobrane z koszyk.php ($zapytanie = mysql_query("SELECT * FROM test_produkty WHERE id='".(int)$klucz."' LIMIT 1")winksmiley.jpg
attimo
Twoje rozwiązanie wydaje się być bardziej profesjonalne smile.gif. Wiem już gdzie leży dokładnie mój problem, ale nie wiem dlaczego.

Wymyśliłem coś co nie ma prawa nie działać.

$idd = id produktu, wiec w tej zmiennej tablicowej zapisuje sie dla elementu równemu id produktu liczba 1.
  1. $_SESSION['produkty'][$idd] = 1;



  1. echo "Cena: " . $rekord['cena']." ". " Sztuk: ". $_SESSION['produkty'][$rekord['id']]; /*dla kazdego produktu ktory znajduje sie w koszyku wypisywana jest ilość produktu */
  2.  
  3. echo "<input type='text' name='ilosc' size='5' />";
  4. echo "<input type='hidden' name='id' value= ".$_rekord['id']." />"; /* Problem jest tutaj, nie wiem dlaczego, ale do skryptu w którym sprawdzam forumlarz nie przekazywana jest zadna wartosc*/
  5. echo "<input type='submit' name='ok' value='Dodaj' />";




sprawdzanie formularza dodawania.

  1. if ($_POST['ok']){
  2. $ilosc = $_POST['ilosc'];
  3. $id = $_POST['id']; /* równe [/] a teoretycznie powinno przekazywac id*/
  4. $_SESSION['produkty'][$id] = $_SESSION['produkty'][$id] + $ilosc; /* dla elementu rownemu id produktu dodaje sie liczba wpisana w formularzu.*/
  5. }


Gdy do koszyka dodam jeden produkt wszystko dziala, gdy dodam wiecej lub jesli wroce do strony glownej i ponownie wywolam koszyk to juz nie dziala sad.gif
futura
Kod
echo "<input type='hidden' name='id' value= ".$_rekord['id']." />";


Co to jest $_rekord['id'] ? Value musi mieć wartość z tablicy, czyli $rekord['id'] bądź $_SESSION['produkty']['id'].

Cytat
Gdy do koszyka dodam jeden produkt wszystko dziala, gdy dodam wiecej lub jesli wroce do strony glownej i ponownie wywolam koszyk to juz nie dziala


U mnie na każdej stronie includowany jest header.php, gdzie zawiera się inicjacja koszyka, dodawanie albo aktualizacja. Dodatkowo w plikach masz na początku session_start() w celu utrzymania zmiennych sesyjnych? Koszyk działa na sesjach, tak więc jeśli po drodze nie będziesz miał gdzieś session_start() automatycznie zmienne nie będą zapisywały się.
attimo
Rzeczywiście była tam literówka, ale główny problem leżał w pliku gdzie wyświetlałem produkty elektronika.php miałem tam instrukcje która ustawiała zmienną sesyjną produkty na 1. Dlatego za każdym razem gdy wracałem do tego pliku aby dodać inny produkt a następnie wyświetlić koszyk nic się nie wyświetlało. Głupi prosty błąd. Dzięki za zainteresowanie i pomoc. Temat można zamknąć
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.