Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Koszyk na zakupy problem z wypisywaniem
Basia555
post
Post #1





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 19.04.2015

Ostrzeżenie: (0%)
-----


Witam
Mam problem z dodawaniem produktów do koszyka na zakupy. Niby zrobiłam że działa ale nie mam dalej pomysły jak dojść do finalnego rozwiązania. Problem polega na tym że gdy wybiore obojetnie jakie produkty z bazy danych to ten koszyk powiela mi tylko pierwszy element tablicy tak jakby innych nie było. Mógłbym ktoś zerknąć na ten kod byłabym wdzieczna (IMG:style_emoticons/default/smile.gif)

  1. <?php
  2. if (!isset($_SESSION['koszyk'])) {
  3. $_SESSION['koszyk'] = array();
  4. }
  5.  
  6. if (isset($_GET['reset'])) //chcemy wyczyścić koszyk
  7. {
  8. unset($_SESSION['koszyk']);
  9. header('location: '. $_SERVER['PHP_SELF']. '?'. SID);
  10. exit();
  11. }
  12. ?>
  13.  
  14. <!DOCTYPE html>
  15. <html>
  16. <head>
  17. <meta charset="UTF-8">
  18. <title>Firma budowlana </title>
  19. </head>
  20. <body>
  21. <h1>Twoj koszyk z zakupami</h1>
  22.  
  23. <?php // definicja tablic z towarami oraz cenami
  24.  
  25.  
  26. $i= isset($_GET['i']) ? (int)$_GET['i'] : 0;
  27.  
  28.  
  29. $q = mysql_connect('localhost','root','haslo') or
  30. die('Padl serwer');
  31. $q = mysql_select_db('stronaphp') or die('Padla baza');
  32.  
  33.  
  34. $wynik = mysql_query("SELECT ID, Nazwa_uslugi, Cena_za_metr FROM cennik_uslug")
  35. or die('Błąd zapytania');
  36.  
  37.  
  38.  
  39. $towary = array();
  40. $ceny = array();
  41. while ($row = mysql_fetch_array($wynik))
  42. {
  43. $towary[]=$row['Nazwa_uslugi'];
  44. $ceny[]=$row['Cena_za_metr'];
  45. }
  46. ?>
  47.  
  48. <table border="1">
  49. </thead>
  50. <tr>
  51.  
  52. <th>Nazwa usługi</th>
  53. <th>Cena za metr</th>
  54. </tr>
  55. </thead>
  56. <tbody>
  57.  
  58.  
  59.  
  60. <?php
  61. $suma = 0;
  62. for ($i=0;$i < count($_SESSION['koszyk']); $i++)
  63. {
  64. echo '<tr>';
  65. echo '<td>'.$towary[$_SESSION['koszyk'][$i]].'</td>';
  66. echo '<td align="right">';
  67. echo number_format ($ceny[$_SESSION['koszyk'][$i]],2);
  68. echo ' zlotych</td></tr>';
  69. $suma = $suma + $ceny[$_SESSION['koszyk'][$i]];
  70. }
  71. ?>
  72.  
  73.  
  74. </tbody>
  75. <tfoot>
  76. <tr>
  77. <th align="right">Naleznosc: </th><br>
  78. <th align="right"><?php echo number_format($suma,2); ?> zlotych.</th>
  79. </tr>
  80. </tfoot>
  81. </table>
  82.  
  83. <p><a href="towary.php">Kupuj dalej</a> lub też: <a href="<?php echo $_SERVER['PHP_SELF']; ?>?reset=1">Wyczysc swoj koszyk</a></p>
  84. </body>
  85. </html>
  86.  
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
salfunglandyare
post
Post #2





Grupa: Zarejestrowani
Postów: 150
Pomógł: 31
Dołączył: 10.01.2007
Skąd: Bydgoszcz/Inowrocław

Ostrzeżenie: (0%)
-----


A co przechowujesz w tablicy $_SESSION['koszyk']? Identyfikatory z bazy danych, czy indeksy tablic PHP? Wstaw też kod dodawania czegoś do koszyka.
Próbuj debugować kod, wyświetl sobie print_r($_SESSION['koszyk']) - pokaże Ci, co zawiera ta zmienna, zrób to samo z $towary i $ceny.
Go to the top of the page
+Quote Post
Basia555
post
Post #3





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 19.04.2015

