Avatar billede jsp33 Nybegynder
09. januar 2008 - 10:09 Der er 6 kommentarer

PHP Menu

Hej alle
Jeg er ny i programering af PHP.
Nedenstående script er fundet på nettet, men jeg kan ikke få det at virke, det melder følgende fejl:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/virtual/public_html/menu.php on line 89
Hjælp, Hjælp
MV JSP


<?
/*
i denne tutorial vil jeg forsøge at forklare jer hvordan man laver en menu med indryk
i php tilkoblet en MySQL-database...
menuen kommer til at se ud nogenlunde som denne:
Index
Produkter
- Bundkort
- ECS
- Asus
- Chaintek
- CPU
- Socket 476
- Socket A
Profil
- Hvad er vi?
- Hvem er vi?
- Hvor er vi?
osv osv osv
alt dette hentes fra MySQL-Databasen :)
håber denne tutorial kan bruges
MVH
Erik Andersen aka ETMA :)
husk at køre det under 'SQL' i dit phpMyAdmin :
'
#
# Struktur dump for tabellen `menu`
#
CREATE TABLE menu (
id int(11) NOT NULL auto_increment,
menu_name varchar(200) NOT NULL default '',
menu_order int(11) NOT NULL default '0',
menu_url varchar(200) NOT NULL default '',
parent_id int(11) NOT NULL default '0',
UNIQUE KEY id (id)
) TYPE=MyISAM;
#
# Data dump for tabellen `menu`
#
INSERT INTO menu (id, menu_name, menu_order, menu_url, parent_id) VALUES (1, 'Index', 0, 'Index.php', 0),
(2, 'Produkter', 1, 'products.php', 0),
(4, 'ECS', 0, 'products.php?groupid=3&firm=4', 3),
(5, 'Asus', 1, 'products.php?groupid=3&firm=5', 3),
(6, 'Chaintek', 2, 'products.php?groupid=3&firm=6', 3),
(3, 'Bundkort', 0, 'products.php?groupid=3', 2),
(7, 'CPU', 1, 'products.php?group=7', 2),
(8, 'Socket 478', 0, 'products.php?group=7&firm=8', 7),
(9, 'Socket A', 1, 'products.php?group=7&firm=9', 7),
(10, 'Profil', 2, 'profile.php', 0),
(11, 'Hvad er vi?', 0, 'profile.php?question=11', 10),
(12, 'Hvem er vi?', 1, 'profile.php?question=12', 10),
(13, 'Hvor er vi?', 2, 'profile.php?question=13', 10);
'
*/
//Her kalder vi databasen med mysql_connect ("Adresse til mysql-databasen","Brugernavn","Password");
mysql_connect ("","","");
//Her vælger vi databasen vi vil åbne
mysql_select_db ("");
//Her laver vi funktionen til at lave mellemrummene
function getspaces ($intTMP)
{
//Her bestemmer vi hvad der skal ske for hvert mellemrum - dvs hvis du har lyst til at sætte punktum (.) istedet for &nbsp; (mellemrum) så retter for ($x=0;$x<$intTMP;$x++)
{
//Grunden til at jeg bruger $output .= er at punktummet (.) foran lighedtegnet bestemmer at det skal sættes på den iforvejen eksisterende //hvis $intTMP f.eks. er lig 2 som den vil blive efter Bundkort og CPU sætter den ikke bare til kun et enkelt mellemrum.
if (($x == $intTMP-1) && ($x != 0))
{
//Hvis $x er en tak mindre end $intTMP og anderledes end 0 skal den sætte -&nbsp; (-mellemrum) ind istedet for &nbsp; (mellemrum)
$output .= "-&nbsp;";
}
else
{
//Ellers laver vi blot et mellemrum.
$output .= "&nbsp;";
}
}
//her returnerer vi variablen $output's værdi.
return $output;
}
//Her laver vi funktionen til selve menuen
function getmenu ($parent_id)
{
//Her globaliserer vi $intTMP hvilket betyder at den kan hentes uden for denne funktion og side
global $intTMP;

//Her er vores MySQL-string hvor vi vælger efter Parent_id i databasen. Parent_id 0 er første menupunkt - dvs Index, Produkter eller Profil i $query = mysql_query ("SELECT * FROM menu WHERE parent_id = '$parent_id' ORDER BY menu_order ASC");
//hvis den finder nogle skal den gøre dette, dvs hvis $parent_id = 1 (altså Index) skal den ikke gøre det.
if (mysql_num_rows($query) > 0)
{
//Dette skal den så gøre ved samtlige af dem den finder i tabellen der overholder SQL-stringens WHERE-del.
//Jeg smider dette ned i et array kaldet $rs - dette kan kaldes lige hvad du vil - f.eks. $hest :)
while ($rs = mysql_fetch_array($query))
{
//Her ligger vi en til $intTMP som så efterfølgende vil rykke et mellemrum ind hvis der er nogle undermenupunkter til dette menupunkt.
$intTMP++;
//Her skriver jeg så linket ud til menupunktes destination samt funktionen getspaces hvor den sætter mellemrummet hvis dette echo getspaces($intTMP).'<a href="'.$rs[menu_url].'">'.$rs[menu_name].'</a><br>'."\n";
//Her kalder vi så denne funktion igen med det nye parent_id altså $rs[id].
getmenu($rs[id]);
//efter alt dette skal vi huske at trække en fra $intTMP igen.
$intTMP--;
}
}
}
//Her kører vi så alt det vi har lavet oven over
getmenu(0);
?>
Avatar billede Slettet bruger
09. januar 2008 - 11:57 #1
Kort fortalt:
Databasen oprettes med MySqlAdmin (navnet vælger du)f. eks. menu, derefter skal tabellerne oprettes ved at du gemmer koden

