Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Źle przekazuje POST z bazy danych
Forum PHP.pl > Forum > Przedszkole
palixmp
Witam.

Pruboje przekazac zmienna z bazy danych do następnej strony.

Mam taki kod:
  1. $i = 0;
  2.  
  3. while ($row = mysql_fetch_array($result)) {
  4. $color = ($i % 2) ? '#99CCCD' : '#96BCBD';
  5. echo '<tr style="background-color:'.$color.'"><td bgcolor="#98CD97"><font color=#006766>&nbsp;'.$row['Nazwa'] . '</td>';
  6. echo '<td><font color=#006766>&nbsp;' .$row['IloscSztuk'] . ' </td> ';
  7. echo '<td><font color=#006766>&nbsp;' .$row['IDArtykulu'] . ' </td> '; // tutaj pokazuje dobry id
  8. ?>
  9. <form action="pokaz_kosz.php5" method="post">
  10. <?php
  11. echo '<td>&nbsp; <input type="hidden" name="nowy" value="'.$row['IDArtykulu'] .'"><input type="submit" value="ZzZamow"> </td> ';
  12. ?>
  13. <form>
  14. <?php
  15. $i++; 
  16. }
  17. echo '</table>';
  18. }


natiomiast w zmiennej "nowy" na następnej stronie pokazuje najwyższy IDArtykulu jaki jest w bazie. Np mam 4 artykuly to on pokazuje 4 a nie ten co ma:( Dlaczego??
Pride
Nie rozumiem snitch.gif
Jeżeli masz 4 rzeczy w bazie to:
  1. <?php
  2. echo '<td><font color=#006766>&nbsp;' .$row['IDArtykulu'] . ' </td> ';
  3. ?>

wyświetli ci owe 4 wiersze z bazy.

Znowu na następną stronę przekaże ci tylko 1 wiersz dlatego, że masz tylko 1 input który zostanie wypełniony przy czwartym "obrocie" pętelki.
palixmp
To jak zrobić, żeby przekazac do następnej strony IDArtykulu o danym numerze??

Bo to ma być taki koszyk na zakupy. Podam konkrenie:

Mam:
1 - dlugopis
2 - flamaster
3 - spinacz

i chce kupić flamaster, czyli IDArtykulu 2, klikam w tym rzędzie na przycisk Zamów. Więc co mam napisać, zeby do następnej strony przekazał sie IDArtykulu = 2 questionmark.gif

Bo pętla działa dobrze, bo w każdym wierszu pokazuje kolejny przedmiot z dobrym ID i dobrym opisem, więc nie kumam dlaczego w tym miejscu mi źle wskazuje:(
golaod
Najlepiej robić to na checkboxach.
Co do tego, że pokazuje tylko ostatnie id. No cóż
Tworzysz 4 input hidden o nazwie "name" ale przez php jest widoczny tylko $_POST['name'] OSTATNI czyli z numerem 4.
Chcesz znać wszystki to nadawaj unikalne nazwy.
palixmp
Ok ale:

Ja niemam czegoś takiego:
  1. <?php
  2. echo '<td><font color=#006766>&nbsp;' .$row['IDArtykulu'] . ' </td> ';
  3. ?>


tylko mam :

  1. <?php
  2. echo '<td><input type="hidden" name="nowy" value="'.$row['IDArtykulu'] .'"><input type="submit" value="ZzZamow"> </td> ';
  3. ?>


Wszystko jest w pętli, wartość czyli VALUE jest niby kolejny IDArtykulu, ale przekazuje wartośc największego i niewiem dlaczego? Wie ktoś moze jak przekazać wartośc tego IDArtykulu do następnej strony??

ODP dla golaod:
niemoge nadawac przeciez unikalnych nazw, bo jeśli dodam coś do bazy to musiał bym za każdym razem przeciez dodawac do kodu nastepną nazwę, to sie mija z celem.
golaod
Wyjaśnię Ci może po kolei. Twoja pętla tworzy 4 razy:
dwie komórki
form
ukryty input
przycisk submit
koniec form
I powtarza to aż 4 razy czyli masz 4 razy <form><input type="hidden" /><input type="submit" /></form>
palixmp
No tak:) Ale to nie powinno być tak że w każdym wierszu klikając na ZAMÓW powinna sie przekazywac inna wartość??

Jeśli to jest całkiem źle, to może podpowiesz mi jak zrobić aby przy każdym wierszu byl taki przycisk że jeśli klikne ZAMÓW to do następnej strony przekaże mi wartość z odpowiedniego wiersza??
golaod
W pętli robisz <input type="radio" value="id_artykulu" name="nazwa" />
Na końcu poza pętlą <input type="submit" value="Zamów" />
Oczywiście form też nie jest w pętli tylko początek przed pętlą a zamknięcie po pętli.
Lepiej moim zdaniem robić na checkboxach bo wtedy ludzie mogą więcej rzeczy na raz zamówić.
palixmp
Jakto poza pętląquestionmark.gif

  1. <?php
  2. $i = 0;
  3.  
  4. while ($row = mysql_fetch_array($result)) {
  5. $color = ($i % 2) ? '#99CCCD' : '#96BCBD';
  6. echo '<tr style="background-color:'.$color.'"><td bgcolor="#98CD97"><font color=#006766>&nbsp;'.$row['Nazwa'] . '</td>';
  7. echo '<td><font color=#006766>&nbsp;' .$row['IloscSztuk'] . ' </td> ';
  8. echo '<td><font color=#006766>&nbsp;' .$row['IDArtykulu'] . ' </td> ';
  9.  
  10. echo '<td>&nbsp; <form action="pokaz_kosz.php5" method="post"><input type="hidden" name="nowy" value="'.$row['IDArtykulu'] .'"><input type="submit" value="ZzZamow"><form> </td> ';
  11.  
  12. $i++;
  13. ?>


Przeciez na początku nadaje $i=0 potem rozpoczytam pętle while i na stamym końcu dodaje $i++, więc ten formularz tez jest w pętli.

To moze nasz gdzies napisane jak to sie robi na tych checkboxach??
golaod
A na co Ci to i w ogóle ?
Dobrze chcesz na checkboxach, ok.
  1. <?php
  2. $i = 0;
  3. echo '<form action="pokaz_kosz.php5" method="post">';
  4. while ($row = mysql_fetch_array($result)) {
  5. $color = ($i % 2) ? '#99CCCD' : '#96BCBD';
  6. echo '<tr style="background-color:'.$color.'"><td bgcolor="#98CD97"><font color=#006766>&nbsp;'.$row['Nazwa'] . '</td>';
  7. echo '<td><font color=#006766>&nbsp;' .$row['IloscSztuk'] . ' </td> ';
  8. echo '<td><font color=#006766>&nbsp;' .$row['IDArtykulu'] . ' </td> ';
  9.  
  10. echo '<td><input type="checkbox" name="nowy[]" value="'.$row['IDArtykulu'] .'"></td> ';
  11.  
  12. $i++;
  13. }
  14. echo '<input type="submit" value="ZzZamow">';
  15. echo '</form>';
  16. ?>

Dzięki temu w innym pliku do którego prowadzi formularz zostanie przekazana tablica nowy ze wszystkimi ID które ktoś zaznaczył, dzięki temu wiesz co chce kupić.
Pride
Popatrz, u ciebie to wygląda mniej więcej tak:
  1. <?php
  2.  
  3. $i=1;
  4. while($i<=4)
  5. {
  6. $input = $i;
  7. $i++;
  8. }
  9.  
  10. echo $input;
  11.  
  12. ?>

Widzisz co ci się wyświetli? smile.gif
Musisz to co wysyłasz wsadzić w tablicę a później za pomocą foreach() wyciągnąć wszystko smile.gif
palixmp
Zrobilem to rozwiązanie z checkbox-ami. Tylko jeszcze mam pytanie, jak zrobić żeby przekazać wartości np.

flamastry => 5

Chodzi mi o to zeby zrobić jeszcze pole gdzie będzie się wpisywalo liczbę sztuk. I żeby bylo wiadomo że chce 5 flamastró, albo 3 ołówki idt.

Wyświetlanie zrobiłem tak:

  1. <?php
  2. foreach($nowy as $klucz=>$wartosc)
  3. {
  4.  echo '$nowy['.$klucz.']='.$wartosc.'<br />';
  5.  }
  6. ?>


i wyświetla mi takie coś:
$nowy[0]=2
$nowy[1]=4

To super, rozumiem to;) Tylko jeszcze jak zrobić żeby zapisać np. flamastró 5 itd. bo niewiem jak sie dołącza żeby było połaczone z drugim, czyli IDArtykulu i IlośćSztuk. Prosił bym o podpowiedź.
m
spróbuj tak
CODE
<?php
echo <<<EOT
<form method="POST" action="$_SERVER[PHP_SELF]">
<input type="checkbox" name="artykul[]" value="fl"/> Flamaster szt <input type="text" name="fl"/> <br/>
<input type="checkbox" name="artykul[]" value="sp"/> Spinasz szt <input type="text" name="sp"/><br/>
<input type="checkbox" name="artykul[]" value="dl"/> Długopis szt <input type="text" name="dl"/><br/>
<input type="submit" value="GO" />
</form>
EOT;
if (isset($_POST)) {
echo '<pre>';
print_r($_POST);
echo '</pre>';

}


?>

tylko jeszcze walidację wpisanych danych
palixmp
a pokazał by mi ktoś jak to zrobić, ale na bazie danych? A nie na stałych zmiennych typu "fl" i takich tam... Bo przeciez jak dodam nowy artykul to nie będę robił nowej zmiennej pytu np. dla spinacza skrot 'spi'.

Aha, no i sorrki za pytanie, ale co to jet to <pre> i EOT bo niemoge znaleź wytłumaczenia co to jest sad.gif
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.