Ostrzeżenie: (0%)
-----



<?php
session_start();
if(!isset($_SESSION['koszyk']))
{
$_SESSION['koszyk']=array();
}
if (isset($_GET['kup']))
{
// jezeli dodajemy jaki¶ produkt do koszyka
$_SESSION['koszyk'][] = $_GET['kup'];
// przekierowanie z uwzględnieniem nie działaj±cych ciasteczek
header('location: '.$_SERVER['PHP_SELF']. '?' .SID);
exit();
}
?>



<b>Twoj koszyk zawiera:
<?php print count($_SESSION['koszyk']); ?> produktow.</b>
<p><a href="koszyk.php">Zobacz koszyk</a></p>

<?php //definicja tablic z towarami oraz cenami

$lacz = mysql_connect('localhost','root','haslo') or
die('Padl serwer');
$lacz = mysql_select_db('stronaphp') or die('Padla baza');

$wynik = mysql_query("SELECT ID, Nazwa_uslugi, Cena_za_metr FROM cennik_uslug ") or die('Błąd zapytania');

?>
<table border="1">
<thead>
<tr>
<th>Opis towaru</th>
<th>cena</th>
</tr>
</thead>
<tbody>

<?php //wyswietlamy towary z tablicy

$i= isset($_GET['i']) ? (int)$_GET['i'] : 0;

$towary = array();
$ceny = array();

while ($row = mysql_fetch_array($wynik))
{
$towary[]=$row['Nazwa_uslugi'];
$ceny[]=$row['Cena_za_metr'];

print '<tr><td>'.$row['ID'].'</td>';
print '<td>'.$row['Nazwa_uslugi'].'</td>';
print '<td>'.$row['Cena_za_metr'].'</td>';

print "<td><a href=\"".$_SERVER['PHP_SELF']."?kup=$i\">Kup produkt</a></td></tr>";
}
?>
</tbody>
</table>
</body>
</html>


</body>
</html>

Ten post edytował Basia555 4.05.2015, 20:42:06
Go to the top of the page
+Quote Post
salfunglandyare
post
Post #4





Grupa: Zarejestrowani
Postów: 150
Pomógł: 31
Dołączył: 10.01.2007
Skąd: Bydgoszcz/Inowrocław

Ostrzeżenie: (0%)
-----


No i widzisz...

ustawiasz:
  1. $i= isset($_GET['i']) ? (int)$_GET['i'] : 0;


więc na początku $i przyjmuje 0.

Dalej wstawiasz:

  1. print "<td><a href=\"".$_SERVER['PHP_SELF']."?kup=$i\">Kup produkt</a></td></tr>";

ale dla Ciebie $i jest cały czas = 0. Stąd dodajesz do koszyka w sesji kolejne 0, które pokrywa się z indeksem pierwszego towaru.

Zamiast tego, w kodzie, w którym dodajesz do koszyka:
  1. print "<td><a href=\"".$_SERVER['PHP_SELF']."?kup=".$row['ID']."\">Kup produkt</a></td></tr>";


a w kodzie z pierwszego posta:
  1. while ($row = mysql_fetch_array($wynik))
  2. {
  3. $towary[$row['ID']]=$row['Nazwa_uslugi'];
  4. $ceny[$row['ID']]=$row['Cena_za_metr'];
  5. }


Przed przetestowaniem opróżnij koszyk i jeszcze raz włóż do niego jakieś towary
Go to the top of the page
+Quote Post
Basia555
post
Post #5





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 19.04.2015

Ostrzeżenie: (0%)
-----


salfunglandyare dzięki wielkie za pomoc (IMG:style_emoticons/default/smile.gif) koszyk działa (IMG:style_emoticons/default/smile.gif)

jeszcze jakbyś mógł mi wyjaśnić jak zrobić żebym mogła zrobić coś takiego, mam np usługę i do niej potrzebne są jakieś materiały. np montaż glazury i do niej potrzeba klej, fugę i nie wiem co tam jeszcze. jak wybiorę tą usługę i wpiszę ilość m^2 to mi wyświetli w koszyku ostatecznie wynik sumy: montaż glazury x ilość m^2+klej*ilość m^2+fuga*ilość m^2

