while() izostavlja poslednji podatak u SQL

1

while() izostavlja poslednji podatak u SQL

offline
  • Web Designer, PHP Developer; HTML, CSS, SQL, jQuery Programmer
  • Pridružio: 13 Jun 2010
  • Poruke: 307
  • Gde živiš: Subotica

Sad sam došao do jednog blesavog problema.
Imam jednu tabelu u koju ubacujem podatke kada se ulogovao admnistrator u administraciju, koliko dugo je bio prisutan, njegov ID, IP i sesija za čišćenje starih log-podataka kada istekne godinu dana.

E sada izlistavam tu tabelu sa "while" funkcijom da vidim zadnjih 50 logova u administraciji.

Problem je što poslednji upisan podatak neće da prikaže i neznam zašto. Ako ima na primer 20 logova, ja vidim samo 19. ZAŠTO?

Ovo do sada nisam video u praksi.
Probao sam i sa "foreach" probao sam i sa "loop" isto.

Šta kažu iskusniji programeri?



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Pridružio: 14 Feb 2008
  • Poruke: 12396

Nevezano za jezik, mislim da grešiš negde u samoj srži uslova zbog čega dobijaš jedan manje prikaz. Proveri ponovo samu srž uslova (neretko se pogreši u matematičkim znakovima kod uslova).
Što objašnjava isti rezultat ako si koristio isti uslov za druge provere.

Okači kod i možda će neko iz ove oblasti dati konkretno rešenje, ja ti ovo pišem iz iskustva iz drugog jezika i onoga gde sam ja neretko grešio.



offline
  • Web Designer, PHP Developer; HTML, CSS, SQL, jQuery Programmer
  • Pridružio: 13 Jun 2010
  • Poruke: 307
  • Gde živiš: Subotica

Srki94 ::Nevezano za jezik, mislim da grešiš negde u samoj srži uslova zbog čega dobijaš jedan manje prikaz. Proveri ponovo samu srž uslova (neretko se pogreši u matematičkim znakovima kod uslova).
Što objašnjava isti rezultat ako si koristio isti uslov za druge provere.

Okači kod i možda će neko iz ove oblasti dati konkretno rešenje, ja ti ovo pišem iz iskustva iz drugog jezika i onoga gde sam ja neretko grešio.

Koristim isti kod za izlistavanje mali milion puta, zato sam sad sluđen.

$sql_admins=mysql_query("SELECT * FROM `online_admin` ORDER BY `online_admin`.`time` DESC ");       if(mysql_fetch_array($sql_admins)>=1)       {          while($a_users=mysql_fetch_array($sql_admins))          {             echo $a_users['id_user'];          }       }else{echo '<h3>No members</h3>';}

Ovo je jednostavan kod za izlistavanje koji koristim kao i većina PHP programera. Svugde perfektno radi ali samo ovde mi nešto zeza. Kažem, probao sam i sa loop, sa foreach ali isti problem.
Isto sam pokušao sa ASC i DESC sortiranjem, urado sam i bez ORDER BY, Pokušao sam sortirati i po datumu i po imenu, i po neznam čemu i uvek zadnji podatak ne ispiše.

Napravio sam DEBUG i svugde prolazi a kada treba while da uradi svoje onda prikaže za -1.
Ako u tabeli imam samo jedan podatak, onda mi ne pokaže ništa. Praktično imam NULL u tom delu a u bazi postoji jedan podatak koji trebam izlistati.

pomislio sam da je problem u SQL bazi ali nije ni tamo.

Pre ovog koda nemam ni jedan drugi PHP kod da ga blokira.

offline
  • Pridružio: 14 Feb 2008
  • Poruke: 12396

Opet ja Razz
Izguglao sam uverljivo rešenje, da se ne pravim pametan evo ti link pa vidi sam :
http://stackoverflow.com/questions/10181769/mysql-.....d-returned
Drugi post objašnjava u čemu je problem i kako da ga rešiš.

Ukoliko ni to ne pomogne ostaje ti samo da čekaš nekoga ko radi u PHP-u da odgovori.
Sretno Ziveli

offline
  • Web Designer, PHP Developer; HTML, CSS, SQL, jQuery Programmer
  • Pridružio: 13 Jun 2010
  • Poruke: 307
  • Gde živiš: Subotica

To je to ali nije rešenje to. Ne uspevam dobiti redovan rezultat.

offline
  • Pridružio: 17 Jun 2012
  • Poruke: 727

Probaj u ovoj liniji da izostavis znak "="

if(mysql_fetch_array($sql_admins)>=1)

offline
  • PHP Developer
  • Pridružio: 02 Okt 2005
  • Poruke: 546

Meni deluje da preskocis prikaz prvog sa if(mysql_fetch_array($sql_admins)>=1)
mozda si hteo da pitas mysqli_num_rows()

offline
  • PHP developer
  • Pridružio: 22 Mar 2006
  • Poruke: 3755
  • Gde živiš: 127.0.0.1

if(mysql_fetch_array($sql_admins)>=1)

Prvo proveri sta vraca mysql_fetch_array:

Citat:Returns an array of strings that corresponds to the fetched row, or FALSE if there are no more rows.

I onda vidis da vraca ili niz, ili (boolean) false, kao i da ne postoji scenario u kome ce da vrati integer.

Kao sto je kolega MeD vec napomenuo, koristi mysql_num_rows u tom uslovu, i to je to.

Btw, koriscenje mysql_* funkcija se vec neko vreme ne preporucuje:

Citat:This extension is deprecated as of PHP 5.5.0, and will be removed in the future.

offline
  • Web Designer, PHP Developer; HTML, CSS, SQL, jQuery Programmer
  • Pridružio: 13 Jun 2010
  • Poruke: 307
  • Gde živiš: Subotica

Rastafarii ::if(mysql_fetch_array($sql_admins)>=1)

Prvo proveri sta vraca mysql_fetch_array:

Citat:Returns an array of strings that corresponds to the fetched row, or FALSE if there are no more rows.

I onda vidis da vraca ili niz, ili (boolean) false, kao i da ne postoji scenario u kome ce da vrati integer.

Kao sto je kolega MeD vec napomenuo, koristi mysql_num_rows u tom uslovu, i to je to.

Btw, koriscenje mysql_* funkcija se vec neko vreme ne preporucuje:

Citat:This extension is deprecated as of PHP 5.5.0, and will be removed in the future.


Mhmmmm. Šta će se onda koristiti? nisam čitao ranije o tome.
Kako ti konektuješ bazu i izlistavaš? Ali bez class funkcija, hoću čisto da vidim.
Veoma mi je važno zbog projekta kojeg radim ali i za druge PHP programere je veoma bitno.

offline
  • PHP Developer
  • Pridružio: 02 Okt 2005
  • Poruke: 546

samo dodas i Smile i pazis se jabuke Very Happy
mysqli http://php.net/manual/en/book.mysqli.php

Ko je trenutno na forumu
 

Ukupno su 658 korisnika na forumu :: 4 registrovanih, 0 sakrivenih i 654 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: ALBION101, Mixelotti, opt1, wolverined4