#
# Struktur dump for tabellen `menu`
#
CREATE TABLE menu (
id int(11) NOT NULL auto_increment,
menu_name varchar(200) NOT NULL default '',
menu_order int(11) NOT NULL default '0',
menu_url varchar(200) NOT NULL default '',
parent_id int(11) NOT NULL default '0',
UNIQUE KEY id (id)
) TYPE=MyISAM;
#
# Data dump for tabellen `menu`
#
INSERT INTO menu (id, menu_name, menu_order, menu_url, parent_id) VALUES (1, 'Index', 0, 'Index.php', 0),
(2, 'Produkter', 1, 'products.php', 0),
(4, 'ECS', 0, 'products.php?groupid=3&firm=4', 3),
(5, 'Asus', 1, 'products.php?groupid=3&firm=5', 3),
(6, 'Chaintek', 2, 'products.php?groupid=3&firm=6', 3),
(3, 'Bundkort', 0, 'products.php?groupid=3', 2),
(7, 'CPU', 1, 'products.php?group=7', 2),
(8, 'Socket 478', 0, 'products.php?group=7&firm=8', 7),
(9, 'Socket A', 1, 'products.php?group=7&firm=9', 7),
(10, 'Profil', 2, 'profile.php', 0),
(11, 'Hvad er vi?', 0, 'profile.php?question=11', 10),
(12, 'Hvem er vi?', 1, 'profile.php?question=12', 10),
(13, 'Hvor er vi?', 2, 'profile.php?question=13', 10);
'
*/

i en fil du kalder menu.sql og indlæser den i db

resterende kode gemmes som et .php doc - hvori du indsætter adgang til db

//Her kalder vi databasen med mysql_connect ("Adresse til mysql-databasen","Brugernavn","Password");
mysql_connect ("Localhost i 99% tilfælde","Brugernavn","Password");
og
//Her vælger vi databasen vi vil åbne
mysql_select_db ("menu");

Har ikke kigget nærmere på koden, men ovennævnte data som skal indskrives har du fra dit webhost
Avatar billede jsp33 Nybegynder
09. januar 2008 - 17:29 #2
Hej ibtage

Tak for dit svar, men jeg tror ikke du har forstået, eller jeg har udtrykt mig forkert? Oprettelse af tabel og opfyldning af denne er ok.
Problemer er når jeg kalder scriptet kommer det med fejlbeskrivelsen:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/virtual/public_html/menu.php on line 89.

Mvh jsp33
Avatar billede Slettet bruger
09. januar 2008 - 18:22 #3
Så må jeg lige kigge på koden og evt. teste, men det bliver ikke i dag, kan du vente - jeg skal selv have sat det op på en server, har ikke nogen localserver pt.
Avatar billede Slettet bruger
09. januar 2008 - 21:27 #4
Har nu kigget på den, men jeg kan ikke finde en fornuftig forklaring på den fejlmeddelelse, har du ikke mulighed for at spørge der hvor du har fået koden ?

ellers må du finde en anden menu, for jeg kan ikke se at denne skulle være attraktiv
Avatar billede jsp33 Nybegynder
09. januar 2008 - 21:46 #5
Hej ibtage

Jeg prøver om jeg kan spørge der, du skal hav mange tak for din ulejlighed.

Mvh jsp33
Avatar billede Slettet bruger
09. januar 2008 - 21:49 #6
Det var såmænd så lidt, ærgelig jeg ikke kunne hjælpe dig
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
Kurser inden for grundlæggende programmering

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