02. februar 2006 - 00:16Der er
12 kommentarer og 2 løsninger
Dropdown menu hvor der skal opdages nedenunder
Hejsa.
Er der nogle der kan hjælpe mig med at at lave en drop down menu der henter nogle kategorier fra en mysql tabel. Der skal man så kunne vælge imellem de forskellige menuer fra mysqlen og når man så vælger har jeg samtidig. en anden tabel, hvor den så skal vise de information som hører under den valgte kategori.
Det skulle gerne være at drop down skal være ovenover de informationer der bliver vist nedenunder så snart man vælger kategori (man skal ikke submit noget den skal komme automatisk så snart de vælger i drop downen)
Jeg har prøvet at strikke et eksempel sammen. Data fra tabellen categories hentes ud i en select-box. Når man vælger en kategori i select-boxen submittes formen automatisk, og det forsøges at hente information i tabellen infos ved det valgte kategori id. Findes der en post med info til den valgte kategori, vises informationen ellers vises en fejl-besked.
// Creating option tags with category data $Res = mysql_query("SELECT category_id, category_title FROM categories ORDER BY category_title"); $Options = ""; while (list($CategoryId,$CategoryTitle) = mysql_fetch_row($Res)) { $Selected = ($CategoryId == $ChoosenCategoryId) ? " selected" : ""; $Options .= "<option value=\"$CategoryId\"$Selected>".stripslashes($CategoryTitle)."</option>\n"; }
// If a category was choosen - the info for the category is selected in database if ($ChoosenCategoryId) { $Res = mysql_query("SELECT info_text FROM infos WHERE info_category_id = $ChoosenCategoryId"); if (mysql_num_rows($Res) > 0) list($InfoText) = mysql_fetch_row($Res); else $InfoText = "No info where found!"; } else $InfoText = "Choose a category first!";
?>
<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> <html> <head> <title>-</title> </head> <body> <h1>Choose a category:</h1> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="get" name="FormCategory"> <select name="CategoryId" onchange="this.form.submit()"> <option value="">---- Choose a category ----</option> <?php echo $Options; ?> </select> </form> <h1>Category information:</h1> <?php echo stripslashes($InfoText); ?> </body> </html>
Husk at indsætte din database-connection i toppen, samt tilrette tabel- og feltnavne.
$foresp = mysql_query("SELECT * FROM tabel ORDER BY id ASC"); while ($data = mysql_fetch_assoc($foresp)) { $catid = $data['id']; $catnanv = $data['navn']; ?>
Du mangler en del på det sidset cronaldo i forhold til det første script, det er det første jeg vil have det som, på nær at den kun udskriver den første i hver tabel, der skal den udskrive alle.
På scriptet fra whatever, vælger man først kategori, derefter viser den det er i en anden tabel som er under denne kategori og det virker helt fint, på nær at den kun viser den første under kategorien som bliver valgt og ikke alle de andre.
// Creating option tags with category data $Res = mysql_query("SELECT category_id, category_title FROM categories ORDER BY category_title"); $Options = ""; while (list($CategoryId,$CategoryTitle) = mysql_fetch_row($Res)) { $Selected = ($CategoryId == $ChoosenCategoryId) ? " selected" : ""; $Options .= "<option value=\"$CategoryId\"$Selected>".stripslashes($CategoryTitle)."</option>\n"; }
// If a category was choosen - the info for the category is selected in database if ($ChoosenCategoryId) { $Res = mysql_query("SELECT info_text FROM infos WHERE info_category_id = $ChoosenCategoryId"); if (mysql_num_rows($Res) > 0) { $InfoText = ""; $I = 1; while (list($InfoText) = mysql_fetch_row($Res)) $InfoText .= "<b>Tekst ".$i++."</b><br />$InfoText<br /><br />"; } else $InfoText = "No info where found!"; } else $InfoText = "Choose a category first!";
?> <!doctype html public "-//w3c//dtd html 4.0 transitional//en"> <html> <head> <title>-</title> </head> <body> <h1>Choose a category:</h1> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="get" name="FormCategory"> <select name="CategoryId" onchange="this.form.submit()"> <option value="">---- Choose a category ----</option> <?php echo $Options; ?> </select> </form> <h1>Category information:</h1> <?php echo stripslashes($InfoText); ?> </body> </html>
Afhængig af hvordan du vil have infoen for en valgte kategori vist, kan det være det skal tilpasses.
Hvis du har flere felter i info-tabellen der skal ud, kan du f.eks. ændre det til:
// If a category was choosen - the info for the category is selected in database $InfoArray= array(); if ($ChoosenCategoryId) { $Res = mysql_query("SELECT * FROM infos WHERE info_category_id = $ChoosenCategoryId"); if (mysql_num_rows($Res) > 0) { while ($Row = mysql_fetch_assoc($Res)) $InfoArray[] = $Row; } }
Så får du et multidimensionelt array with alle felterne fra info-tabellen.
Når du så skal udskrive infoen laver du bare en løkke:
if (is_array($InfoArray) && isset($InfoArray[0])) { while (list(,$InfoData) = @each($InfoArray)) { // Udskriv din html-kode med infoen. Altså $InfoData['felt1'], $InfoData['felt2'] osv. } }
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.