Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Nie działająca pętla :(
natomiast
post
Post #1





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 3.12.2007

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


Witam,
Nie wiem patrze sie w to od dwóch dni i nie wiem czemu tak jest. Mam coś takiego:
  1. <?php>
  2.  $j=1;
  3.  $i=1;
  4. require "./konekt.inc";
  5.  
  6. $w= mysql_query ("SELECT nazwa_przedmiotu FROM przedmioty ORDER BY nazwa_przedmiotu");
  7.  echo '<table border="0">';  //dane pobrane z bazy wyświetlane sa za pomocą tablei
  8. while($xx=mysql_fetch_assoc($w))
  9.  {
  10. echo '<tr>';
  11.  $przedmiot_nazw[$j]=$xx["nazwa_przedmiotu"];
  12. echo '<td width="10px"><input type="checkbox" name="'.$i.'" /"></td>';
  13. echo '<td width="150px" ><b>'.$xx["nazwa_przedmiotu"].'</b></td>';
  14. $j++;
  15. $i++;
  16. echo '</tr>';
  17. }
  18.  echo'</table>';
  19.  ?>

rzecz w tym, że nie działa mi pętla for.
  1. <?php
  2. if($_POST["dodaj_nauczyciel"])
  3. {
  4. generuj_id(5);
  5. mysql_query("INSERT INTO users(username, password, redirect) VALUES('".$_POST["nazwisko_nauczyciela"]."','".$id."','/nauczyciel.php')");  
  6. mysql_query ( "INSERT INTO nauczyciel(naucz_id, imie, nazwisko, adres, telefon) values( '".$id."','".$_POST ["imie_nauczyciela"]."','".$_POST ["nazwisko_nauczyciela"]."','".$_POST ["adres_nauczyciela"]."','".$_POST ["telefon_nauczyciela"]."') ");
  7.  
  8. echo 'Identyfikator logowania dla nauczyciela: '.$_POST["nazwisko_nauczyciela"].'<br />';
  9. echo 'Hasło logowania: '.$id;
  10.  
  11.  for($i=1;$i<10;$i++)
  12.  {
  13. if($_POST[$i]=="on")
  14. {
  15. mysql_query("INSERT INTO przedmioty_n(naucz_id, przedmiot) VALUES('".$id."','".$przedmiot_nazw[$i]."') ");
  16. }
  17. }
  18. }
  19. ?>

jeśli zaznaczy się np 4 pozycje to zapytanie w pętli wykona się tylko dla pierwszej napotkanej pozycji, która jest zaznaczona i ....koniec pozostałych trzech nie wpisuje. Mam podobną konstrukcję w innym pliku i tam działa to bez problemu. Pewnie to jak zwykle błachstka, ale cóż takie rzeczy chyba najtrudniej znaleźć :/
Dzieki za pomoc Pzdr
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 16)
JoShiMa
post
Post #2





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

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


A wyświetl sobie przed tą pętlą
  1. <?php
  2. var_dump{$_POST[$i]}
  3. ?>


albo przed ifem

  1. <?php
  2. echo $_POST[$i]
  3. ?>


I zobacz, czy warunek: if($_POST[$i]=="on") ma szanse być spełniony we wszystkich przypadkach w których byś chciał.
Go to the top of the page
+Quote Post
natomiast
post
Post #3





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 3.12.2007

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


  1. <?php
  2. for($i=1;$i<10;$i++)
  3.  { echo $_POST[$i];
  4.  //  if($_POST[$i]=="on")
  5.  // {
  6.  
  7. mysql_query("INSERT INTO przedmioty_n(naucz_id, przedmiot) VALUES('asdf','asdf') ");
  8.  // }
  9. }
  10. ?>

Nie wyświetla żadnych wyników (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) . Leo WHY?
Go to the top of the page
+Quote Post
sniezny_wilk
post
Post #4





Grupa: Zarejestrowani
Postów: 732
Pomógł: 80
Dołączył: 25.05.2005
Skąd: Szczecin

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


Cytat(natomiast @ 11.06.2008, 08:22:38 ) *
  1. <?php
  2. for($i=1;$i<10;$i++)
  3.  { echo $_POST[$i];
  4.  //  if($_POST[$i]=="on")
  5.  // {
  6.  
  7. mysql_query("INSERT INTO przedmioty_n(naucz_id, przedmiot) VALUES('asdf','asdf') ");
  8.  // }
  9. }
  10. ?>

Nie wyświetla żadnych wyników (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) . Leo WHY?


Zrób jak radziła JoShiMa. A czemu $_POST[$i] ? nie powinno być $_POST['nazwa_pola'][$i] ?
Go to the top of the page
+Quote Post
JoShiMa
post
Post #5





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

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


