Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] brak pierwszego rekordu w pętli
Forum PHP.pl > Forum > Przedszkole
Dopler
Mam prośbę, nie umiem sobie poradzić gdzie tkwi błąd - dlaczego kod wypisuje wszystkie potrzebne rekordy oprócz pierwszego ?

kod ma wypisać z bazy miejsc pierwsze trzy litery z podziałem na linijki wg drugiej literki

jest efekt: aab, aac, aad, aae ... - a powinno być: aaa, aab, aac ....

ps. czy całość nie powinna być jakoś lepiej napisana ?

  1. if($letterm)
  2. {
  3. if(strlen($letterm)==1&&!preg_match("/%/", $letterm)&&!preg_match("/_/", $letterm))
  4. {
  5.  
  6. // nieczułość na polskie literki
  7. $letterm2 = strtr($letterm,"ćłóśż","closz");
  8. $letterm2 = strtr($letterm, array("c"=>"ć","l"=>"ł","o"=>"ó","s"=>"ś","z"=>"ż"));
  9. $letterm3 = strtr($letterm,"ź","z");
  10. $letterm3 = strtr($letterm, array("z"=>"ź"));
  11.  
  12. $getWord=mysql_query("SELECT SUBSTRING(miejsce, 1, 3) as miejsce_po FROM wlasciciele WHERE miejsce LIKE '$letterm%' OR miejsce LIKE '$letterm2%' OR miejsce LIKE '$letterm3%' GROUP BY miejsce_po", $db);
  13.  
  14.  
  15.  
  16. if($getWordArray=mysql_fetch_array($getWord))
  17. {
  18.  
  19. $previous = '';
  20.  
  21. echo "<div align=\"justify\"><ul>";
  22. while ($let = mysql_fetch_assoc($getWord)) {
  23.  
  24.  
  25. $current = substr($let['miejsce_po'],0,2);
  26. if ($current != substr($previous,0,2)) {
  27. echo "<br><li>";
  28.  
  29. }
  30.  
  31. echo "<a href=\"?lettertwom=";
  32. printf($let["miejsce_po"]);
  33. echo "\">";
  34. printf(ucfirst($let["miejsce_po"]));
  35. echo "</a>...  ";
  36.  
  37. $previous = $current;
  38.  
  39. }
  40.  
  41. echo "</ul></div>";
  42. echo "<br>";
  43. }
  44. else
  45. {
  46. echo "Niestety, nie ma na razie miejsce na literę <b>$letterm</b>";
  47. }
  48. }else{echo "Błędna wartość zmiennej letter";}
  49. }
  50.  
mmmmmmm
w 16 linii pobierasz rekord, a zaraz potem w 22 również pobierasz
Dopler
jak to przerobić bo muszę mieć warunek i potem pętlę - mogę się w pętli odnieść do warunku ?
Forti
  1. ...
  2. $getWord=mysql_query("SELECT SUBSTRING(miejsce, 1, 3) as miejsce_po FROM wlasciciele WHERE miejsce LIKE '$letterm%' OR miejsce LIKE '$letterm2%' OR miejsce LIKE '$letterm3%' GROUP BY miejsce_po", $db);
  3.  
  4.  
  5.  
  6. if ($getWord) {
  7.  
  8. while ...
  9.  
  10. }
  11.  
  12. ...
Dopler
Dzięki za pomoc - ale to nie rozwiązuje sytuacji - bo "else" nie działa - zamiast dawać komunikat jest pusto - taki warunek nie uwzględnia sytuacji gdy rekordów jest zero.

ale poradziłem sobie trochąż na około - usunąłe faktycznie pierwsze pobranie i zastąpiłem ilością rekordów w uzysku - i działa.
Forti
Jesteś na forum od 2008 roku i nie potrafisz zrobić warunku? Jeżeli rekordów jest 0 to znaczy, że false, a to znaczy że wykona się else tego co ci podałem.

Słowem: TAK, taki warunek uwzględnia gdy rekordów jest 0. Ewentualnie dopisz sobie:

  1. ...
  2. $getWord=mysql_query("SELECT SUBSTRING(miejsce, 1, 3) as miejsce_po FROM wlasciciele WHERE miejsce LIKE '$letterm%' OR miejsce LIKE '$letterm2%' OR miejsce LIKE '$letterm3%' GROUP BY miejsce_po", $db);
  3.  
  4.  
  5.  
  6. if ($getWord) {
  7.  
  8. while ...
  9.  
  10. } elseif (count($getWord) == 0) {
  11.  
  12. // moze to ci sie wykona... ;]
  13.  
  14. }
  15.  
  16.  
Dopler
kpiny niepotrzebne - niektórym po prostu programowie nie wchodzi do głowy
dzięki wielkie

ps. teraz pisze "moze to ci sie wykona... ;]" wink.gif))
Forti
Cytat(Dopler @ 24.11.2014, 16:33:56 ) *
[...]

ps. teraz pisze "moze to ci sie wykona... ;]" wink.gif))



bo ci zapytanie nie wraca rekordów. A ten napis nie powinien ci się wyświetlać jak nie wywaliłeś "//" <-- to jest komentarz.
Dopler
to były żart! - wszystko działa - dzięki koniec tematu
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.