Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: nie wyswietlany pierwszy rekord mysql
Forum PHP.pl > Forum > PHP
hildek
Jak w temacie mam problem z prostym menu motoryzacyjnym.
Idea jest prosta :

Nazwa działu :
-wyniki z bazy

Nazwa dziala:
-wyniki z bazy

itd...

wyniki sa w roznych tabelach poukladane tematycznie.
tabele maja nazwy nie nadajace sie do wykorzystania w "nazwa dzialau", stad sa wrzucone do jednej tabeli typ i z niej pobieram id dla calosci.

  1. function pokazMenu(){
  2. require "dane.inc.php";
  3. require "polacz.inc.php";
  4. $menu= NULL;
  5.  
  6. $query = "SELECT * FROM typ ORDER BY idTyp";
  7. $query1 = "SELECT * FROM ukladhamulcowy ORDER BY idUkladHamulcowy";
  8. $query2 = "SELECT * FROM ukladchlodzenia ORDER BY idUkladChlodzenia";
  9.  
  10. $result = mysql_query($query, $conn) or die(mysql_error());
  11. $result1 = mysql_query($query1, $conn) or die(mysql_error());
  12. $result2 = mysql_query($query2, $conn) or die(mysql_error());
  13.  
  14. if($result){
  15. while($rzad = mysql_fetch_array($result)){
  16.  
  17. if($result1){
  18. $rzad1 = mysql_fetch_array($result1);
  19. if(count($rzad1)>1){
  20. $menu.=" <p>Układ hamulcowy : </p>";
  21. }
  22. while($rzad1 = mysql_fetch_array($result1)){
  23. $menu.=" <p><a class='test' href='bleble'".$rzad['idTyp'].">".$rzad1['nazwa']."</a></p>";
  24. }
  25. }
  26.  
  27. }
  28. }
  29. echo "$menu";
  30. }


Moze banalny problem, ale przy wyswietlaniu wcina mnie pierwszy wiersz z tabeli.
Jak usune warunek wyswietlania nazwy " if(count($rzad1)>1){
$menu.=" <p>Układ hamulcowy : </p>";
}" to wyswietla poprawnie.

Nie bardzo rozumiem dlaczego tak to sie odbywa i bede wdzieczny za wyjasnienie.

Stad pytanie, jak w najprostszy sposob usystematyzowac to menu ?
Z gory dzieki za pomoc.
nospor
Ilu Was jeszcze popełni ten bład? Bo już takich jak ty było setki....

$rzad1 = mysql_fetch_array($result1);
Przecież tu pobierasz ten pierwszy rekord. Skoro go pobierasz i go nie wyświetlasz to logiczne ze go tracisz...
hildek
Cytat(nospor @ 20.02.2013, 18:07:08 ) *
Ilu Was jeszcze popełni ten bład? Bo już takich jak ty było setki....

$rzad1 = mysql_fetch_array($result1);
Przecież tu pobierasz ten pierwszy rekord. Skoro go pobierasz i go nie wyświetlasz to logiczne ze go tracisz...


da rade jakos przesunac wskaznik na poczatek tablicy przy nastepnym pobraniu?

masz jakis pomysl jak prosto rozwiazac moje menu?

btw. nie rozumiem w takim razie samego dzialania funkcji mysql_fetch_array.
Z tego co wyczytalem w manualu, to funkcja zapisuje do tablicy ($rzad1) ktora podstawimy wyniki z zapytania sql ($result1).
W takim razie dlaczego pobieram 1 rekord?

Zrozumialem to jako przypisanie wyniku do tablicy, a nie wywolanie tablicy...

sry za banal, ale chce sie czegos nauczyc.

pzdr - jeden z setek.


edit:
ok moze inaczej sformuluje pytanie :
jak sprawdzic zawartosc zwroconego wyniku przez sql. Czy sa rekordy czy nie ?

edit2:
poradzilem sobie z efektem koncowym, ale chcialbym pisac sensownie, a ten kod wyglada mnie nie za bardzo. Stad prosba o podpowiedzenie, czy mozna to zrobic prosciej, czy sa jakies funkcje minimalizujace kod.
Chodzi o to czy moge ominac ten temat nie wysylajac dodatkowego zapytania do bazy o ilosc rekordow i czy da sie to zrobic z poziomu php.
Z gory dzieki.

Kod
    function pokazMenu(){
    require "dane.inc.php";
    require "polacz.inc.php";
    $menu= NULL;
    
    $query = "SELECT * FROM typ ORDER BY idTyp";
    $query1 = "SELECT * FROM ukladhamulcowy ORDER BY idUkladHamulcowy";
    $query11 = "SELECT count(*) FROM ukladhamulcowy";
    $query2 = "SELECT * FROM ukladchlodzenia ORDER BY idUkladChlodzenia";
    
    $result = mysql_query($query, $conn) or die(mysql_error());
    $result1 = mysql_query($query1, $conn) or die(mysql_error());
    $result11 = mysql_query($query11, $conn) or die(mysql_error());
    $result2 = mysql_query($query2, $conn) or die(mysql_error());
    
    if($result){
    while($rzad = mysql_fetch_array($result)){
    
  
    if($result11){
            $ilosc_rekordow11 =  mysql_fetch_row($result11);
            if($ilosc_rekordow11>0){
     $menu.="         <p>Układ hamulcowy : </p>";    
                        }
    if($result1){
    while($rzad1 = mysql_fetch_array($result1)){    
    $menu.=" <p><a class='test' href='bleble'".$rzad['idTyp'].">".$rzad1['nazwa']."</a></p>";
    }
    }
    
    }
    }
    echo "$menu";
    }
mar1aczi
mysql_num_rows
abort
Oczywiście mysql_num_rows jest jak najbardziej poprawnym rozwiązaniem. Niemniej, w przypadkach, kiedy niezależnie od ilości zwróconych wyników chcemy ZAWSZE te wyniki odczytać i dopiero potem przetwarzać, można zrobić to np. tak:

  1. $conn = mysql_connect(.......);
  2. $query = "SELECT * FROM ...........................";
  3. $result = mysql_query($query);
  4. $res = array(); // dla czytelności!
  5. while ($res[] = mysql_fetch_array ($conn)) {} // Wczytujemy wszystko
  6. $rows = count ($res);


Choć oczywiście mysql_num_rows z reguły będzie lepszym rozwiązaniem.
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.