Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dodanie zmiennej ilości rekordów jednym przyciskiem
Forum PHP.pl > Forum > PHP
damianprz
Struktura bazy danych:



A tutaj kod:

  1. $zapytanko="SELECT * FROM towary";
  2. $rezultat = mysql_query($zapytanko)
  3. or die("Błąd zapytania");
  4. $ile=mysql_num_rows($rezultat);
  5.  
  6. echo "<form action='aktualizacja_2.php' method='post'>";
  7. echo "Data id: <INPUT TYPE='text' NAME='data' VALUE=''><P><BR>";
  8. echo "<table id='tabela'>";
  9. echo '<tr><td>Id</td><td>towar</td><td>Wpisz popyt</td></tr>';
  10.  
  11. for ($i=0; $i <$ile; $i++)
  12. {
  13. $wiersz = mysql_fetch_array($rezultat);
  14. echo '<tr>';
  15. echo '<td>'.$wiersz['id'].'</td>';
  16. echo '<td>'.$wiersz['nazwa'].'</td>';
  17. echo "<td><INPUT TYPE='text' NAME='$i' VALUE=''></td>";
  18. echo '</tr>';
  19. }
  20. echo '</table>';
  21.  
  22. echo "<P><INPUT class='button' type=submit value='AKTUALIZACJA' style='font-family: Verdana; font-size: 16pt; font-weight: bold'><br>
  23. </form>";


który wyświetla taki formularz:



W pliku aktualizacja_2.php do którego odwołuje się powyższy formularz mam coś takiego:

  1. $zapytanko="INSERT INTO produkty
  2. SET
  3. produkty.popyt=".$_POST['value'].",
  4. produkty.id_towaru=".$_POST['i'].",
  5. produkty.id_daty=".$_POST['data']."
  6. ";
  7.  
  8. $rezultat=mysql_query($zapytanko)
  9. or die ("Niestety, nie udało się");


I teraz tak.
$_POST['data'] pobiera w porządku id daty bo próbowałem INSERTOWAĆ coś takiego
  1. produkty.popyt='50',
  2. produkty.id_towaru='1',
  3. produkty.id_daty=".$_POST['data']

i się udało.
Ale jak zrobić żeby pobrało dane popytu i id_towaru które są w pętli w pliku aktualizacja.php i żeby INSERT wprowadził 4 rekordy do tabeli produkty z tą samą datą, ale z różnymi id_towaru i popytami, podanymi w polach INPUT

Za napisane sugestie z góry dziękuję.
Fixus
po raz kolejny kłaniają się podstawy. Skoro masz tą samą datę i wyciągnięte id_towaru to w czym problem ? smile.gif
po prostu dodaj ukryte pola np. tak

  1. echo '<input type="hidden" name="id_towaru$i" value="'.$wiersz['id'].'" />';


z czytujesz wraz z popytem
  1. for($i = 0; $i < count($wiersz); $i++) {
  2. $variable = 'wiersz$i';
  3. $popyt = $_POST[$i];
  4. $id_towaru = $_POST[$variable];
  5. $sql = "insert into tabela (id_towaru, id_daty, popyt) values ('$id_towaru', '$id_daty', '$popyt');
  6. // reszta
  7. }


pozamiatane. w powyższym przykładzie nie ma przypisania zmiennej $id_daty, ale to sobie możesz analogicznie zrobić
damianprz

  1. $variable = 'wiersz$i';


Nie kapuje co to jest to wiersz$i
W pętli to da wynik że
$variable = wiersz1
$variable = wiersz2
$variable = wiersz3
$variable = wiersz4
............

I po co te ukryte pola o
nazwie id_towaru1 id_towaru2 id_towaru3........
i wartości value=1 value=2 value=3.............
Fixus
hmm skoro formularz masz aktualizacja.php a skrypt dodający w aktualizacje_2.php to wyjaśnij mi jak przekażesz wartości ?

