Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Problem z formularzem / Wiele submitów
Forum PHP.pl > Forum > Przedszkole
xeno
Witajcie,
Mam pewien problem. Stworzyłem formularz hurtowni, i występuje następujący błąd.

Gdy wpiszę np 10 w polu sztuk i kliknę na pierwszy przycisk "Zamów", POST zwraca mi dane dla 3go przycisku - czyli NULL sztuk i typ 3.
Gdy wpiszę to samo dla 3go pola - jest ok.
W czym może tkwić problem? Oto kod:

  1. <?php
  2.  
  3.  
  4. require 'header.php';
  5.  
  6. require 'config.php';
  7.  
  8. require_once 'user.class.php';
  9.  
  10. if ($_GET['id'] == 'zamow') {
  11.  
  12. $_POST['ile'] = $ile;
  13. $_POST['typ'] = $typ;
  14.  
  15. echo "Ile ".$ile;
  16. echo "Typ ".$typ;
  17.  
  18. }
  19.  
  20.  
  21. echo "<table border=0 cellspacing=5 cellpadding=5><tr>";
  22. $wynik = mysql_query ("SELECT * FROM hurt");
  23. while ($wynik && $rekord = mysql_fetch_array ($wynik)) {
  24.  
  25. $id= $rekord['id_produktu'];
  26. $nazwa= $rekord['nazwa'];
  27. $zdjecie= $rekord['zdjecie'];
  28. $ilosc= $rekord['ilosc'];
  29. $netto= $rekord['netto'];
  30. $podatek= $rekord['podatek'];
  31.  
  32. echo "<td><center>";
  33.  
  34. if ($rekord['dostepny'] == 1) { echo "<b><font color=green>TOWAR DOSTĘPNY</font></b><br>"; } else { echo "<b><font color=red>TOWAR NIEDOSTĘPNY</font></b><br>"; }
  35. echo "<img src=".$rekord['zdjecie']." width=200 height=200><br>";
  36. echo "<b>".$rekord['nazwa']."</b> (Kod: <i>".$rekord['id_produktu']."</i>)<br>";
  37. echo "<b><font color=grey>".$rekord['netto']." PLN/netto</font></b><br>";
  38. echo "<b><font color=black>".($rekord['netto']+$rekord['netto']*$rekord['podatek']/100)." PLN/brutto</font></b><br>";
  39. echo "Na magazynie: ".$rekord['ilosc']."<br>";
  40. if ($rekord['dostepny'] == 1) { echo "<form action='?id=zamow' method='POST'><input type=text name=ile size=3><input type=hidden name=typ value=".$rekord['id_produktu']."> szt. <input type=submit value='Zamów'>"; } else { echo "Brak"; }
  41.  
  42. echo "</center></td>";
  43. }
  44. echo "</tr></table>";
  45. ?>
