Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Pętla foreach zwraca jedynie ostatni rekord
Lethys
post 8.10.2015, 08:13:49
Post #1





Grupa: Zarejestrowani
Postów: 642
Pomógł: 2
Dołączył: 9.03.2006

Ostrzeżenie: (30%)
XX---


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ć?

Ten post edytował Lethys 8.10.2015, 08:15:06


--------------------
filmy podobne do - wyszukiwarka podobnych filmów
motywacja do działania - Bądź Lepszy
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
Tomplus
post 8.10.2015, 08:56:07
Post #2





Grupa: Zarejestrowani
Postów: 1 879
Pomógł: 230
Dołączył: 20.03.2005
Skąd: Będzin

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


sprawdź tablice $arrKatT co w ogóle zawiera,

\n
Go to the top of the page
+Quote Post
Lethys
post 8.10.2015, 09:05:02
Post #3





Grupa: Zarejestrowani
Postów: 642
Pomógł: 2
Dołączył: 9.03.2006

Ostrzeżenie: (30%)
XX---


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.  


--------------------
filmy podobne do - wyszukiwarka podobnych filmów
motywacja do działania - Bądź Lepszy
Go to the top of the page
+Quote Post
Pyton_000
post 8.10.2015, 09:31:11
Post #4





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


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.
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 Wersja Lo-Fi Aktualny czas: 14.08.2025 - 04:56