![]() |
![]() ![]() |
![]() |
![]()
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) |
|
|
![]()
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.
|
|
|
![]()
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!
|
|
|
![]()
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! |
|
|
![]()
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 |
|
|
![]()
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!!! |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 10:00 |