otóż formularz nie przekaże Ci czegoś co jest między <td></td> stąd ukryte pole.

po co przekazywać się zapytasz zanim się zastanowisz.

odpowiedź jest prosta. skoro chcesz mieć id danego towaru i jego datę musisz ją z formularza przekazać do funkcji zapisującej to wszystko do bazy

zmienna $variable przyjmuje jak słusznie zauważyłeś pewne stringi. Faktycznie z rozpędu się pomyliłem bo zamiast

$variable = 'wiersz$i'

powinno być

$variable = 'id_towaru$i'

będąc szczerym mogłeś się tego domyślić bo z tego co pisałem można to wywnioskować, no ale ok przyznam tu rację mój błąd.

Jak słusznie zauważyłeś zmienna $variable przyjmuje jako wartości pewne stringi, które o dziwo współgrają z nazwami pól ukrytych w formularzu dzięki czemu możesz je wywołać po przez $_POSt[$variable]


damianprz
  1. echo "<form action='aktualizacja_2.php' method='post'>";
  2. echo "Data id: <INPUT TYPE='text' NAME='data' VALUE=''><P><BR>";
  3. echo "<table id='tabela'>";
  4. echo '<tr><td>Id</td><td>towar</td><td>Wpisz popyt</td></tr>';
  5.  
  6. for ($i=0; $i <$ile; $i++)
  7. {
  8. $wiersz = mysql_fetch_array($rezultat);
  9. echo '<tr>';
  10. echo '<td>'.$wiersz['id'].'</td>';
  11. echo '<td>'.$wiersz['nazwa'].'</td>';
  12.  
  13. echo '</tr>';
  14. }
  15. echo '</table>';
  16.  
  17. for ($i=0; $i <$ile; $i++)
  18. {
  19. echo "<INPUT TYPE='text' NAME='$i' VALUE=''>";
  20. echo "<input type='hidden' name='id_towaru$i' value=".$wiersz['id']."> ";
  21. }
  22.  
  23.  
  24.  
  25.  
  26. echo "<P><INPUT class='button' type=submit value='AKTUALIZACJA' style='font-family: Verdana; font-size: 16pt; font-weight: bold'><br>
  27. </form>";


Wywaliłem INPUTY spod znacznika <table> Dodałem ukryte pola...


  1. for($i = 0; $i < count($wiersz); $i++)
  2.  
  3. {
  4.  
  5. $id_daty = $_POST['$data'];
  6.  
  7. $variable = 'id_towaru$i';
  8.  
  9. $popyt = $_POST['$i'];
  10.  
  11. $id_towaru = $_POST['$variable'];
  12.  
  13. $sql = "INSERT INTO produkty (id_towaru, id_daty, popyt) values ('$id_towaru', '$id_daty', '$popyt')";
  14.  
  15. $result = mysql_query ($sql) or die ("Błąd zapytania");
  16.  
  17. }


dodałem wczytanie daty, ale coś nie chodzi, nie wywala błędu, ale też nie dodaje rekordów do tabeli produkty
próbowałem zamiast count($wiersz) dać $_POST['$ile'] lub wpisać '4'
$variable = 'id_towaru$i';
$id_towaru = $_POST['$variable'];
zamieniałem na $id_towaru = $_POST['id_towaru$i'];
ale nie dodaje nadal

