Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Foreach - wyodrebnianie danych
Forum PHP.pl > Forum > Przedszkole
Barcelona
Witam. Mam taki problem.
Mam zrobiony cennik i koszyk, który odczytuje dane z sesji i zapisuje dane w tabeli.
Wykorzystuje do tego celu pętle foreach:

  1. foreach($_SESSION["koszyk"] as $indeks=>$kosz)


I teraz chce te produkty, które znajdują się w tabeli przesłać formularzem za pomocą POST do zamówienia.

Próbowałem to zrobić również za pomocą foreach:

  1. foreach($_SESSION["koszyk"] as $indeks=>$kosz){
  2. echo "<form action=\"zamowienie.php\" method=\"POST\">
  3. <input type=\"hidden\" name=\"1\" value=\"{$kosz["towar"]}\" />
  4. <input class=\"m-idz\" type=\"submit\" value=\"usuń\" />
  5. </form>";
  6. }

Ale niestety pokazuje mi tyle przycisków ile jest produktów w koszyku.

Chciałbym to zrobić tak żeby był tylko jeden przycik, który wyśle wszystkie produkty do zamówienia.
Pozdrawiam.
nospor
No ale myslisz troche nad kodem co piszesz?
Dales przycisk w petli to ci generuje ten przycisk tyle razy ile razy petla sie obraca...
Barcelona
Własnie wiem że to w pętli jest zrobione.
Od rana sie zastanawiam nad kodem i juz mi brakuje sił.
Dodam że dopiero sie ucze robic w php i nie ogarniam jeszcze wszystkich rzeczy, dlatego pisze tutaj.
nospor
To jak czegos nie chcesz by sie generowalo w petli to tego do tej petli nie wkladaj. Tu php nie ma nic do rzeczy - to odrobina pomyslunku.

Daj to co ma nie byc w petli poza lub pzed pętlą.
Przykladowo <form> ma byc przed petla
a przycisk i </form> poza.
Barcelona
Zrobiłem tak:

  1. echo "<form action=\"zamowienie.php\" method=\"POST\">";
  2. foreach($_SESSION["koszyk"] as $indeks=>$kosz){
  3.  
  4. echo "<input type=\"hidden\" name=\"1\" value=\"{$kosz["towar"]}\" />";
  5. }
  6.  
  7. echo "<input class=\"m-idz\" type=\"submit\" value=\"zamawiam\" />
  8. </form>";


I mam jeden przycisk ale do zamowienia leci tylko jeden produkt a nie wszystkie.
nospor
No bo dla kazdego produktu dales tę samą nazwę. A postem lecą pola po nazwach, wiec kazde kolejne pole nadpisuje poprzednie. Nadaj nazwę tablicową:
...name="nazwa[]".....

A w $_POST['nazwa'] bedziesz mial tablice wartosci
Barcelona
Formularz zrobiłem tak jak pisałeś

  1. echo "<form action=\"zamowienie.php\" method=\"POST\">";
  2. foreach($_SESSION["koszyk"] as $indeks=>$kosz){
  3. echo "<input type=\"hidden\" name=\"nazwa[]\" value=\"{$kosz["towar"]}\" />";
  4. }
  5. echo "<input class=\"m-idz\" type=\"submit\" value=\"zamawiam\" />
  6. </form>";


a w zamowienie.php dałem

  1. echo $_POST['nazwa'];


Ale niestety pokazuje mi Array.

Pewnie jest to banalne ale naprawde juz długo sie z tym mecze. Proszę o pomoc.

