Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: while... - dlaczego zwraca mi o dwa rekordy za malo???
Forum PHP.pl > Forum > PHP
geminek
Mam problem!
Baza MS SQL Serwer 2000 i instrukcja
[sql:1:6eb096d302]while(...) {...} [/sql:1:6eb096d302]
zwraca mi np. 10 rekordow, mimo iz
[sql:1:6eb096d302]mssql_num_rows() [/sql:1:6eb096d302]
zwraca mi liczbe 12. Sprawdzilem w bazie i rzeczywiscie mam przy danym zapytaniu 12 rekordow!
I jeszcze jedno. Dane wyswietlaja mi sie posortowane. I to samo zapytanie SQL, ktore wyswietla mi na stronie wlasnie 10 rekordow, gdy wykonam je w Enterprise Manager zwraca mi 12. A co dziwne, niewazne jakiego uzyje sortowania zawsze na stronie nie wyswietlaja mi sie dwa pierwsze rekordy!
O co tu chodzi?questionmark.gif I jak moge wyswietlic wszystkie rekordy?questionmark.gif
uboottd
Pokaz wiekszy kawalek kodu, to wtedy mozna sie zastanawiac. Tak przynajmniej od miejsca gdzie robisz zapytanie do konca petli.
b3
podaj przynajmiej zapytanie do serwera!
geminek
Kod odpowiedzialny za cale to zajscie wyglada tak:
[php:1:ebb0860789]
<?
require("inc/znaki.php"); // funkcja zamieinajaca 'krzaczki' na polskie znaki
require("inc/baza.php"); // polaczenie z baza SQL

$pyt = "SELECT artykul.NAZWA, artykul.NAZWA2, artykul.STAN, artykul.INDEKS_KATALOGOWY, artykul.ID_JEDNOSTKI, cena_artykulu.CENA_NETTO, cena_artykulu.CENA_BRUTTO, jednostka.SKROT, kategoria_artykulu.NAZWA AS kategoria ";
$pyt.= "FROM artykul, cena_artykulu, jednostka, kategoria_artykulu ";
$pyt.= "WHERE (cena_artykulu.ID_ARTYKULU=artykul.ID_ARTYKULU) and (cena_artykulu.ID_CENY=1) and (artykul.id_kategorii=".$kat.") and (artykul.stan>0) and (artykul.ID_JEDNOSTKI=jednostka.ID_JEDNOSTKI) and (kategoria_artykulu.ID_KATEGORII=".$kat.") ";
$pyt.= "ORDER BY artykul.nazwa";
$pytanie = mssql_query($pyt);
$odp = mssql_fetch_array($pytanie);

if ($odp = mssql_fetch_array($pytanie)) { // jezeli SELECT zwrocil jakas wartosc
include("inc/tabela-naglowek.php"); // rozpoczecie tabeli i pierwszy wiersz, w ktorym znajduje sie opis kolumn
while ($odp = mssql_fetch_array($pytanie)) {

$nazwa = $odp['NAZWA']; // nazwa produktu
$cNetto = $odp['CENA_NETTO']; // cena nettto
$cBrutto = $odp['CENA_BRUTTO']; // cena brutto
$stan = $odp['STAN']; // aktualny stan magazynowy
$indeks = $odp['INDEKS_KATALOGOWY']; // numer katalogowy
$jednostka = $odp['SKROT']; // jednostka produktu (np. szt., m, litr, kg)
$opis = $odp['NAZWA2']; // krotki opis produktu, ktory pojawia sie po najechaniu mycha na nazwe produktu (funkcja: legenda)

print("<TR bgcolor='#FAFAFF' onMouseOver="this.bgColor='#F4F4FF'" onMouseOut="this.bgColor='#FAFAFF'">");
print("<TD><FONT onmouseover="legenda('".trim(htmlentities($opis))."')" onmouseout='brak()'>".trim(znaki($nazwa))."</FONT><FONT> (".trim($jednostka).")</FONT></TD>");
print("<TD><FONT>".trim(znaki($indeks))."</FONT></TD>");
print("<TD><FONT>".round($stan, 2)."</FONT></TD>");
print("<TD><FONT>".round($cNetto, 2)." zł</FONT></TD>");
print("<TD><FONT>".round($cBrutto, 2)." zł</FONT></TD>");
print("</TR>n");
}
echo("</TABLE>");
} else { // tekst pokazujacy sie, gdy SELECT nie zwrocil nic
echo("<CENTER><FONT><BR><BR><BR>Niestety dla kategorii: <B>".htmlentities(stripslashes($kategoria))."</B> nie znaleziono żadnych artykułów!</FONT></CENTER>");
}
?>
[/php:1:ebb0860789]
w komentarzach drobne wyjasnienia.
smile.gif
Mam nadzieje, ze wpadnie wam cos do glowy, bo ja nie mam zielonego pojecia co sie dzieje!
faster
Problem tkwi w linijkach 10 i 12. Za każdym razem kiedy wywołujesz metodę 'mssql_fetch_array' wtedy wewn. wskaźnik aktualnego rekordu jest przesuwany do następnego -> co powoduje, że w linijce 14 jesteś już właściwie w 3 rekordzie.
Rozwiązanie:
1. albo przed linijką 14 zresetujesz wskaźnik rekordu (musisz poszukać jak bo nie pamiętam ...)
2. albo sprawdzisz w jakiś inny sposób czy zapytanie coś zwróciło ... np. 'mysql_num_rows' (zwraca liczbe rekordow)

Pozdro
::faster
geminek
8)
OK! Dzieki! Sprawdze! Mam nadzieje, ze pomoze!!!
Co ja mowie - oczywiscie, ze pomoze!!!
smile.gif
Dzieki jeszcze raz!!!
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.