questionmark.gif questionmark.gif questionmark.gif
thek
Chyba nikt nie spojrzał na budowę tabel. Damian... To naprawdę są podstawy o co pytasz. Nazwa towaru to ukryte id_towaru tak naprawdę, ale szczerze mówiąc jeśli znasz strukture tabeli to nawet nie musi Cię to interesować, wiesz, że z pierwszego pola input przychodzi wartość dla drewna, z drugiego dla śrubek i tak dalej. Stąd wystarczy tylko wywołać odpowiedni INSERT do bazy z przechwyconym id_daty. A te podajesz jawnie w formularzu. Gdy już je masz to piszesz odpowiednie zapytanie w SQL i tyle. Jeśli jest mało pól (a tak jest teraz) to nawet pętli nie trzeba robić, tylko na sztywno można do bazy je walić. Będę rzadko teraz Ci dawał kod, bo Cię ostatnio rozleniwiłem i miałeś wszystko na gotowe. Uwierz, że to co próbujesz zrobić jest na minutkę lub dwie do zrobienia jeśli choć trochę się człowiek wysili. Wszystkie dane masz bowiem już jak na tacy, tylko musisz je odpowiednio przetworzyć i przesłac do bazy. A póki co tworzysz czasem dziwolągi, które nawet zbytniego sensu nie mają.
damianprz
Cytat
Jeśli jest mało pól (a tak jest teraz) to nawet pętli nie trzeba robić, tylko na sztywno można do bazy je walić.


Ale zaraz zamiast 4 towarów zrobię 20 czy 30. Teraz mam specjalnie mało żeby tylko sprawdzać czy odpowiednie zapytania działają.

Cytat
Chyba nikt nie spojrzał na budowę tabel.


Ale które tabele ci chodzi? produkty, towary, daty? Chyba nas interesuje tylko tabela produkty, bo tabele dat i nazw towarów nam potrzebne nie są.

Cytat
Nazwa towaru to ukryte id_towaru tak naprawdę, ale szczerze mówiąc jeśli znasz strukture tabeli to nawet nie musi Cię to interesować


No w sumie nas nazwa towaru nie interesuje w tym przypadku bo mamy dodawać rekordy jako ID ID popyt

Cytat
Stąd wystarczy tylko wywołać odpowiedni INSERT do bazy z przechwyconym id_daty. A te podajesz jawnie w formularzu. Gdy już je masz to piszesz odpowiednie zapytanie w SQL i tyle.


Ale co z tym INSERETEM jest nie tak:
  1. INSERT INTO produkty (id_towaru, id_daty, popyt) values ('$id_towaru', '$id_daty', '$popyt')


Ma zapodane wyzej wszystkie dane. Datę, in towaru i popytu
Nakieruj mnie na błąd.
Fixus
theek ma rację.

jesteś leniwy. Mógłbyś chociaż pokusić się o proste debugowania. no na litość boską człowieku rusz trochę głową.

  1. 1.
  2. for($i = 0; $i < count($wiersz); $i++)
  3. 2.
  4.  
  5. 3.
  6. {
  7. 4.
  8.  
  9. 5.
  10. $id_daty = $_POST['$data'];
  11. 6.
  12.  
  13. 7.
  14. $variable = 'id_towaru$i';
  15. 8.
  16.  
  17. 9.
  18. $popyt = $_POST['$i'];
  19. 10.
  20.  
  21. 11.
  22. $id_towaru = $_POST['$variable'];
  23. 12.
  24.  
  25. 13.
  26. $sql = "INSERT INTO produkty (id_towaru, id_daty, popyt) values ('$id_towaru', '$id_daty', '$popyt')";
  27. 14.
  28.  
  29. 15.
  30. $result = mysql_query ($sql) or die ("Błąd zapytania");
  31. 16.
  32.  
  33. 17.
  34. }


skoro ten fragment ci nie nie działa jak należy to zrób

echo $id_daty;

jak wyświetli to idziesz dalej

echo $variable;

i tak do zapytania $sql...albo zacznij w ogóle od echo $sql; i sprawdź czy się dobrze generuje. kurcze czy to tak ciężko pomyśleć o tym? Do tego nawet nie potrzeba wiedzy programistycznej. sory, ale ja wróżką nie jestem i nie wiem co ci się tam źle generuje

