Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php+mysql] polecenie insert zależne od ilości wybranych pól checkbox, polecenie INSERT
mateuszpi
post
Post #1





Grupa: Zarejestrowani
Postów: 140
Pomógł: 0
Dołączył: 11.09.2006
Skąd: Jaworzno

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


Witam
Tak bawie się bez konkretnego powdodu zapytaniami tylko aby je utrwalić i nasunuł mi się taki przykłąd z którego nie umiem wybrnąć.

mam formularz
pole text (imie)
pole txt (nazwisko)
pole checkbox (grupa1-grupa2-grupa3-grupa4)

i teraz po wysłaniu formularza chciałbym aby dane z niego były zapisywane w bazie.
nie ma problemu gdyby ostatnie pole checkbox było tylko jedno albo było polem radio (do zaznaczenia jedna odpowiedź)
ale teraz mam mozliwosć zaznaczenia różnej ilości pól
normalnie zrobił bym to tak: insert into value (imie,nazwisko,grupa)

jednak teraz pole grupa będzie miało 1 lub 2 lub 3 lub 4 wyniki i wypdałoby za każdym razem osobno wykonywać insert
i tutaj wpadłem bez pomysłu.
jak wykonać zapytanie do bazy aby zostało no wykonane tyle razy ile się zaznaczy puł grupa i to za każdym razem z inną wartością questionmark.gif

proszę o pomoc bo ja nie widze rozwiązania.
Go to the top of the page
+Quote Post
loonger
post
Post #2





Grupa: Zarejestrowani
Postów: 104
Pomógł: 0
Dołączył: 19.06.2006
Skąd: Wrocław

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


nazwij checkboxy np. box[1] box[2] box[3] a potem insert w pętli foreach np
  1. <?php
  2. foreach($_POST["box"] as $b => $val) {
  3. insert_do_bazy($val);
  4. }
  5. ?>
Go to the top of the page
+Quote Post
mateuszpi
post
Post #3





Grupa: Zarejestrowani
Postów: 140
Pomógł: 0
Dołączył: 11.09.2006
Skąd: Jaworzno

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


a mozesz to konkretniej opisać biggrin.gif
wymyśliłem przykład:

  1. <?php
  2. if (!$_POST['imie'])
  3. {
  4. ?>
  5. <form action="~test.php" method="POST">
  6. <input type="text" name="imie"><br />
  7. <input type="text" name="nazw"><br />
  8. <input type="checkbox" name="box[1]">
  9. <input type="checkbox" name="box[2]">
  10. <input type="checkbox" name="box[3]">
  11. <input type="checkbox" name="box[4]"><br />
  12. <input type="submit" value="wyslij" />
  13. </form>
  14. <?php
  15. }
  16. else
  17. {
  18. echo "wykonuje zapytanie";
  19.  
  20. foreach($_POST["box"] as $b => $val)
  21. {
  22. $sql = "INSERT INTO ludnosc (imie, nazwisko, typ) VALUE ('".$_POST['imie']."', '".$_POST['nazw']."', '".$_POST['box']."')";
  23.  
  24. echo "".$_POST['imie']."', '".$_POST['nazw']."', '".$_POST['box'];
  25. }
  26. }
  27. ?>


i widze błąd:
Warning: Invalid argument supplied for foreach() in c:\usr\krasnal\www\test.php on line 28

Ten post edytował mateuszpi 22.09.2007, 18:31:58
Go to the top of the page
+Quote Post
loonger
post
Post #4





Grupa: Zarejestrowani
Postów: 104
Pomógł: 0
Dołączył: 19.06.2006
Skąd: Wrocław

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


nie jestem pewien ale ten błąd chyba spowodowany jest brakiem value="costam" w checkboxach. pozatym w insercie nie powinieneś odnosić się do $_POST["box"] tylko do $val. przeczytaj o foreach w manulau: http://pl.php.net/manual/pl/control-structures.foreach.php
Go to the top of the page
+Quote Post
mateuszpi
post
Post #5





Grupa: Zarejestrowani
Postów: 140
Pomógł: 0
Dołączył: 11.09.2006
Skąd: Jaworzno

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


