Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php+mysql] tworzenie pól w tablicy za pomocą pętli
Forum PHP.pl > Forum > Przedszkole
Dziadzia
Witam.
Plik który znajduje się poniżej ma tworzyć rekord w stworzonej już wcześniej tablicy. W poprzednim pliku wpisuję do pola $ilosc czyli ile ma być dodanych rekordów czyli ile ma się wyświetlić pól do wpisania nazwy w pliku poniżej. To co jest na dole działa ale w 50%. Rekordy są dodawane do tablicy lecz bez nazwy... Jakieś propozycje na rozwiązanie?


  1. <?php
  2.  
  3. include('conn.php');
  4.  
  5. $ilosc = $_POST['ilosc'];
  6.  
  7. echo "<form action=\"u_kat.php\" method=\"post\">";
  8.  
  9. for ($a=0; $a < $ilosc; $a++)
  10. {
  11. echo " <div>podaj nazwę kategorii: <input type=\"text\" name='$nazwa'></div> ";
  12.  
  13. $nazwa = $_POST['nazwa'];
  14.  
  15. $zapytanie = " INSERT INTO kategoria SET nazwa='$nazwa' ";
  16.  
  17. $idzapytania = mysql_query($zapytanie);
  18.  
  19. }
  20.  
  21.  
  22. echo " <input type=\"submit\" value=\"dodaj\">
  23.  
  24. </form> ";
  25.  
  26.  
  27. ?>



Z góry dzięki za pomoc.
Blame
  1. <?php
  2.  
  3. include('conn.php');
  4.  
  5. $ilosc = $_POST['ilosc'];
  6.  
  7. echo "<form action=\"u_kat.php\" method=\"post\">";
  8.  
  9. for ($a=0; $a < $ilosc; $a++)
  10. {
  11. echo " <div>podaj nazwę kategorii: <input type=\"text\" name='nazwa'></div> "; //chyba raczej tak, czyli bez "$".
  12.  
  13. $nazwa = $_POST['nazwa'];
  14.  
  15. $zapytanie = " INSERT INTO kategoria SET nazwa='$nazwa' ";
  16.  
  17. $idzapytania = mysql_query($zapytanie);
  18.  
  19. }
  20.  
  21.  
  22. echo " <input type=\"submit\" value=\"dodaj\">
  23.  
  24. </form> ";
  25.  
  26.  
  27. ?>
Dziadzia
Nic to nie dało. Efekt taki sam.

próbowałem:

- name=\"nazwa\"
- name='nazwa'
vokiel
W ogóle to co to robi?

Oddziel tworzenie formularza od wstawiania danych do bazy bo się kupy nie trzyma. Domyślnie wyświetlanie formularza, a dopiero gdy zostanie przesłany wtedy odpalasz dodawanie do bazy danych.

Do tego łączenie ciągów raczej tak (bo nie masz w nich zmiennych, więc cudzysłów nie jest potrzebny):

  1. echo '<div>podaj nazwę kategorii: <input type="text" name="nazwa"></div>';
Dziadzia
Rozdzielenie:

Jasne, że mogę to rozdzielić i będzie troszkę bardziej przejrzyście lecz wtedy będę musiał zrobić drugą pętle dla zapytania Mysql'a a tak to wszystko się mieści w jednej.

Co to robi...

Mam jeden plik w którym mam
  1. <input type="text" name="$ilosc">
np: $ilosc = 3

Tutaj podaję ile ma mi utworzyć pól do wypełnienia w następnym pliku.
Czyli:
  1. for ($a=0; $a < $ilosc; $a++)
  2. {
  3. echo " <div>podaj nazwę kategorii: <input type=\"text\" name=\"nazwa\"></div> "; }

Wcześniej podana została wartość $ilosc = 3 więc na ekranie wyskoczą mi 3 pola do wypełnienia z 1 przyciskiem dalej.

Teraz wpisujemy coś w te pola np: qwe, asd, zxc

Następnie po przyciśnięciu przycisku dalej ma nam utworzyć w tabeli w mysql 3 pola. pierwsze o nazwie: qwe drugie: asd trzecie zxc

Wszystko działa bez jednej rzeczy. Pola w tabeli mysql tworzą się lecz nie mają nazw.
vokiel
No to tak:
  1. /* generowanie inputów */
  2. if (!empty($ilosc)){
  3. // ...
  4. for ($a=0; $a < $ilosc; $a++){
  5. echo '<div>podaj nazwę kategorii: <input type="text" name="nazwa[]"></div>';
  6. }
  7. // ...
  8. /* odebranie wynikow */
  9. }else if ($_POST['dodaj']){
  10. include('conn.php');
  11. foreach ($_POST['nazwa'] as $id => $val){
  12. $value .= ",('".$val."')";
  13. }
  14. $zapytanie = " INSERT INTO kategoria (`NAZWA`) values ".substr($value,1).";"
  15. $idzapytania = mysql_query($zapytanie);
  16. }