a i czytaj ze zrozumieniem bo ja ci nie kazałem wyjmować inputów z tabeli o.O Nie wiem po co to zrobiłeś? Myślisz, że to coś da? CHodzi o to, że aby odczytać dane z formularza muszą być w inputach a to czy inputy są w tabeli, w divie czy w spanie to w/e
damianprz
Próba wpisania 4 rekordów o dacie 19 i popytach 1 2 3 4

  1. echo "<form action='aktualizacja_2.php' method='POST'>";
  2. echo "<input type='hidden' name='ile' value=".$ile."> ";
  3. echo "Data id: <INPUT TYPE='text' NAME='data' VALUE='19'><P><BR>";
  4. echo "<table id='tabela'>";
  5. echo '<tr><td>Id</td><td>towar</td><td>Wpisz popyt</td></tr>';
  6.  
  7. for ($i=1; $i <=$ile; $i++)
  8. {
  9. $wiersz = mysql_fetch_array($rezultat);
  10. echo '<tr>';
  11. echo '<td>'.$wiersz['id'].'</td>';
  12. echo '<td>'.$wiersz['nazwa'].'</td>';
  13. echo "<INPUT TYPE='text' NAME='$i' VALUE='$i'>";
  14. echo "<input type='hidden' name='id_towaru$i' value=".$wiersz['id']."> ";
  15. echo '</tr>';
  16. }
  17. echo '</table>';
  18.  
  19.  
  20.  
  21.  
  22.  
  23. echo "<P><INPUT class='button' type=submit value='AKTUALIZACJA' style='font-family: Verdana; font-size: 16pt; font-weight: bold'><br>
  24. </form>";


  1. for($i = 1; $i <= $_POST['ile']; $i++)
  2.  
  3. {
  4.  
  5. echo "<HR>ile: ".$ile." ok<BR>";
  6. $id_daty = $_POST['data'];
  7. echo "data: ".$id_daty." ok<BR>";
  8. $variable = 'id_towaru$i';
  9. echo "variable: ".$variable." ok<BR>";
  10. $popyt = $_POST['$i'];
  11. echo "popyt: ".$popyt." ok<BR>";
  12. $id_towaru = $_POST['$variable'];
  13. echo "id towaru: ".$id_towaru." ok<P>";
  14.  
  15. $sql = "INSERT INTO produkty (id_towaru, id_daty, popyt) values ('$id_towaru', '$id_daty', '$popyt')";
  16. echo "sql: ".$sql." ok<P>";
  17. $result = mysql_query ($sql) or die ("Mada faka");
  18. echo "result: ".$result." ok<P>";
  19. }


Dostaje taki wynik:

  1. ile: 4 ok
  2. data: 19 ok
  3. variable: id_towaru$i ok
  4. popyt: ok
  5. id towaru: ok
  6. sql: INSERT INTO produkty (id_towaru, id_daty, popyt) values ('', '19', '') ok
  7.  
  8. result: 1 ok
  9.  
  10.  
  11.  
  12. --------------------------------------------------------------------------------
  13. ile: 4 ok
  14. data: 19 ok
  15. variable: id_towaru$i ok
  16. popyt: ok
  17. id towaru: ok
  18. sql: INSERT INTO produkty (id_towaru, id_daty, popyt) values ('', '19', '') ok
  19.  
  20. result: 1 ok
  21.  
  22.  
  23.  
  24. --------------------------------------------------------------------------------
  25. ile: 4 ok
  26. data: 19 ok
  27. variable: id_towaru$i ok
  28. popyt: ok
  29. id towaru: ok
  30. sql: INSERT INTO produkty (id_towaru, id_daty, popyt) values ('', '19', '') ok
  31.  
  32. result: 1 ok
  33.  
  34.  
  35.  
  36. --------------------------------------------------------------------------------
  37. ile: 4 ok
  38. data: 19 ok
  39. variable: id_towaru$i ok
  40. popyt: ok
  41. id towaru: ok
  42. sql: INSERT INTO produkty (id_towaru, id_daty, popyt) values ('', '19', '') ok
  43.  
  44. result: 1 ok
  45.  


