Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php+mysql] polecenie insert zależne od ilości wybranych pól checkbox
Forum PHP.pl > Forum > Przedszkole
mateuszpi
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.
loonger
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. ?>
mateuszpi
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
loonger
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
mateuszpi
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
loonger
  1. <?php
  2. foreach($t as $key => $val) {
  3. echo $t[$key] . "<br />";
  4. echo $b[$key] . "<br />";
  5. }
  6. ?>
mateuszpi
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-
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.