Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Zły argument w foreach()
Forum PHP.pl > Forum > Przedszkole
sadistic_son
Wyświetla mi następujący błąd:
Cytat
Warning: Invalid argument supplied for foreach() in xxxxxxxxx on line 105
.

Bierze się on z pętli foreach, która rzekomo nie rozpoznaje argumentu.
Ten plik ma realizować usuwanie kilku userów zaznaczonych w formularzu polem opcji wyboru.

Formularz do zaznaczania userów:
  1. echo'<form action=index.php?page=admin_panel method=post >';
  2.  
  3. //tutaj klila pol checkbox z roznymi warosciami dla $row[0] - czyli id usera w bazie
  4. echo"<input type=checkbox name=check[] value=$row[0] />
  5. <input type=submit name=delete_user value=usun />
  6. </form>';
Nastepnie jesli kliknieto w usun to pojawia sie formularz z pytaniem czy na pewno usunac uzytkownika lub kilku, zaznaczonych polem checkbox:
  1. echo '<form action="index.php?page=admin_panel" method="post" >
  2. <input type="submit" name="delete_yes" value="TAK" /> <input type="submit" name="no" value="NIE" /><input type="hidden" name="delete" value="'.$_POST['check'].'" /></form>';

I nastepnie skrypt ktory 'odbiera' dane z formularza z pytaniem czy usunac:
  1. if(isset($_POST['delete_yes']) && isset($_POST['delete'])){
  2.  
  3. $users_to_delete=$_POST['delete'];
  4.  
  5. foreach($users_to_delete as $row){
  6. $pass=rand(1,999999);
  7. $query="UPDATE t_users SET name = 'konto usunięte' , password = '$pass' , email = 'konto usunięte' , active = 0 , admin = 0 WHERE id_user = $row";
  8. mysql_query($query);
  9. }
  10. }

Wlasciwie to to nie ma usuwac uzytkownikow ale nadpisywac ich nazwy jako 'konto usuniete'.
I wlasnie po kliknieciu w TAK, kiedy ma zadzialac petla usuwajaca/nadpisujaca userow wyswietla sie ten blad.
phpion
$users_to_delete nie jest tablicą. Najprostszy sposób żeby sprawdzić co siedzi w zmiennej:
  1. var_dump($users_to_delete);

Zakładam, że ten kod:
  1. echo '<form action="index.php?page=admin_panel" method="post" >
  2. <input type="submit" name="delete_yes" value="TAK" /> <input type="submit" name="no" value="NIE" /><input type="hidden" name="delete" value="'.$_POST['check'].'" /></form>';

powinien wyglądać mniej-więcej tak:
  1. echo '<form action="index.php?page=admin_panel" method="post" >
  2. <input type="submit" name="delete_yes" value="TAK" /> <input type="submit" name="no" value="NIE" /><input type="hidden" name="delete[]" value="'.$_POST['check'].'" /></form>';

czyli zmienić name="delete" na name="delete[]". Te hiddeny powinny być generowane w jakiejś pętli.
sadistic_son
Cytat(phpion @ 23.08.2009, 11:08:53 ) *
czyli zmienić name="delete" na name="delete[]".
Przeoczylem to, po zmianie na delete[] juz nie wywala bledu ale tez nic sie nie dzieje. Nawet po potraktowaniu $_POST['delete'] print_r nic nie wyswietla po za 'Array'.

Cytat(phpion @ 23.08.2009, 11:08:53 ) *
Te hiddeny powinny być generowane w jakiejś pętli.
Racja! Zrobiłem to tak:
  1. foreach($_POST['check'] as $row){
  2. echo'<input type="hidden" name="delete[]" value="'.$row.'" />';
  3. }
I działa guitar.gif Dzięki!
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.