Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Pętla foreach zwraca jedynie ostatni rekord
Forum PHP.pl > Forum > Przedszkole
Lethys
Piszę prosty skrypt, który ma za zadanie:
1. pobrać z podanej listy maile
2. sprawdzić jaki hash jest dołącozny do dane maila
3. zapisać dany mail+hash w pliku csv

Teoretycznie skrypt działa, ale pokazuje oraz zapisuje się jedynie ostatni rekord, czyli jak wrzucę 9 maili, to mi pokaze hash tylko do tego ostatniego dziewiątego, a 8 poprzednich będzie pustych...

Wiem, że prawdopodobnie w pętli rekordy są nadpisywane, ale jak to mogę rozwiązać? W pętli fwrite nie powinno dodawać nowych danych do pliku a po zakończeniu po prostu go zapisać?


  1.  
  2. <?php
  3. //error_reporting(E_ALL);
  4. //ini_set('display_errors', 1);
  5. include 's_conn.php';
  6.  
  7.  
  8. print "<form action=\"index.php?action=generuj\" enctype=\"multipart/form-data\" method=\"post\">
  9. <textarea name=\"lista_email\" cols=\"50\" rows=\"5\">
  10. Wklej listę maili
  11. </textarea>
  12. <br />
  13. <input type=\"submit\" />
  14. </form>";
  15.  
  16.  
  17. if($_GET['action'] == "generuj"){
  18.  
  19. $lista = array();
  20. $arrKatT = explode("\n",$_POST['lista_email']);
  21.  
  22. $h = fopen('plik.csv', 'w');
  23. // ustawienie separatora
  24. $sep = ";";
  25.  
  26. foreach($arrKatT AS $email_wygenerowany)
  27. {
  28.  
  29. $wynik = mysql_fetch_array(mysql_query("SELECT `email`, `hash` FROM `osoby` where `flaga_wypisani`='0' and email1='$email_wygenerowany'")) or mysql_error();
  30.  
  31.  
  32. fwrite($h, "\"{$wynik['email']}\"$sep\"{$wynik['hash']}\"\n");
  33. echo "\"{$wynik['email1']}\"$sep\"{$wynik['hash']}\"\n";
  34.  
  35. }
  36.  
  37. echo '<p>Generowanie '. count($arrKatT) . " hashów.</p>";
  38.  
  39. }
  40.  
  41. fclose($h);
  42.  
  43.  
  44. ?>
  45.  



Jak to mogę rozwiązać?
Tomplus
sprawdź tablice $arrKatT co w ogóle zawiera,

\n
Lethys
Cytat(Tomplus @ 8.10.2015, 07:56:07 ) *
sprawdź tablice $arrKatT co w ogóle zawiera,

\n



$arrKat zawiera wszystkie maila z formularza, tutaj jest wszystk OK. Problem jest gdzieś w pętli, bo wypluwa mi tylko ostatni rekord.

  1. foreach($arrKatT AS $email_wygenerowany)
  2. {
  3. $wynik = mysql_fetch_array(mysql_query("SELECT `email1`, `hash` FROM `osoby` where `flaga_wypisani`='0' and email1='$email_wygenerowany'")) or mysql_error();
  4.  
  5. //NIE DZIAŁA - Przekazuje jedynie ostatni rekord. Jak wrzucę 1 mail, to działa. Jak wrzuce np. 3 maile, to pokaże jedynie trzeci.
  6. fwrite($h, "\"{$wynik['email']}\"$sep\"{$wynik['hash']}\"\n");
  7. echo "\"{$wynik['email']}\"$sep\"{$wynik['hash']}\"\n";
  8.  
  9.  
  10. //$email_wygenerowany - dziala wyświetli wszystkie maile przekazane
  11. print "<b>$email_wygenerowany</b>";
  12.  
  13. }
  14.  
Pyton_000
Primo to źle się do tego zabierasz, powinieneś pobrać RAZ wszystkie mejle zapytaniem a potem iterować po wynikach.
Ale jeśli już tak robisz to dodaj:

$email_wygenerowany = trim($email_wygenerowany);
przed zapytaniem.
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.