Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP] Problem z formularzem / Wiele submitów
xeno
post
Post #1





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 2.03.2013

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


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. ?>


--------------------
  1. if($me < $problem){
  2. echo "spamuj na forum";
  3. } else {
  4. echo "zaspamuj na wszelki wypadek";
  5. }
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
XP'ek
post
Post #2





Grupa: Zarejestrowani
Postów: 263
Pomógł: 9
Dołączył: 3.05.2009
Skąd: Wroc

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


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.
Go to the top of the page
+Quote Post
xeno
post
Post #3





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 2.03.2013

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


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?


--------------------
  1. if($me < $problem){
  2. echo "spamuj na forum";
  3. } else {
  4. echo "zaspamuj na wszelki wypadek";
  5. }
Go to the top of the page
+Quote Post
slawiz
post
Post #4





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 27.06.2012

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


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. ?>
Go to the top of the page
+Quote Post
xeno
post
Post #5





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 2.03.2013

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


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.


--------------------
  1. if($me < $problem){
  2. echo "spamuj na forum";
  3. } else {
  4. echo "zaspamuj na wszelki wypadek";
  5. }
Go to the top of the page
+Quote Post
_Borys_
post
Post #6





Grupa: Zarejestrowani
Postów: 587
Pomógł: 190
Dołączył: 5.02.2011
Skąd: 64-800

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


  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

Ten post edytował _Borys_ 3.03.2013, 11:56:34
Go to the top of the page
+Quote Post
xeno
post
Post #7





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 2.03.2013

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


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"; }


--------------------
  1. if($me < $problem){
  2. echo "spamuj na forum";
  3. } else {
  4. echo "zaspamuj na wszelki wypadek";
  5. }
Go to the top of the page
+Quote Post
_Borys_
post
Post #8





Grupa: Zarejestrowani
Postów: 587
Pomógł: 190
Dołączył: 5.02.2011
Skąd: 64-800

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


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.

Ten post edytował _Borys_ 3.03.2013, 12:50:41
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 20.08.2025 - 05:52