Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php+mysql] tworzenie pól w tablicy za pomocą pętli
Dziadzia
post
Post #1





Grupa: Zarejestrowani
Postów: 79
Pomógł: 4
Dołączył: 9.07.2009

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Dziadzia 3.11.2009, 17:37:38
Go to the top of the page
+Quote Post
Blame
post
Post #2





Grupa: Zarejestrowani
Postów: 678
Pomógł: 124
Dołączył: 26.09.2009

Ostrzeżenie: (0%)
-----


  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. ?>
Go to the top of the page
+Quote Post
Dziadzia
post
Post #3





Grupa: Zarejestrowani
Postów: 79
Pomógł: 4
Dołączył: 9.07.2009

Ostrzeżenie: (0%)
-----


Nic to nie dało. Efekt taki sam.

próbowałem:

- name=\"nazwa\"
- name='nazwa'
Go to the top of the page
+Quote Post
vokiel
post
Post #4





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

Ostrzeżenie: (0%)
-----


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>';
Go to the top of the page
+Quote Post
Dziadzia
post
Post #5





Grupa: Zarejestrowani
Postów: 79
Pomógł: 4
Dołączył: 9.07.2009

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
vokiel
post
Post #6





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

Ostrzeżenie: (0%)
-----


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...

Ten post edytował vokiel 4.11.2009, 16:12:37
Go to the top of the page
+Quote Post
Dziadzia
post
Post #7





Grupa: Zarejestrowani
Postów: 79
Pomógł: 4
Dołączył: 9.07.2009

Ostrzeżenie: (0%)
-----


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).
Go to the top of the page
+Quote Post
vokiel
post
Post #8





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
Dziadzia
post
Post #9





Grupa: Zarejestrowani
Postów: 79
Pomógł: 4
Dołączył: 9.07.2009

Ostrzeżenie: (0%)
-----


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"
Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




  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
Go to the top of the page
+Quote Post
Dziadzia
post
Post #11





Grupa: Zarejestrowani
Postów: 79
Pomógł: 4
Dołączył: 9.07.2009

Ostrzeżenie: (0%)
-----


  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?

Ten post edytował Dziadzia 5.11.2009, 11:21:55
Go to the top of the page
+Quote Post
vokiel
post
Post #12





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

Ostrzeżenie: (0%)
-----


  1. foreach ((array)$_POST['nazwa'] as $id => $val) {
  2. $value .= ",('".$val."')";
  3. }
  4. $zapytanie = ' INSERT INTO kategoria (nazwa) VALUES '.substr($value,1).'; ';
Go to the top of the page
+Quote Post
Dziadzia
post
Post #13





Grupa: Zarejestrowani
Postów: 79
Pomógł: 4
Dołączył: 9.07.2009

Ostrzeżenie: (0%)
-----


Na reszcie wszystko działa (IMG:style_emoticons/default/smile.gif) dziękuje wam bardzo i pozdrawiam (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 14.09.2025 - 21:36