1) Dlaczego proponujesz count($wiersz) a nie $_POST['ile']

2) Datę wczytuje gdy jest $id_daty = $_POST['data']; a nie $id_daty = $_POST['$data']; jak w propozycji

3) W formularzu mamy inputy:
<INPUT TYPE='text' NAME='$i' VALUE='$i'>
<input type='hidden' name='id_towaru$i' value=".$wiersz['id'].">

i próbujemy to wczytać za pomocą:
$variable = 'id_towaru$i';
$popyt = $_POST['$i'];
$id_towaru = $_POST['$variable'];

Nie rozumiem dlaczego nie może być
$id_towaru = $_POST['id_towaru$i'];

4) Nie wiem dlaczego $popyt = $_POST['$i']; nie wczytuje popytu, w pętli powinno wczytać od 1 do 4
$popyt = $_POST['1']
$popyt = $_POST['2']
$popyt = $_POST['3']
$popyt = $_POST['4'] gdzie 1 2 3 4 to kolejne nazwy INPUTów w formularzu czyli powinno pobrać Value tych pól

Nie wiem czy to są podstawy których nie znam. Wydaje mi się że powyższe zagadnienie jest trochę trudne bo to nie jest wpisanie 4 INSERTAMI 4 rekordów o podanych wartościach tylko są te pętle. Wiem, że dla was to banały, ale jak widać dla mnie chyba czarna magia. Gdzie mam błąd? w aktualizacja.php czy aktualizacja_2.php ? Czy w pierwszym pliku wartości są wysyłane dobrze do drugiego pliku i ten drugi źle odbiera, a może ten pierwszy źle wysyła a drugi dobrze odbiera, czy może (zapewne tak jest) obydwa są do bani. Nie chce gotowego kodu. Chcę się czegoś nauczyć.
Te inputy wyjąłem z tabeli bo napisałeś że nie wczyta ich z pola <TD>
Panowie, prosze Was, nakierujcie mnie co mam poprawić...


Dodam że INSERT wprowadza mi rekordy ale oczywiście typu
19 0 0
19 0 0
19 0 0
19 0 0
19 0 0
gdzie data=19 a popyt i id_towaru 0
thek
Lepiej sprawdź jaka jest różnica pomiędzy "$zmienna" i '$zmienna' bo to Ci mocno pomoże.
damianprz
  1. echo "<INPUT TYPE='text' NAME=".$i." VALUE=".$i.">";
  2. echo "<input type='hidden' NAME=".id_towaru$i." value=".$wiersz['id']."> ";


W formularzu jest coś źle?
Który plik jest zły? Formularz źle wysyła tzn nie wysyła czy aktualizacja_2.php źle lub nie odbiera??

EDIT:
Już pobiera mi popyt

$popyt = $_POST["$i"];

Kur.. a ja myślałem że w $_POST tylko apostrof może być
Jeszcze tylko Id_towaru musze zapodać
nospor
Cytat
Kur.. a ja myślałem że w $_POST tylko apostrof może być
To nie ma nic wspolnego z post...

Przeczytaj dokladnie ze zrozumieniem 10 razy to:
http://pl2.php.net/manual/pl/language.types.string.php
bo widzę ze ci elementarnych podstaw brakuje
damianprz
EDIT2:

Id_towaru też mam już zapodane
Powinno chodzić
Nie można było tak odrazu z tymi cydzysłowami? snitch.gif

Ten manual jest po angielsku
Ja PHP miałem tylko przez 1 semestr, 2h w tygodniu
nospor
Cytat
Ja PHP miałem tylko przez 1 semestr, 2h w tygodniu
Tym bardziej powinienes przeczytac ze zrozumienie 10 razy tę strone. A jak masz problem z angielskim to uzyj translatora.
damianprz
A nie ma czegoś PL?
Fixus
Cytat(damianprz @ 1.09.2009, 12:07:02 ) *
Ten manual jest po angielsku
Ja PHP miałem tylko przez 1 semestr, 2h w tygodniu

