Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Problem ze zmiennymi w pętli przekazywanej z formularza
Forum PHP.pl > Forum > Przedszkole
mario_7
Witam na forum, bo właśnie założyłem konto, choć od jakiegoś czasu zdarza mi się tu zaglądać.
Mam pewien problem, a mianowicie jak pisze w temacie nie ogarniam przekazywania danych z formularza z pętli. To znaczy:
Na początku ktoś określa ile rekordów chce dodać, potem pętla tworzy odpowiednią ilość komórek w formularzu a następnie wysyła, żeby to wpakować do bazy.
Plik "formularzdowydania.php":
  1. <html>
  2. <head>
  3. </head>
  4. <body>
  5. <?php
  6. mysql_connect("localhost", "root", "");
  7. mysql_select_db("magazyn");
  8. $c= $_POST['c'];
  9. echo '<form action="wydanie.php" method="post">
  10. znowu podaj ilosc sztuk <input type="text" name="zmienna" /><br>
  11. Klient: <select name="idklienta"><
  12. ';
  13.  
  14. $array2 = mysql_query('SELECT * FROM klienci ORDER BY idk ASC');
  15.  
  16. if(mysql_num_rows($array2) > 0)
  17. {
  18. while($l = mysql_fetch_assoc($array2))
  19. {
  20. echo "<option value='{$l['idk']}'>{$l['nazwaklienta']}</option>";
  21. }
  22. }
  23.  
  24. echo '</select></br>
  25. ';
  26. for($b=0;$b<$c;$b++)
  27. {
  28. 'szt: <input type="text" name="szt' . $b;
  29. echo'">
  30. szyba: <select name="idszyby' . $b;
  31. echo'"><
  32. ';
  33.  
  34.  
  35.  
  36. $array = mysql_query('SELECT * FROM katalog ORDER BY ids ASC');
  37.  
  38. if(mysql_num_rows($array) > 0)
  39. {
  40. while($l = mysql_fetch_assoc($array))
  41. {
  42. echo "<option value='{$l['ids']}'>{$l['nazwaszyby']}</option>";
  43. }
  44. }
  45.  
  46. echo '</select></br>';
  47. }
  48. <br/><input type="submit" value="Dodaj"></form>';
  49. ?>
  50. </body>
  51. </html>

plik: "wydanie.php"
  1. <html>
  2. <head></head>
  3. <body>
  4. <?php
  5. mysql_connect("localhost", "root", "");
  6. mysql_select_db("magazyn");
  7. $zmienna= $_POST['zmienna'];
  8. $idklienta= $_POST['idklienta'];
  9. $dupa = mysql_query("SELECT * FROM 'przyjecie' ORDER BY idt DESC LIMIT 1");
  10. $idt=$dupa+1;
  11. // echo $_POST['ids0'];
  12. for( $w=0; $w<$zmienna; $w++) {
  13. $sztuki = 0;
  14. $id_szyby = 0;
  15. }
  16. for( $b=0; $b<$zmienna; $b++) {
  17. $szt.$b = $_POST["szt$b"];
  18. $idszyby.$b = $_POST["idszyby$b"];
  19.  
  20. $sql=("INSERT INTO wydanie VALUES ('', '$idklienta', '$idszyby.$b', '$idt', '$sztuki.$b', NOW()");
  21. $x = mysql_query($sql);
  22.  
  23. if($x) echo "Dodano szybe";
  24. else echo "Blad, sproboj ponownie";
  25.  
  26. }
  27.  
  28. ?>
  29. <br>
  30. <a href="index.php">powrot</a>
  31.  
  32.  
  33. </body>
  34. </html>


Jeszcze błędy jakie wyskakują:
Notice: Undefined variable: szt in C:\xampp\htdocs\magazyn\wydanie.php on line 17

Notice: Undefined variable: idszyby in C:\xampp\htdocs\magazyn\wydanie.php on line 18

Notice: Undefined variable: idszyby in C:\xampp\htdocs\magazyn\wydanie.php on line 20
Blad, sproboj ponownie
powrot
Byłbym wdzięczny za pomoc, bo zobowiązałem się pomóc kumplowi w zrobieniu czegoś w rodzaju bazy magazynu.
Pewnie jest to jakiś banał, jak sam dział głosi na poziomie przedszkola smile.gif
nospor
nie: $szt.$b = $_POST["szt$b"];

$idszyby.$b = $_POST["idszyby$b"];
a:
$szt = $_POST["szt$b"];

$idszyby = $_POST["idszyby$b"];