da radę coś takiego zrobić?

chyba najlepiej byłoby do każdej usługi i towaru przyporządkować oddzielne idkat i po tym identyfikować?
Go to the top of the page
+Quote Post
salfunglandyare
post
Post #6





Grupa: Zarejestrowani
Postów: 150
Pomógł: 31
Dołączył: 10.01.2007
Skąd: Bydgoszcz/Inowrocław

Ostrzeżenie: (0%)
-----


Najlepiej umieścić pole, np w osobnym formularzu:

  1. <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>?zapiszPowierzchnie=1">
  2. <legend>Powierzchnia</legend>
  3. <div>
  4. <label for="powierzchnia">Podaj powierznię [m<sup>2</sup>] remontowanego obszaru:</label>
  5. <input type="text" name="powierzchnia" id="powierzchnia" value="<?=htmlspecialchars($_SESSION['powierzchnia']); ?>">
  6. </div>
  7. <input type="submit" value="Zapisz">
  8. </form>


dalej w momencie gdy obsługujesz koszyk, będziesz mogła też obsłużych powierzchnię - można ją trzymać w sesji obok koszyka:
  1. /* inicjuje zmienna */
  2. if(empty($_SESSION['powierzchnia'])){
  3. $_SESSION['powierzchnia'] = 0;
  4. }
  5. if(isset($_GET['zapiszPowierzchnie'])){
  6. /* przetwarza dane formularza powierzchni */
  7. $_SESSION['powierzchnia'] = floatVal($_POST['powierzchnia']);
  8. }