a to jest jakaś wymówka ? Nigdy nie miałem php w szkole ani na studiach a programuje.
jak się zabierasz za jakiś język to poznajesz pierw podstawy a dopiero potem programujesz

co do twojego pytania dlaczego proponuje count() a nie $_POST['ile']
zajrzyj do manuala i przeczytaj co robi funkcja count(), następnie zobacz jaki przyjmuje parametr, następnie zobacz co podaje w skrypcie. zobaczysz pewne podobieństwo i count() jest bezpieczniejszy

a i weź pod uwagę że gdybyś od razu zrobił takie proste debugowanie zaoszczędziłbyś i sobie i nam czasu. Jak coś nie działa nie znaczy, że od razu masz lecieć na forum. ZDEBUGUJ to pierw exclamation.gif Zobacz co jest nie tak. Spróbuj to naprawić. Dopiero potem pisz. Bo coraz więcej osób zarzuca ci brak elementarnej wiedzy, a programowanie to nie przeklepywanie gotowców tylko rozumienie tego co się robi i wyciąganie wniosków

Co do dokukemtacji...a nie możesz poszukać ? smile.gif zresztą duża część materiałów jest po angielsku z racji tego, że dokumentacja jest stale aktualizowana a nikt się chyba nie podjął ciągłego śledzenia i tłumaczenia tego. Bez angielskiego marnie to widzę
thek
Część manuala php jest przetłumaczona na pl, ale dużo rzeczy na zasadzie: "język polska trudna mowa" winksmiley.jpg Materiałów jest najwięcej w angielskim, bo stał się in językiem urzędowym programistów na całym świecie i stąd też wymiana informacji najczęściej w nim przebiega. Wiele fachowych książek, e-booków czy porad tylko w tym języku znajdziesz. Pozostaje się tylko uczyć i czytać ze zrozumieniem.
damianprz
Z angielskim najgorzej to nie jest więc przejrze napewno tego manuala

Proponowałeś count($wiersz)
a $wiersz nie był nigdzie zapodany, chyba że przez $_POST to miało być

Gdyby nie podpowiedź theka że " " i ' ' ma wielkie znaczenie w tym przypadku to bym dalej debugował i debugował i nic by z tego nie wynikło

Fixus, Uczyłeś się PHP na własną rękę (książki, net) czy jakiś kurs, szkolenie?

Za pomoc naprawde Wam dziękuję. Wiem, że większość ludzi denerwuje, ale czas mnie goni i nie mam czasu na studiowanie podstaw PHP. Coś tam liznąłem z PHP, spodobał mi się ten język i postanowiłem w nim zrobić programik. A że mam małą wiedzę to inna sprawa. Nie uważam się za jakiegoś debila, bo napewno jestem w stanie być dobry w PHP, tylko narazie brakuje mi czasu. Napewno po obronie będę powiększał wiedzę w tym temacie.
Jeszcze raz wielkie dzięki za pomoc w tym czy innych tematach i sorka za głupotę smile.gif
Fixus
sam
Karwoch
Tak jak tutaj, gdy zobaczyłem zwrot $variable = 'zmienna$i' , od razu zainteresowałem się co to za zapis - dopiero od 3 miesięcy siedzę w php i dużo jeszcze nie znam. Ale szybka pętla for, echo 'zmienna$i' i już wiedziałem co to robi, łatwo było się domyślić iż trzeba wstawić zamiast tego "". I tak z każdym problemem który spotykam, po kolei patrzę co każda zmienna przechowuje, dochodząc gdzie leży problem i która zmienna w którym miejscu robi to, co nie było zamierzone smile.gif. Dużo więcej czasu stracisz na przerabianie problemu na forum, niż przerobienie własnego kodu po kolei smile.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.