Oto cały kod koszyka.

  1. <?
  2. $sql_serwer = "localhost";
  3. $sql_login = "****";
  4. $sql_haslo = "****";
  5. $sql_baza = "****";
  6. $sql_tabela = "****";
  7.  
  8. function odbierz($txt) {
  9. if (get_magic_quotes_gpc()) $txt = stripslashes($txt);
  10. return str_replace(array('\\',"'"), array('\\\\',"\'"), trim($txt));
  11. }
  12.  
  13.  
  14. $id = odbierz($_REQUEST["id"]);
  15. $sz = isset($_REQUEST["sz"])?number_format($_REQUEST["sz"],0,".",""):"";
  16.  
  17. if ($id<>"") {
  18. if (mysql_connect($sql_serwer, $sql_login, $sql_haslo)
  19. and mysql_select_db($sql_baza)) {
  20. $wynik = mysql_query("SELECT * FROM $sql_tabela WHERE id='$id'");
  21. }
  22. if ($wynik and mysql_num_rows($wynik)==1) {
  23. $dane = mysql_fetch_array($wynik);
  24. $_SESSION["koszyk"]["$id"]["towar"]=$dane["towar"];
  25. $_SESSION["koszyk"]["$id"]["cena"]=$dane["cena"];
  26.  
  27. if ($sz=="") $_SESSION["koszyk"]["$id"]["ile"]++;
  28. else if ($sz>=1) $_SESSION["koszyk"]["$id"]["ile"]=$sz;
  29. else if ($sz<=0) unset($_SESSION["koszyk"]["$id"]);
  30. }
  31. }
  32.  
  33.  
  34. if (count($_SESSION["koszyk"])>0) {
  35. echo "
  36. <style type=\"text/css\">
  37. tr:nth-child(odd) {background-color:#2b5584;}
  38. tr:nth-child(even) {background-color:#eef2f6;}
  39. </style>
  40. <table border=\"1\" class=\"m-tabela\">
  41. <colgroup>
  42. <col />
  43. <col align=\"right\" />
  44. <col align=\"center\" />
  45. <col align=\"right\" />
  46. </colgroup>
  47. <tr><td>towar</td><td>cena</td><td>sztuk</td><td>łącznie</td></tr>";
  48.  
  49. foreach($_SESSION["koszyk"] as $indeks=>$kosz) {
  50. echo "<tr>";
  51. echo "<td>{$kosz["towar"]}</td>";
  52. echo "<td>{$kosz["cena"]} zł</td>";
  53. echo "<td>
  54. <form action=\"\" method=\"get\" style=\"display:inline;\">
  55. <div style=\"display:inline;\">
  56. <input type=\"hidden\" name=\"dzial\" value=\"koszyk\" />
  57. <input type=\"hidden\" name=\"id\" value=\"$indeks\" />
  58. <input type=\"text\" name=\"sz\" value=\"{$kosz["ile"]}\"
  59. style=\"width:25px;\" />
  60. <input class=\"m-idz\" type=\"submit\" value=\"zmień\" style=\"width:45px;\" />
  61. </div></form>
  62. <form action=\"\" method=\"get\" style=\"display:inline;\">
  63. <div style=\"display:inline;\">
  64. <input type=\"hidden\" name=\"dzial\" value=\"koszyk\" />
  65. <input type=\"hidden\" name=\"id\" value=\"$indeks\" />
  66. <input type=\"hidden\" name=\"sz\" value=\"0\"
  67. style=\"width:25px;\" />
  68. <input class=\"m-idz\" type=\"submit\" value=\"usuń\" style=\"width:45px;\" />
  69. </div></form>
  70. </td>";
  71. echo "<td>".number_format($kosz["cena"]*$kosz["ile"],2,".","");
  72. echo " zł</td>";
  73. echo "</tr>";
  74. $lacznie +=$kosz["cena"]*$kosz["ile"];
  75. }
  76. echo "<tr><td colspan=\"3\" align=\"right\">
  77. w sumie: </td><td>";
  78. echo number_format($lacznie,2,".","")." zł</td></tr>";
  79. echo "</table>";
  80. echo "<p>Jeżeli jesteś pewny/a swojego wyboru proszę kliknąć w opcje \"Zamówienie\", które znajduje się poniżej.<br /></p>
  81. <p>Proszę pamiętać że osoba, która jest zarejestrowana na stronie ma ułatwiony proces zamawiania. Dane do zamówienia będą wprowadzone automatycznie z bazy danych.</p><p>Po złożeniu zamówienia należy w przeciągu 7 dni dokonać wpłaty za zamówione produkty.</p>";
  82. // echo $kosz["towar"];
  83. // echo "{$kosz["towar"]}";
  84. // echo $_SESSION = array("towar");
  85. echo "<form action=\"zamowienie.php\" method=\"POST\">";
  86. foreach($_SESSION["koszyk"] as $indeks=>$kosz){
  87.  
  88. echo "<input type=\"hidden\" name=\"nazwa[]\" value=\"{$kosz["towar"]}\" />";
  89. }
  90.  
  91. echo "<input class=\"m-idz\" type=\"submit\" value=\"zamawiam\" />
  92. </form>";
  93. } else echo "<p>Koszyk jest pusty...</p>";
  94. ?>

nospor
No przeciez napisalem ci ze otrzymasz tablice....

print_r($_POST['nazwa']);
Barcelona
Wiem że pisałeś ale mi niestety sprawia to dość dużo trudności - Dopiero się ucze, więc proszę o wyrozumiałość.

To co napisałeś dużo mi pomogło i rozwiązało mój problem.

Teraz mam kolejne pytanie.

Wszystkie produkty przeskoczyły do zamówienia w postaci

Array ( [0] => towar1 [1] => towar2 [2] => towar3 )

A jest możliwość aby tą tablice rozbic na zmienne?
np.
  1. $zmienna1 = towar1
  2. $zmienna2 = towar2


Dobra, problem rozwiązany smile.gif
zrobiłem $towar[1];
Dzieki za pomoc

Chodzi o to że chce to zamówienie do bazy wrzucić.

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