Mam nadzieje, że nie chcesz tworzyć kolumn, tylko dodawać wiersze...
Dziadzia
Zrobiłem parę poprawek które były niezbędne gdyż wyskakiwał błąd. kod:

  1. <?php
  2.  
  3. echo "<form action=\"u_kat.php\" method=\"post\">";
  4.  
  5. for ($a=0; $a < $ilosc; $a++){
  6. echo '<div>podaj nazwę kategorii: <input type="text" name="nazwa[]"></div>';
  7. }
  8.  
  9. include('conn.php');
  10.  
  11. foreach ((array)$_POST['nazwa'] as $id => $val) {
  12. $value .= ",('".$val."')";
  13. }
  14. $zapytanie = " INSERT INTO kategoria ('nazwa') values ".substr($value,1)." ";
  15. $idzapytania = mysql_query($zapytanie);
  16.  
  17.  
  18. echo " <input type=\"submit\" value=\"dodaj\"></form> ";
  19.  
  20. ?>



dalej nie działa, tym razem wogóle nie tworzy pól w tabeli (wierszy).
vokiel
Teraz próbujesz dodać pola pomimo, że formularz nie został jeszcze wysłany, no jak?
1. Wyświetlenie formularza
2. Dopiero po wysłaniu, wykonujesz zapytanie do bazy.

Masz w ogóle utworzoną tabelę kategoria w bazie danych z kolumną nazwa?

BTW czemu jesteś tak przywiązany do wyświetlania ciągów przy użyciu cudzysłowowa?
Dziadzia
teraz tak to wygląda i nadal nie działa:
  1. <?php
  2.  
  3. echo "<form action=\"u_kat.php\" method=\"post\">";
  4.  
  5. for ($a=0; $a < $ilosc; $a++){
  6. echo '<div>podaj nazwę kategorii: <input type="text" name="nazwa[]"></div>';
  7. }
  8.  
  9. echo " <input type=\"submit\" value=\"dodaj\"></form> ";
  10.  
  11.  
  12. include('conn.php');
  13.  
  14. foreach ((array)$_POST['nazwa'] as $id => $val) {
  15. $value .= ",('".$val."')";
  16. }
  17. $zapytanie = " INSERT INTO kategoria ('nazwa') values ".substr($value,1)." ";
  18. $idzapytania = mysql_query($zapytanie);
  19.  
  20. ?>


Mam tabelę o nazwie kategoria z kolumną o nazwie "nazwa"
nospor
  1. $idzapytania = mysql_query($zapytanie) or die ('zapytanie: '.$zapytanie.'----blad:'.mysql_error());

I sobie zobaczysz jakie masz zapytanie i jakie masz bledy... a tych bledow to masz kilka
Dziadzia
  1. foreach ((array)$_POST['nazwa'] as $id => $val) {
  2. $value = "(".$val.")";
  3. }
  4. $zapytanie = ' INSERT INTO kategoria (nazwa) VALUES ('.$value.') ';
  5. $idzapytania = mysql_query($zapytanie) or die ('zapytanie: '.$zapytanie.'----blad:'.mysql_error());
  6.  




tak teraz to wygląda.

wyskakuje błąd: zapytanie: INSERT INTO kategoria (nazwa) VALUES () ----blad:Column count doesn't match value count at row 1

później chciałem sprawdzić czy w ogóle dodaje i napisałem tak: VALUES (\'.$value.\') i dodaje wiersze do tabeli lecz o nazwie .$value.
Czyli śmiem przypuszczać, że błąd nie tkwi w zapytaniu lecz w foreach'u.
A i jeszcze próbowałem tak: ('$value') (czyli bez kropek) i wyskakuje błąd: Parse error: syntax error, unexpected T_VARIABLE in C:\Program Files\WebServ\httpd\menu\u_kat.php on line 23

czyli w linijce: $zapytanie = ' INSERT INTO kategoria (nazwa) VALUES ('$value') ';

Jakieś propozycje?
vokiel
  1. foreach ((array)$_POST['nazwa'] as $id => $val) {
  2. $value .= ",('".$val."')";
  3. }
  4. $zapytanie = ' INSERT INTO kategoria (nazwa) VALUES '.substr($value,1).'; ';
Dziadzia
Na reszcie wszystko działa smile.gif dziękuje wam bardzo i pozdrawiam 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.