Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]Formularz wysyła dane tylko z ostatniej linii tabeli
Forum PHP.pl > Forum > Przedszkole
marcin_s_marki
Tworze formularz zamowien pizzy, pobierajacy informacje z bazy danych. Problem polega na tym, ze po kliknieciu "zamawiam" zostaja wyslane tylko wartosci z ostatniej linii tabeli.

zamowienie.php:

Kod
$pizza = "select * from pizza";
                   $wpizza = mysql_query($pizza);
                  
                   $ile_znalezionych = mysql_num_rows($wpizza);
                  
                  
                  
                       echo '<form action="dodaniezamowienia.php" method="post">';
                       echo '<table>';
                       echo '<tr><th colspan="8">Pizza</th></tr>';
                      
                                                      
                   for ($i=1; $i<=$ile_znalezionych; $i++)
                   {
                      
                       $wiersz = mysql_fetch_array($wpizza);
                                                      
                       echo '<tr>';
                       echo '<th>',$wiersz['nazwa'],'</th>';
                       echo '<td>',$wiersz['opis'],'</td>';
                       echo '<td><input type="text" name="mala" size="1"></td>';
                       echo '<td>',$wiersz['mala'],'</td>';
                       echo '<td><input type="text" name="srednia" size="1"></td>';
                       echo '<td>',$wiersz['srednia'],'</td>';
                       echo '<td><input type="text" name="duza" size="1">
                                   <input type="hidden" name="nazwapizzy" value='.$wiersz['nazwa'].'></td>';
                       echo '<td>',$wiersz['duza'],'</td>';
                       echo '</tr>';
                      
                   }
                      
                       echo '<tr><th colspan="8"><input type="submit" value="Zamawiam"></th></tr>';
                       echo '</table>';
                       echo '</form>';
                  
                   }
                   else
                   {
                       echo 'Niepoprawne dane.';
                   }


dodaniezamowienia.php:

Kod
<?php
  
      
  
       if ($mala >= 1)
       {
       echo $mala, ' mała ', $nazwapizzy;
       }
      
       if ($srednia >= 1)
       {
       echo $srednia, ' srednia ', $nazwapizzy;
       }
      
       if ($duza >= 1)
       {
       echo $duza, ' duza ', $nazwapizzy;
       }
      
   ?>
deceq
musisz zastosować coś takiego przy każdej wartości którą chcesz wysłać:
  1. <input type="hidden" name="nazwapizzy" value='.$wiersz['nazwa'].'>


Przecież formularz samego <tr>'a nie wyśle smile.gif
marcin_s_marki
Niestety opcja z "hidden" w tym przypadku nie wychodzi. Problem polega na tym że wszystkie dane są przesyłane do następnej strony ale niestety pętla nie rozpoznaje wierszy i zawsze przesyła ostatni wiersz niezależnie ile by ich było. Wydaje mi się że potrzebuje coś w rodzaju "kotwicy" żeby każdy wiersz miał swój oddzielny identyfikator.
Kicok
  1. <?php
  2. echo '<input type="hidden" name="nazwapizzy[' . $wiersz['id'] . ']" value="' . $wiersz['nazwa'] . '"></td>';
  3. ?>
JoShiMa
Cytat(marcin_s_marki @ 2.08.2008, 16:10:29 ) *
Tworze formularz zamowien pizzy, pobierajacy informacje z bazy danych. Problem polega na tym, ze po kliknieciu "zamawiam" zostaja wyslane tylko wartosci z ostatniej linii tabeli.

zamowienie.php:

Nic dziwnego. Uruchom skrypt i wywołaj ten formularz, a potem zobaczysz, że w każdym wierszu tabeli powtarzają Ci się nazwy zmiennych w inputach. Ponieważ wartości się przekrywają zostaje tylko ta z ostatniego wiersza. Zgadza się? Żeby tego uniknąć należy zrobić tak:

  1. <?php
  2. for ($i=1; $i<=$ile_znalezionych; $i++)
  3.  {
  4.  
  5.  $wiersz = mysql_fetch_array($wpizza);
  6.  
  7.  echo '<tr>';
  8.  echo '<th>',$wiersz['nazwa'],'</th>';
  9.  echo '<td>',$wiersz['opis'],'</td>';
  10.  echo '<td><input type="text" name="mala[$i]" size="1"></td>';
  11.  echo '<td>',$wiersz['mala'],'</td>';
  12.  echo '<td><input type="text" name="srednia[$i]" size="1"></td>';
  13.  echo '<td>',$wiersz['srednia'],'</td>';
  14.  echo '<td><input type="text" name="duza[$i]" size="1">
  15.  <input type="hidden" name="nazwapizzy[$i]" value='.$wiersz['nazwa'].'></td>';
  16.  echo '<td>',$wiersz['duza'],'</td>';
  17.  echo '</tr>';
  18.  
  19.  }
  20. ?>


Następnie do wysłanych danych odwołujesz się jak do tablicy.
$_POST['mala'][1], $_POST['mala'][2],...,$_POST['duża'][1], $_POST['nazwapizzy'][1] itd.
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.