Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> IF spełniony za każdym razem w pętli FOR, trudno opisać... zobaczcie sami
tomilipin
post
Post #1





Grupa: Zarejestrowani
Postów: 70
Pomógł: 0
Dołączył: 28.01.2004
Skąd: że znowu ლ(ಠ益ಠლ

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


Cześć!
Natrafiłem na bardzo dziwny problem z pętlą FOR... Może ktoś z Was będzie w stanie mi pomóc. Działanie tej pętli mam już opanowane, widzę że nie zrobiłem w niej błędu (lub błędu nie widzę). Poniższy kod to wycinek skryptu do prostej listy sybskrypcyjnej .

Chodzi o to, że za każdym razem, nie ważne który adres e-mail wpiszę- zostaje usunięty ostatni adres! Poszczególne wpisy mam oddzielone poprzez \n . To dziwne zachowanie pętli FOR i IF polega na tym, że warunek zostaje spełniony za każdym razem, w wyniku czego $usunnumer ma wartość taką, ile razy została wykonana pętla- bo za każdym razem warunek w IFie jest spełniony, i za każdym wykonaniem pętli wykonywana jest także zawartość IFa (IMG:http://forum.php.pl/style_emoticons/default/mad.gif) Próbowałem już przestawiać zmienne $adresy i $adres na różne sposoby, efekt ciągle ten sam lub jeszcze gorszy (warunek nie był spełniony).

Czy ktoś mógłby wskazać, gdzie jest błąd? Zapewne chodzi o malutki błąd logiczny bo składniowych nie mam. Bardzo proszę o pomoc...
Jeśli brakuje jakichś danych- proszę pisać, od razu podeślę na forum brakujący kod.
  1. <?
  2. //sprawdzam co wciśnięto i czy coś wpisano
  3. if ($_POST['usu'] and $_POST['adres']) {
  4. $adres=$_POST['adres']; //dla późniejszego uproszczenia
  5. $adresy = file('lista.adr'); //traktuję plik jako tablicę
  6.  
  7. if (!eregi(&#092;"^.+@.+..+$\", $_POST['adres'])) {
  8. exit(&#092;"Niepoprawny adres e-mail...\");
  9. }
  10. for ($index=&#092;"0\"; $index < count($adresy); $index++) {
  11. if($adresy[$index]=$adres) {
  12. echo &#092;"linijka $index \".$adresy[$index].\"<br>\"; //tylko dla testów
  13. $usunnumer=$index;
  14. }
  15.  
  16. }
  17.  
  18. $plik = file('lista.adr');
  19. unset($plik[$usunnumer]);
  20. $f = fopen('lista.adr', 'w');
  21.  foreach($plik as $linia){
  22.  fputs($f, $linia);
  23.  }
  24. fclose($f);
  25. echo &#092;"Podany adres e-mail został usunięty z listy.\";
  26. ?>
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
silent
post
Post #2





Grupa: Zarejestrowani
Postów: 127
Pomógł: 0
Dołączył: 18.08.2004
Skąd: Jastrzębie Zdrój

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


A nie łatwiej zrobić to tak:
  1. <?php
  2. $adres = $_POST['adres']; // to wiesz
  3. $adresy = file( 'lista.adr' ); // to też wiesz
  4.  
  5. // obcina białe znaki we wszystkich wartościach w tablicy $adresy
  6. $adresy = array_map( 'trim', $adresy );
  7.  
  8. // zwraca do zmiennej $index indeks pod którym w tablicy $adresy znajduje się ciąg
  9. $adres
  10. $index = array_search( $adres, $adresy );
  11.  
  12. // usuwa z tablicy $adresy wartość pod indeksem $index (czyli adres który chcieliśmy usunąć)
  13. unset( $adresy[$index] );
  14.  
  15. // zapisuje do pliku zawartość tablicy $adresy (już bez adresu który chcieliśmy usunąć)
  16. $f = fopen( 'lista.adr', 'w' );
  17. foreach( $adresy as $linia )
  18. {
  19.  fputs( $f, $linia );
  20. }
  21. fclose( $f );
  22.  
  23. echo &#092;"Podany adres e-mail został usunięty z listy.\";
  24. ?>


Ten post edytował silent 18.11.2004, 00:16:17
Go to the top of the page
+Quote Post

Posty w temacie


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: 6.10.2025 - 14:16