sam nie wiem co się stało ale napisałem to jeszcze raz. od zera i skrypt zareagował. Obecnie wygląda to tak i działa:
  1. if (!$_POST['imie'])
  2. {
  3. ?>
  4. <form action="~test.php" method="POST">
  5. <input type="text" name="imie"><br />
  6. <input type="text" name="nazw"><br />
  7. <input type="checkbox" name="box[1]">
  8. <input type="checkbox" name="box[2]">
  9. <input type="checkbox" name="box[3]">
  10. <input type="checkbox" name="box[4]"><br />
  11. <input type="submit" value="wyslij" />
  12. </form>
  13. <?php
  14. }
  15. else
  16. {
  17. echo "wykonuje zapytanie<br /><br />";
  18.  
  19. foreach($_POST["box"] as $b => $val)
  20. {
  21. $sql = "INSERT INTO ludnosc (imie, nazw, typ) VALUE ('".$_POST['imie']."', '".$_POST['nazw']."', '".$b."')";
  22. $wynik = mysql_query($sql);
  23. //echo "".$_POST['imie']."', '".$_POST['nazw']."', '".$_POST['box'];
  24. echo "<br /><br />$b";
  25. }
  26. }


co do $ to faktycznie bład w wpisywaniu. dzięki za pomoc.



witam ponownie

co do górnego to działa lecz teraz mam taki problem:
znowu che wysłać kilak rzeczy na raz poleceniem insert

jednak teraz mam dwie tablice array
  1. <?php
  2. $t = Array (2, 8);
  3. $b = Array (1169, 1241);
  4. ?>


i chce aby wysyłał 2 razy (bo tyle mam elementów w tablicy) i na razie zakładam że ilość zawsze się będzie zgadzać
za pierwszym podejściem ma wysłać dane z cyframi 2 i 1169 a potem 8 z 1241
możecie mi to rozpisać. proszę biggrin.gif (co robić jeśli ilość wyrazów nie będzie identyczna może dojdę sam. na razie tylko to biggrin.gif)
przy jednek napisał bym tak:
  1. <?php
  2. foreach($t as $b => $val) 
  3. {
  4. echo "$val = $b,<br />";
  5. }
  6. ?>

ale przy dwóch wysiadam sad.gif
Go to the top of the page
+Quote Post
loonger
post
Post #6





Grupa: Zarejestrowani
Postów: 104
Pomógł: 0
Dołączył: 19.06.2006
Skąd: Wrocław

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


  1. <?php
  2. foreach($t as $key => $val) {
  3. echo $t[$key] . "<br />";
  4. echo $b[$key] . "<br />";
  5. }
  6. ?>


Ten post edytował loonger 23.09.2007, 22:29:49
Go to the top of the page
+Quote Post
mateuszpi
post
Post #7





Grupa: Zarejestrowani
Postów: 140
Pomógł: 0
Dołączył: 11.09.2006
Skąd: Jaworzno

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


w poleceniu echo zamienia ładnie ale w czymś takim:
  1. <?php
  2. $t = Array (2, 8);
  3. $b = Array (1169, 1241);
  4.  
  5. $text = "ala ma kota -{TEST}-";
  6.  
  7.  
  8.  
  9. foreach($t as $key => $val) 
  10. {
  11.  
  12. echo $t[$key] ."-". $b[$key]."<br />";
  13.  
  14.  
  15.  $pm_vars = array(  
  16. '{TEST}' => $b[$key],
  17.  );
  18.  
  19.  
  20.  
  21. $text = str_replace(array_keys($pm_vars), array_values($pm_vars), $text);
  22.  
  23. echo $text."<br /><br /><br />";
  24.  
  25. }
  26. ?>


wynik jest taki:
Kod
2-1169
ala ma kota -1169-


8-1241
ala ma kota -1169-




udało się dojść do rozwiązania.
  1. <?php
  2. $t = Array (2, 8);
  3. $b = Array (1169, 1241);
  4. foreach($t as $key => $val) 
  5. {
  6. $text = "ala ma kota -{TEST}-"; 
  7.  
  8. echo $t[$key] ."-". $b[$key]."<br />";  
  9. $pm_vars = array(
  10.  '{TEST}' => $b[$key],  
  11. ); 
  12.  
  13. $text = str_replace(array_keys($pm_vars), array_values($pm_vars), $text);
  14. echo $text."<br /><br /><br />";
  15. }
  16. ?>


wynik:
Kod
2-1169
ala ma kota -1169-

8-1241
ala ma kota -1241-


Ten post edytował mateuszpi 24.09.2007, 11:22:28
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 19.08.2025 - 19:49