Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Zliczanie ilości kliknięć w dane pole
Forum PHP.pl > Forum > Przedszkole
Hikamare
Mam problem - stworzyłem sobie niewielki skrypt, który ma być takim.. magazynem z możliwością pobrania z niego sprzętu do koszyka - problem pojawił mi się, kiedy chciałbym, żeby kliknięcie w dodanie do koszyka zwiększało ilość, a nie tworzyło nowy wpis rekord w bazie - poradziłem sobie jednak i z tym, przy czym działa to tylko przy jednym z wpisów.
Jeżeli mam na przykład trzy rekordy w bazie, to tylko przy pierwszym wyborze skrypt działa, reszta go obchodzi. Oto kod :

  1. /* Pierwsza kategoria */
  2. if($_GET['kat']=='narzedzia'){
  3. $wynik = mysql_query("SELECT * FROM narzedzia")
  4. or die("Bł?d w zapytaniu!");
  5.  
  6. while($rek = mysql_fetch_array($wynik)) {
  7. ?>
  8. <table style="margin-left: 10px;"><form method="POST" action=''>
  9. <tr><td><p align="center"><?php echo $rek['id']; ?></p></td>
  10. <td style="width: 150px; "><?php echo '<input type="text" name="wybor" value="'.$rek['nazwa'].'" readonly="readonly">'; ?></td>
  11. <td align="left"><input type="submit" value="DODAJ"></form>
  12. </td>
  13. </tr></table>
  14. <?php
  15. }
  16. // ZLICZANIE ILOŚCI DANEGO NARZĘDZIA ( ILOŚĆ ) //
  17. $post = $_POST['wybor'];
  18. echo $post;
  19. if($post == null) {}
  20. else { $porow = mysql_query("SELECT * FROM wybor") //Pobiera tabelę wybór//
  21. or die("Błąd w zapytaniu!");
  22. $wyn = mysql_fetch_array($porow);
  23. if ( $post == $wyn['nazwa'] ){ //Jeżeli wybrane narzędzie znajduje się już w bazie//
  24. $wzr = ++$wyn['ilosc'];
  25. $wzrost = mysql_query("UPDATE wybor SET ilosc='$wzr' WHERE nazwa='$post'") //zwiększ ilość o jeden//
  26. or die ("Coś poszło nie tak");
  27. header('Location: index.php');
  28. }
  29. else { $query = @mysql_query("INSERT INTO wybor SET nazwa='$post'"); // Jeżeli narzędzie nie istnieje jeszcze w bazie, dodaj je//
  30. if($query) echo "<font size='1'>Rekord został dodany poprawnie</font>";
  31. else echo "Bł?d nie udało się dodać nowego rekordu";
  32. $post = null;
  33. }
  34. }
  35. }
  36. //KONIEC ZLICZANIA//
  37.  


// Edit:
Teraz do głowy wpadło mi zastosowanie pętli - dobrze kombinuję?
// Edit 2:
Zastosowałem pętlę while, ale teraz skrypt w ogóle nie reaguje..
golabow
Myślę że lepszym rozwiązaniem było by użycie zmiennej sesji.
Skrypt który odczytuje dodany towar i zapisuje go w koszyku użytkownika:
  1. <?php
  2. session_start(); // start sesji
  3.  
  4. // jezeli jest juz w sesji to pobierz, w przeciwnym przypadku stworz nowa tablice
  5. $koszyk = isset( $_SESSION['koszyk'] ) ? $_SESSION['koszyk'] : array();
  6. $wybor = $_GET['wybor']; // zmienna ktora przechowuje nazwe towaru
  7.  
  8. // zwiekszenie w koszyku ilosc towaru
  9. if ( isset( $koszyk[$wybor] ) ) // jezeli istnieje w koszyku
  10. {
  11. $koszyk[$wybor]++;
  12. }
  13. else // w przeciwnym przypadku dodajesz towar do koszyka
  14. {
  15. $koszyk[$wybor] = 1;
  16. }
  17.  
  18. // zapisanie zmian w koszyku
  19. $_SESSION['koszyk'] = $koszyk;
  20. ?>


Mam nadzieje że takie rozwiązanie będzie dla Ciebie prostsze i wygodniejsze niż używanie bazy danych. Natomiast jeżeli zależało Ci na utrzymaniu koszyka na dłużej niż czas sesji to zawsze możesz go cashować.

Jeżeli chcesz szybko zobaczyć wynik działanie takiego koszyka to możesz go wypisać w tabelce HTML:
  1. <table>
  2. <tr>
  3. <th>Towar</th>
  4. <th>Ilosc</th>
  5. </tr>
  6. <?php foreach( $koszyk as $towar => $ilosc ): ?>
  7. <tr>
  8. <td><?php echo $towar;?></td>
  9. <td><?php echo $ilosc; ?></td>
  10. </tr>
  11. <?php endforeach; ?>
  12. </table>
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.