ďťż

[php & mysql] Nie poprawne działanie kodu Nawet nie wiem z jakiej racji :/

       

Podstrony


telcocafe

$memid = $row['id']; $gechwister = dbquery("SELECT * FROM tree_memebers WHERE parent_XY_id=$vater AND id<>$memid"); $x = dbarray($gechwister); openside($locale['407']); echo ' <table class="tbl-border" align="left" cellpadding="0" cellspacing="0" border=0 width="600"><tbody><tr>'; while($rod = $x) { echo ' <td rowspan="7" class="tbl2" align="center" width="150"><a href="memeber.php?id='.$rod['id'].'"><img src="'.$rod['fotka_glowna'].'" width=200 alt="'.$rod['imie'].'"></a></td> ';} echo '</tr></table>'; closeside();

Problem polega na tym że pętla while zapętla się i wyświetla rekord nieskończenie wiele razy (przynajmniej tak mi się zdaje bo zacina sie komputer) Pytanie: dlaczego i co na to poradzić ? wiele razy używam tej pętli ale skąd ten problem ? :/
Użytkownik Lycon edytował ten post 23 grudzień 2007, 17:31


$rod = $x to zawsze będzie "spełnione", raczej $rod == $x

Niestety nie rozwiązało to do końca mojego problemu. Sprawa jest jeszcze bardziej skomplikowana niż mi się mogło wydawać.

Przedstawiam cały kod. Zaznaczam, że nie tworzę całkiem nowego kodu tylko robię modyfikacje znanego CMS'a PHP-fusion. Głównie dlatego, że już się przyzwyczaiłem do prostoty nie których funkcji ;)
<?php /*---------------------------------------------------+ | PHP-Fusion 6 Content Management System +----------------------------------------------------+ | Copyright 2002 - 2006 Nick Jones | [url="http://www.php-fusion.co.uk/"]http://www.php-fusion.co.uk/[/url] +----------------------------------------------------+ | Released under the terms & conditions of v2 of the | GNU General Public License. For details refer to | the included gpl.txt file or visit [url="http://gnu.org"]http://gnu.org[/url] +----------------------------------------------------*/ require_once "core.php"; require_once "subheader.php"; include LOCALE.LOCALESET."members-profile.php"; $acc = addslashes(strip_tags($_GET['id'])); if (empty($acc)) { $adres = "index.php"; header("Location:".$adres); } // Pobieranie danych o osobniku całego drzewa $result = dbquery("SELECT * FROM tree_memebers WHERE id=$acc"); $row = dbarray($result); // Rodzice $vater = $row['parent_XY_id']; $mutter = $row['parent_XX_id']; $eltrenXY = dbquery("SELECT * FROM tree_memebers WHERE id=$vater;"); $eltrenXX = dbquery("SELECT * FROM tree_memebers WHERE id=$mutter;"); $x = dbarray($eltrenXY); $x1 = dbarray($eltrenXX); if (!empty($x)) { openside($locale['408']); echo ' <table class="tbl-border" align="left" cellpadding="0" cellspacing="0" border=0 width="600"><tbody><tr>'; echo ' <td rowspan="7" class="tbl2" align="center" width="150"><a href="memeber.php?id='.$x['id'].'"><img src="'.$x['fotka_glowna'].'" width=200 alt="'.$x['imie'].'"></a></td><td rowspan="7" class="tbl2" align="center" width="150"><a href="memeber.php?id='.$x1['id'].'"><img src="'.$x1['fotka_glowna'].'" width=200 alt="'.$x1['imie'].'"></a></td> '; echo '</tr></table>'; closeside(); } //Wybrany osobnik openside($locale['400']); echo '<table class="tbl-border" align="left" cellpadding="0" cellspacing="0" border=0 width="600"><tbody><tr> <td rowspan="7" class="tbl2" align="center" width="150"> <a href="'.$row['fotka_glowna'].'"><img src="'.$row['fotka_glowna'].'" width=200 alt="'.$row['imie'].'"></a></td> <td class="tbl1" style="white-space: nowrap;" width="1%"><b>'.$locale['401'].'</b></td> <td class="tbl1">'.$row['imie'].' '.$row['nazwisko'].'</td> </tr> <tr> <td class="tbl2" style="white-space: nowrap;" width="1%"><b>'.$locale['402'].'</b></td> <td class="tbl2">'.$row['data_urodzin'].'</td> </tr> <tr> <td class="tbl1" style="white-space: nowrap;" width="1%"><b>'.$locale['403'].'</b></td> <td class="tbl1">'.$row['data_smierci'].'</td> </tr> <tr> <td class="tbl2" style="white-space: nowrap;" width="1%"><b>'.$locale['404'].'</b></td> <td class="tbl2">'.$row['zamieszkanie'].'</td> </tr> <tr> <td class="tbl2" style="white-space: nowrap;" width="1%"><b>'.$locale['405'].'</b></td> <td class="tbl2">'.$row['opis'].'</td> </tr> </tr></tbody></table>'; opentable($locale['406']); echo '<table class="tbl-border" align="left" cellpadding="0" cellspacing="0" border=0 width="600"><tbody><tr> <td class="tbl2">'.$row['fotka1'].'</td> <td class="tbl1">'.$row['fotka2'].'</td> <td class="tbl2">'.$row['fotka3'].'</td> </tr> </tbody></table> '; closetable(); closeside(); //rodzeństwo $memid = $row['id']; $gechwister = dbquery("SELECT * FROM tree_memebers WHERE parent_XY_id=$vater"); $x = dbarray($gechwister); //if (!empty($x)) { openside($locale['407']); echo ' <table class="tbl-border" align="left" cellpadding="0" cellspacing="0" border=0 width="600"><tbody><tr>'; while($rod == dbarray($gechwister)) { echo ' //<td rowspan="7" class="tbl2" align="center" width="150"><a href="memeber.php?id='.$rod['id'].'"><img src="'.$rod['fotka_glowna'].'" width=200 alt="'.$rod['imie'].'"></a></td> '; } echo '</tr></table>'; closeside(); //} require_once "footer.php"; ?>