XP'ek
Ponieważ dla każdego z produktów stosujesz ten sam form z NAME jeśli w ten sposób zastosujesz tablicę to będziesz miał problem rozwiązany.
xeno
Cytat(XP'ek @ 3.03.2013, 10:29:06 ) *
Ponieważ dla każdego z produktów stosujesz ten sam form z NAME jeśli w ten sposób zastosujesz tablicę to będziesz miał problem rozwiązany.

OK, ale nadal nie bardzo wiem jak to rozwiązać. Możesz mi podać jakiś przykład?
slawiz
Jestem początkującym w PHP ale staram ci się pomóc. Ja bym wysłał typ w postaci zmiennej GET sprawdź jak będzie działać poniższy kod:

  1. <?php
  2.  
  3.  
  4. require 'header.php';
  5.  
  6. require 'config.php';
  7.  
  8. require_once 'user.class.php';
  9.  
  10. if ($_GET['id'] == 'zamow' && isset($_GET['nr'])) {
  11.  
  12. $_POST['ile'] = $ile;
  13. $_GET['nr'] = $typ;
  14.  
  15. echo "Ile ".$ile;
  16. echo "Typ ".$typ;
  17.  
  18. }
  19.  
  20.  
  21. echo "<table border=0 cellspacing=5 cellpadding=5><tr>";
  22. $wynik = mysql_query ("SELECT * FROM hurt");
  23. while ($wynik && $rekord = mysql_fetch_array ($wynik)) {
  24.  
  25. $id= $rekord['id_produktu'];
  26. $nazwa= $rekord['nazwa'];
  27. $zdjecie= $rekord['zdjecie'];
  28. $ilosc= $rekord['ilosc'];
  29. $netto= $rekord['netto'];
  30. $podatek= $rekord['podatek'];
  31.  
  32. echo "<td><center>";
  33.  
  34. if ($rekord['dostepny'] == 1) { echo "<b><font color=green>TOWAR DOSTĘPNY</font></b><br>"; } else { echo "<b><font color=red>TOWAR NIEDOSTĘPNY</font></b><br>"; }
  35. echo "<img src=".$rekord['zdjecie']." width=200 height=200><br>";
  36. echo "<b>".$rekord['nazwa']."</b> (Kod: <i>".$rekord['id_produktu']."</i>)<br>";
  37. echo "<b><font color=grey>".$rekord['netto']." PLN/netto</font></b><br>";
  38. echo "<b><font color=black>".($rekord['netto']+$rekord['netto']*$rekord['podatek']/100)." PLN/brutto</font></b><br>";
  39. echo "Na magazynie: ".$rekord['ilosc']."<br>";
  40. if ($rekord['dostepny'] == 1) { echo "<form action='?id=zamow&nr=".$rekord['id_produktu']."' method='POST'><input type=text name=ile size=3> szt. <input type=submit value='Zamów'>"; } else { echo "Brak"; }
  41.  
  42. echo "</center></td>";
  43. }
  44. echo "</tr></table>";
  45. ?>
xeno
Cytat(slawiz @ 3.03.2013, 11:23:05 ) *
Jestem początkującym w PHP ale staram ci się pomóc. Ja bym wysłał typ w postaci zmiennej GET sprawdź jak będzie działać poniższy kod:


To rozwiązanie nie działa - nawet nie pokazuje już numerów. Myślę, że nie o to chodziło XP'ekowi.
_Borys_
  1. <input type="text" name="ile[<?php echo $id ?>]" size="3"/>

Jak $id nie jest liczbą to wtedy ile[] albo z indeksem jakimś ile[3], każdy input inny indeks
xeno
Cytat(_Borys_ @ 3.03.2013, 11:49:21 ) *
  1. <input type="text" name="ile[<?php echo $id ?>]" size="3"/>

Jak $id nie jest liczbą to wtedy ile[] albo z indeksem jakimś ile[3], każdy input inny indeks

Z tym, że teraz jest coś takiego:
Ile: Array

  1. if ($_GET['id'] == 'zamow') {
  2.  
  3. $_POST['ile'] = $ile;
  4. $_POST['typ'] = $typ;
  5. $_POST['zamow'] = $zamow;
  6.  
  7. echo "Ile ".$ile;
  8. echo "Typ ".$zamow;
  9.  
  10. }


...

  1. if ($rekord['dostepny'] == 1) { echo "<form action='?id=zamow' method='POST'><input type=text name=ile[".$id."] size=3><input type=hidden name=typ value=".$rekord['id_produktu']."> szt. <button type=submit name=zamow value=".$rekord['id_produktu'].">Zamów</button>"; } else { echo "Brak"; }
_Borys_
No to w tablicy $_POST['ile'] masz przy którym id było wpisane, sprawdzaj po kolei, jesli w $_POST['ile'] jest jakaś wartość to znaczy że wpisane było coś, indeksy będą wszystkie w $_POST['ile'] ale tam gdzie było wpisane to będzie jakaś wartość przy odpowiednim indeksie. Sprawdzaj poprzez pętlę jakąś
  1. for($i = 0;$i < count($_POST['ile']);$i++){
  2. if($_POST['ile'][$i] != ''){
  3.  
  4. }
  5. }


albo foreach
  1. foreach($_POST['ile'] as $key->$value){
  2. if($value != ''){
  3.  
  4. }

albo zastosuj funkcję array_filter($_POST['ile']); wtedy usunie wszystkie puste wartości i będziesz miał gotową tablicę z tym co było wpisane wraz z przyporządkowanymi indeksami.
To tylko przykłady, prawidłowo to powinieneś najpierw filtrować wyniki z $_POST i zabezpieczyć się przed sql injection.
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.