Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> while... - dlaczego zwraca mi o dwa rekordy za malo???
geminek
post
Post #1





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 16.05.2003

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


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?(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) I jak moge wyswietlic wszystkie rekordy?(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
uboottd
post
Post #2





Grupa: Zarejestrowani
Postów: 384
Pomógł: 0
Dołączył: 3.04.2003
Skąd: Chorzow

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


Pokaz wiekszy kawalek kodu, to wtedy mozna sie zastanawiac. Tak przynajmniej od miejsca gdzie robisz zapytanie do konca petli.
Go to the top of the page
+Quote Post
b3
post
Post #3





Grupa: Zarejestrowani
Postów: 65
Pomógł: 2
Dołączył: 25.08.2003
Skąd: Lublin

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


podaj przynajmiej zapytanie do serwera!
Go to the top of the page
+Quote Post
geminek
post
Post #4





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 16.05.2003

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


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.
(IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Mam nadzieje, ze wpadnie wam cos do glowy, bo ja nie mam zielonego pojecia co sie dzieje!
Go to the top of the page
+Quote Post
faster
post
Post #5





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 9.09.2002
Skąd: Pszczyna

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


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
Go to the top of the page
+Quote Post
geminek
post
Post #6





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 16.05.2003

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


8)
OK! Dzieki! Sprawdze! Mam nadzieje, ze pomoze!!!
Co ja mowie - oczywiscie, ze pomoze!!!
(IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Dzieki jeszcze raz!!!
Go to the top of the page
+Quote Post

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: 23.08.2025 - 10:00