A oto tabela bazy z phpmyadmin w której są trzy rekordy.
http://img407.images...5/tabelaqe7.png

Teraz jak to wygląda w praktyce.Ogólnie kod ma pokazywać informacje o jednym z członków drzewa genealogicznego. Kiedy wyświetlam członków o id=2 bądź id=3 wszystko jest ok ale gdy wyświetlam kolesia o id=1 wszystko WHILE się zapętla i zawiesza komputer (pracuje na serwie postawionym na własnym kompie ;) Z góry dzięki za pomoc ;)

@Riklaunim: W takim wypadku dobrze było, bo powinno być przypisanie, ale jest jedno "ale":
do $x tylko raz przypisano wartość (czyli tylko pierwszy rekord, czyli zawsze prawda).
Nie wiem czym dokładnie jest dbarray i pochodne funkcje, ale jeśli to tylko wrappery na mysql_fetch_array i pochodne to powinna być taka konstrukcja:
while ($rod = dbarray($whatever)) { }
Gdy mysql_fetch_array zwróci ostatni rekord, a zostanie znów wywołany, to zwróci false, stąd warunek pętli nie będzie już spełniony.

Swoją drogą, proponuję wywalić ten kod, przemyśleć i napisać od nowa ;-)
Wszystkie te CMS to jeden wielki syf, html, php, wszystko w jednym garnku. A jak jeszcze tam wrzucą bezpośrednie zapytania do bazy danych, które wymagają konkretnej struktury, to hoho, nie ma to jak czysty kod.
Użytkownik Einzeinbleth edytował ten post 25 grudzień 2007, 22:24
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.