Później już przy obliczeniach możesz wykorzystać:
  1. $suma = 0;
  2. $powierzchnia = 1;
  3. if($_SESSION['powierzchnia']>0{
  4. $powierzchnia = $_SESSION['powierzchnia'];
  5. }
  6. for ($i=0;$i < count($_SESSION['koszyk']); $i++)
  7. {
  8. echo '<tr>';
  9. echo '<td>'.$towary[$_SESSION['koszyk'][$i]].'</td>';
  10. echo '<td align="right">';
  11. echo $powierzchnia.' m<sup>2</sup> x '.number_format ($ceny[$_SESSION['koszyk'][$i]],2);
  12. echo ' zlotych</td></tr>';
  13. $suma = $suma + ($ceny[$_SESSION['koszyk'][$i]] * $powierzchnia);
  14. }


To oczywiście tylko zarys, pokazujący mniej więcej jedną z dróg do uzyskania tego co chcesz. Warunki itp. mogą być inne, dostosujesz to sobie wg. własnych potrzeb.

//EDIT, a może po prostu nie zrozumiałem, o co zapytałaś (IMG:style_emoticons/default/wink.gif)

Ten post edytował salfunglandyare 4.05.2015, 22:17:11
Go to the top of the page
+Quote Post
Basia555
post
Post #7





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 19.04.2015

Ostrzeżenie: (0%)
-----


Chodziło mi o dodanie pola w które bede wpisywała ilość i mnożyła przez cene danej usługi, a druga sprawa to ma sumować wszystkie pola z bazy z takim samym idkat i mnożyć przez to pole w którym wpisujemy ilość metrów kwadratowych. Chyba jeszcze nie to o co mi chodziło (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
salfunglandyare
post
Post #8





Grupa: Zarejestrowani
Postów: 150
Pomógł: 31
Dołączył: 10.01.2007
Skąd: Bydgoszcz/Inowrocław

Ostrzeżenie: (0%)
-----


To ta pierwsza część już jest (IMG:style_emoticons/default/biggrin.gif)

a gdzieś, gdzie chcesz to wszystko sumować

  1. SELECT *, (Cena_za_metr * ILOSC_M2) AS Cena_za_powierzchnie FROM towary WHERE idkat = IDKAT;

Podajesz ILOSC_M2 i IDKAT
w zwrocie dostajesz $row['Cena_za_powierzchnie']

Czy o to chodzilo?
Go to the top of the page
+Quote Post
Basia555
post
Post #9





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 19.04.2015

Ostrzeżenie: (0%)
-----


Cytat(salfunglandyare @ 5.05.2015, 21:03:02 ) *
To ta pierwsza część już jest (IMG:style_emoticons/default/biggrin.gif)

a gdzieś, gdzie chcesz to wszystko sumować

  1. SELECT *, (Cena_za_metr * ILOSC_M2) AS Cena_za_powierzchnie FROM towary WHERE idkat = IDKAT;

Podajesz ILOSC_M2 i IDKAT
w zwrocie dostajesz $row['Cena_za_powierzchnie']

Czy o to chodzilo?


To chyba jeszcze nie jest to o co mi chodzi. Da radę zrobić abym mogła do każdego wiersza w koszyku oddzielnie wpisywać powierzchnię w m^2 lub cene za metr? A jeśli chodzi o tą drugą część to chodzi mi o to co na obrazku

http://naforum.zapodaj.net/6bab60629335.jpg.html

Ten post edytował Basia555 7.05.2015, 20:29:18
Go to the top of the page
+Quote Post
salfunglandyare
post
Post #10





Grupa: Zarejestrowani
Postów: 150
Pomógł: 31
Dołączył: 10.01.2007
Skąd: Bydgoszcz/Inowrocław

Ostrzeżenie: (0%)
-----


Jak najbardziej, ale będzie trzeba trochę przerobić całość. Generalnie, zamiast dodawania do koszyka przez url:
  1. <a href=\"".$_SERVER['PHP_SELF']."?kup=$i\">Kup produkt</a>

trzebaby całość zmodyfikować:
  1. <fprm method=\"get\" action=\"".$_SERVER['PHP_SELF']."\">
  2. <input type=\"hidden\" name=\"kup\" value=\"$i\">
  3. <input type=\"text\" name=\"powierzchnia\" value=\"$ilosc\">
  4. <input type=\"submit\" value=\"Kup produkt\">
  5. </form>


W takim przypadku dostaniesz $_GET['kup'] = ID (tak jak do tej pory), ale dodatkowo $_GET['powierzchnia'], którą będziesz musiała również zachować w sesji, np jako $_SESSION['koszyk_powierzchnia'][$_GET['kup']]=$_GET['powierzchnia'];

wtedy na tej samej zasadzie co produkt ($_SESSION['koszyk']) będziesz miała informacje o $_SESSION['koszyk_powierzchnia'] (ten sam klucz).
Go to the top of the page
+Quote Post
Basia555
post
Post #11





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 19.04.2015

Ostrzeżenie: (0%)
-----


Cytat(salfunglandyare @ 7.05.2015, 21:52:16 ) *
Jak najbardziej, ale będzie trzeba trochę przerobić całość. Generalnie, zamiast dodawania do koszyka przez url:
  1. <a href=\"".$_SERVER['PHP_SELF']."?kup=$i\">Kup produkt</a>

trzebaby całość zmodyfikować:
  1. <fprm method=\"get\" action=\"".$_SERVER['PHP_SELF']."\">
  2. <input type=\"hidden\" name=\"kup\" value=\"$i\">
  3. <input type=\"text\" name=\"powierzchnia\" value=\"$ilosc\">
  4. <input type=\"submit\" value=\"Kup produkt\">
  5. </form>


W takim przypadku dostaniesz $_GET['kup'] = ID (tak jak do tej pory), ale dodatkowo $_GET['powierzchnia'], którą będziesz musiała również zachować w sesji, np jako $_SESSION['koszyk_powierzchnia'][$_GET['kup']]=$_GET['powierzchnia'];

wtedy na tej samej zasadzie co produkt ($_SESSION['koszyk']) będziesz miała informacje o $_SESSION['koszyk_powierzchnia'] (ten sam klucz).



A jak zrobić żeby można było w koszyku dopiero zmieniać ilość i nie dla wszystkich pól taka sama powierzchnie tylko dla pól o danym IDKAT? I jeszcze jedno jak dodać do pliku towary.php fukcję która będzie mi wypisywała wszystkie potrzebne materiały z innej tabeli do danej usługi?
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 20:16