Cytat(sniezny_wilk @ 11.06.2008, 08:24:31 ) *
nie powinno być $_POST['nazwa_pola'][$i] ?

To chyba tylko autor wie. Żeby to zgadnąć trzeba by było poznać formularz, który wysyła dane do $_POST.

Cytat(natomiast)
Nie wyświetla żadnych wyników sad.gif. Leo WHY?

Pewno dlatego, że $_POST[$i] = NULL.

Ten post edytował JoShiMa 11.06.2008, 09:53:51
Go to the top of the page
+Quote Post
natomiast
post
Post #6





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 3.12.2007

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


Link do kodu do całej strony:
http://areksmolarek.republika.pl/naucz.php
Go to the top of the page
+Quote Post
JoShiMa
post
Post #7





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

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


Faktycznie powinno być $_POST[$i] a może $_POST['$i'] ?

A możesz podejrzeć jak wygląda kod HTML (źródło strony), kiedy wyświetlasz na niej formularz?
Go to the top of the page
+Quote Post
natomiast
post
Post #8





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 3.12.2007

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


Źródło strony po wyświetleniu formularza:
http://areksmolarek.republika.pl/widok.php
Próbowałem juz opcji $_POST[$i], $_POST['$i'], $_POST["$i"] i nic (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)
Go to the top of the page
+Quote Post
batman
post
Post #9





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




@natomiast
1.
  1. <?php
  2. echo '<td width="10px"><input type="checkbox" name="pole'.$i.'" value="1" /"></td>';
  3. ?>

2.
  1. <?php
  2. foreach($_POST as $k => $v) {
  3.  
  4. if(strstr($k, 'pole') !== false && (int)$v == 1) {
  5. // wykonujesz zapytanie
  6. }
  7. }
  8. ?>
Go to the top of the page
+Quote Post
natomiast
post
Post #10





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 3.12.2007

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


Niestety nadal wykonuje zapytanie tylko raz. (IMG:http://forum.php.pl/style_emoticons/default/sciana.gif) (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) (IMG:http://forum.php.pl/style_emoticons/default/axesmiley.png)
Go to the top of the page
+Quote Post
batman
post
Post #11





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




A ile checkboxów zaznaczasz?
Go to the top of the page
+Quote Post
natomiast
post
Post #12





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 3.12.2007

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


wszystkich mam w tej chwili 8 ale zaznaczam róznie 2,3, 4 ..... dodaje pierwszy zaznaczony a reszty nie
Go to the top of the page
+Quote Post
batman
post
Post #13





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




A skąd bierze się ta zmienna: $przedmiot_nazw?
Go to the top of the page
+Quote Post
natomiast
post
Post #14





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 3.12.2007

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


Link do kodu całej strony

http://areksmolarek.republika.pl/naucz.php

A tu link do strony króta działa z podobnym mechanizmem
http://areksmolarek.republika.pl/oceny.php

Nie, wiem ja nie widze różnicy pomiędzy obiema stronami która powoduję ze to nie działa

Ten post edytował natomiast 11.06.2008, 12:16:28
Go to the top of the page
+Quote Post
JoShiMa
post
Post #15





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

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


A zrobiłeś tak jak Ci napisałam:
  1. <?php
  2. var_dump{$_POST[$i]}
  3. ?>

Przed pętlą for?
Go to the top of the page
+Quote Post
nospor
post
Post #16





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




A skad wiesz ze dziala ci tylko raz? Tylko jeden insert do bazy sie wykonal? To może wykonalo sie wiele razy, ale poprostu pozostale inserty byly bledne. Sprawdz to.
Pozatym nie: $_POST[$i]=="on" a isset($_POST[$i])
Raz ze nie generuje masy noticow, ktore teraz c sie generuja, dwa ze "on" nie zawsze jest.
  1. <?php
  2. for($q=1;$q<30;$q++)
  3. {
  4. if(isset($_POST[$q]))
  5. {
  6. mysql_query("INSERT INTO przedmioty_n(naucz_id, przedmiot) VALUES('".$id."','".$przedmiot_nazw[$q]."') ") or die (mysql_error());
  7.  }
  8. }
  9. ?>
Go to the top of the page
+Quote Post
JoShiMa
post
Post #17





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

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


Oczywiście możesz sobie ułatwić sprawę i zamiast
  1. <?php
  2. <input type="checkbox" name="'.$i.'" /">
  3. ?>


dać

  1. <?php
  2. <input type="checkbox" name="przedmiot['.$i.']"/">
  3. ?>


Wtedy w pętli for będziesz się odwoływał do zmiennej nie tak:
  1. <?php
  2. if($_POST[$i]=="on")
  3. ?>


tylko tak:
  1. <?php
  2. if($_POST['przedmiot'][$i]== 'on')
  3. ?>
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: 19.09.2025 - 20:15