I do bazy wkładaj $szt oraz $idszyby
mario_7
Faktycznie, teraz to rozumiem. Skrypt leci dalej. Ale nadal nie wrzuca do tabeli wartości.
a w formularzu mam zostawić jak jest :
  1. {
  2. 'szt: <input type="text" name="szt' . $b;
  3. echo'">
  4. szyba: <select name="idszyby' . $b;
  5. echo'"><

czy pousuwać te $b?
Bo teraz (bez zmiany formularza) otrzymuje:
Notice: Undefined index: idszyby0 in C:\xampp\htdocs\magazyn\wydanie.php on line 18
Blad, sproboj ponownie
Wogóle dzięki za zainteresowanie tematem smile.gif
nospor
nie: $x = mysql_query($sql);
a: $x = mysql_query($sql) or die(mysql_error());
A dowiesz się jaki błąd zwraca ci baza.

zrób też print_r($_POST);
by zobaczyć co idzie z forma.

I w ogóle przeczytaj ten temat i się do niego zastosuj
Temat: Jak poprawnie zada pytanie
mario_7
Otrzymuje coś takiego, jak podam dwa rekordy:
Array ( [zmienna] => 2 [idklienta] => 1 [szt0] => 2 [idszyby0] => 1 [szt1] => 2 [idszyby1] => 2 )

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
nospor
Cytat
Notice: Undefined index: idszyby0 in C:\xampp\htdocs\magazyn\wydanie.php on line 18
Jak możesz dostawać taki komunikat, skoro widać z posta że masz taki indeks

nie: a: $x = mysql_query($sql) or die(mysql_error());
a:

echo $sql;
a: $x = mysql_query($sql) or die(mysql_error());

i pokaz jakwygląda wygenerowane zapytanie.

A najlepiej pokaż jeszcze cały kod po poprawkach

edit: a już widze w zapytaniu blad.

nie: VALUES(.....
a:VALUES(.....)
zjadles nawias zamykający.
mario_7
Ała.. Faktycznie.
Wielkie dzięki, napawdę smile.gif Jeździ i szaleje!
Tylko jeszcze mala kosmetyczna poprawka- nie zwieksza mi o 1 wartości idt, a jest to id transakcji. Będe kombinował, ale jakbyś wpadł szybciej co zrobiłem źle, to możesz napisać smile.gif chodzi o linię 9-10 z pliku wydanie.php
Jeszcze raz dzięki.
nospor
$dupa = mysql_query("SELECT * FROM 'przyjecie' ORDER BY idt DESC LIMIT 1");
$idt=$dupa+1;

.....
Bić czy jeszcze nie bić? Po pierwsze masz błąd zapytania. Jak wyświetlać błedy zapytania już ci napisałem.
Podałem ci nawet link, z którym miałeś się zapoznać, ale widzę olałeś mnie ciepłym moczem. Proszę poraz ostatni: zapoznaj się z nim i do niego zastosuj.


Jak już to zrobisz, to zajrzyj do manuala i zobacz co zwraca mysql_query() i co zrobić by dostać rekord z bazy. Bo mysql_query nie zwraca rekordu z bazy
mario_7
Poczytałem manuala i wykrzesałem coś takiego:
  1. $dupa = mysql_query("SELECT * FROM 'przyjecie' ORDER BY idt DESC LIMIT 1") or die (mysql_error());
  2. $row= mysql_fetch_array ($dupa);
  3. $idt=$row['idt'];


Na ekranie zwraca mi:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''przyjecie' ORDER BY idt DESC LIMIT 1' at line 1

Próbowałem też w pętli (w sumie nie wiem po co) ale to samo
  1. while($row= mysql_fetch_array ($dupa))
  2. {
  3. $idt=$row['idt'];
  4. }
nospor
brawo. A teraz doczytaj w manualu mysql jaka jest różnica między tekstem z nazwą tabeli, a nazwą tabeli.
Oraz do czego służą apostrofy ' oraz do czego służa takie znaczki ` lub ich brak

Bo właśnie to powoduje błąd zapytania
mario_7
Nie wiem. stoję na czymś takim:
  1. $dupa = mysql_query("SELECT * FROM przyjecie ORDER BY 'idt' DESC LIMIT 1") or die (mysql_error());
  2. $row= mysql_fetch_array ($dupa);
  3. $idt=$row["idt"];


Array ( [zmienna] => 1 [idklienta] => 1 [szt0] => 1 [idszyby0] => 3 )
Notice: Undefined index: idt in C:\xampp\htdocs\magazyn\wydanie.php on line 12
Dodano szybe

Dodaje rekord, ale nie zmienia idt.
nospor
1) Mówiłem byś rozróżniał 'tekst' od nazwy pola czy tabeli.... nie: 'idt' a : idt

2) Widać twoja tabela przyjecie nie ma pola o nazwie idt o czym dość jasno informuje cię ten komunikat:
Notice: Undefined index: idt in C:\xampp\htdocs\magazyn\wydanie.php on line 12
cięzko przeczytać?
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.