Avatar billede Znak Nybegynder
04. november 2009 - 12:52 Der er 5 kommentarer og
1 løsning

Menu og side i en query

Hej eksperter! :)

Jeg har lavet et lille script der henter indhold til en side, samt menuen. Dog har jeg problemer med den hopper det første menu punkt over i databasen.

Derfor søger jeg hjælp indehos jer.

            $pageSQL = $mysqli->query("SELECT pg_id,pg_content,pg_title,pg_description,pg_keywords,cat_id,cat_name,cat_seo_url FROM sl_page,sl_category WHERE pg_id='".(int)$_GET['pid']."' LIMIT 0,100") OR DIE(mysqli_error());
            $page = $pageSQL->fetch_assoc(); // HENTER SIDE INFO
            require_once("include/header.inc.php");
                echo $page['pg_content'];
                echo "<a href=\"?sid=".$page['cat_id']."&catname=".$page['cat_seo_url']."\">".$page['cat_name']."</a>";
        while ($menu = $pageSQL->fetch_assoc()) // HENTER MENU
        {
            $page['menu'] .= "\t\t\t\t\t<li><a href=\"?sid=".$menu['cat_id']."&catname=".$menu['cat_seo_url']."\">".$menu['cat_name']."</a></li>\n";
        }

            require_once("include/footer.inc.php");

Forsat god dag!
Znak
Avatar billede showsource Seniormester
04. november 2009 - 13:07 #1
Det er vist fordi du inden din while henter data fra første række.
Og derudover laver du jo to gange fetch_assoc på samme query.

Og så ligner det at du med fordel kan splitte din tabel op i to, en med kategori id og navn, en anden med bl.a. idref til første tabel.

Men prøv at kikke på de forskellige mysqli muligheder.
$mysqli->use_result() bl.a.
Avatar billede Slettet bruger
04. november 2009 - 13:22 #2
For det første - du er WIDE OPEN for sql-injection-angreb
- Du benytter en "uvasket" $_GET variabel i dit SQL-udtryk.

Det manglende menu-punkt skyldes at du ikke trækker menu-data ud af det første "fetch"

$page = $pageSQL->fetch_assoc(); // HENTER SIDE INFO

Viser siden - men ikke de menu-data der måtte være

while ($menu = $pageSQL->fetch_assoc()) // HENTER MENU
{
Viser menuen (minus indholdet at første fetch)
}



Du kan muligvis få dit manglende menupunkt tilbage således:

.
..
echo "<a href=\"?sid=".$page['cat_id']."&catname=".$page['cat_seo_url']."\">".$page['cat_name']."</a>";

$page['menu'] .= "\t\t\t\t\t<li><a href=\"?sid=".$page['cat_id']."&catname=".$page['cat_seo_url']."\">".$page['cat_name']."</a></li>\n";

while ($menu = $pageSQL->fetch_assoc()) // HENTER MENU
  {
  $page['menu'] .= "\t\t\t\t\t<li><a href=\"?sid=".$menu['cat_id']."&catname=".$menu['cat_seo_url']."\">".$menu['cat_name']."</a></li>\n";
  }
require_once("include/footer.inc.php");
..
.

MEN, det bør tænkes helt om...
Avatar billede Znak Nybegynder
04. november 2009 - 16:26 #3
Jeg har sat en (int) foran, så den brurde da ikke kunne hackes...

Hvordan kan den tænkes om?
- Database design/udtræk er ikke min bedste side
Avatar billede BrJoe Nybegynder
04. november 2009 - 16:45 #4
Lige off topic her, men T4NK3R, hvordan "vasker" man en GET variabel?

Er det bare ligesom med POST?
Avatar billede Slettet bruger
04. november 2009 - 17:45 #5
Ups, jeg overså den (int) - ja, den vil holde møgdyrene væk : )

GET og POST er principielt det samme - bare et spørgsmål om værdierne ligger i URL'en eller headeren.

Jeg ville skille tingene ad: Ét opslag for at hente siden, og et andet til menuen. Som det er nu henter du jo faktisk dokument-indholdet for alle dokumenterne ud af databasen, selvom du kun bruger menu-data fra alle de andre.

Og menuen: Du gendanner den fra bunden ved hver eneste dokumentvisning .
= Det samme halvstore arbejde igen og igen og igen... (spildt CO2)

Hvis du i stedet gen-beregnede, og gemte menu-HTML'en, ved opdatering / oprettelse af nye dokumenter (hvor menuen faktisk skal ændres)
- og så bare hentede den (bevidstløst) fra eet data-felt ved almindelig visning...
Avatar billede Znak Nybegynder
05. november 2009 - 16:55 #6
Tak for hjælpen T4NK3R :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester