PHP Menu
Hej alleJeg 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 (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 - (-mellemrum) ind istedet for (mellemrum)
$output .= "- ";
}
else
{
//Ellers laver vi blot et mellemrum.
$output .= " ";
}
}
//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);
?>
