Jak wyjsc z petli ?

0

Ta petla wykonuje sie w nieskonczonosc ? czemu tak sie dzieje ?

 
do {
   $code = gencode();
   //select code
   $db = connect_db();
   $result = $db->Execute("SELECT id,code FROM codes WHERE code = '".$code."' ");
   if ($result === false) die("Error #001: get codes.");
   foreach ($result as $row) {};
} while (empty($row['id']));
  1. Generuje kod
  2. Sprawdzam czy kod jest w bazie
  3. Jesli kodu nie ma to $row['id'] powinno byc puste i jest
  4. petla powinna sie zakonczyc

Ale sie okazuje ze dziala w nieskonczonosc. to jaki powinien byc warunek by petla w przypadku gdy w bazie nie ma wpisu pozwolila sie zakonczyc ?

0

break; <- powoduje wyjście z pętli,
continue; <- powoduje przejście do miejsca sprawdzania warunku pętli
dwa powyższe nie wychodzą z zagnieżdżonych pętli. jeśli chcesz wyjść z zagnieżdżonej to musisz sam pokombinowac lub ewentualnie uzyc goto jesli jest w ogole w php

return; <- wychodzi z funkcji

jesteś pewien, że w przypadku gdy w bazie nie ma wpisu $result będzie równe false? jeśli nie to sprawdź. jesteś pewien, że zmienna $row po wyjściu z pętli foreach dalej istnieje? (nie sprawdzałem w php).

0

Wg mnie ta pętla musi po prostu zniknąć.
Bo wewnątrz pętli albo się coś zrobi albo pokaże komunikat z die();

0

juz zrobilem. Jestem Piz... łosia dałem sprawdzanie w funkcji i wynik albo jest 1 albo 0 (gdy ok)
wiec w do { } while ($status != 0)
A ja dawalem while ($status == 0)
Można wywalic temat Dziekuje za pomoc
czyli tu powinno byc while (!empty($row['id'])); az id nie bedzie puste

0

Powiedz mi tylko w jakim przypadku tak zmodyfikowana pętla się powtórzy?
Chodzi przynajmniej o jedno powtórne wykonanie.

0

no dokładnie powtórzy sie przynajmniej raz i tak sie dzieje własnie. Bo zalozenie bylo robimy az nie rowna sie zero. a ja dalem ze rowna sie zero i robimy az rowna sie zero. Czyli ze wykonywala sie w nieskonczonosc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1