Avatar billede moine Nybegynder
10. september 2003 - 17:19 Der er 7 kommentarer og
1 løsning

linksdatabase MED kategorier

Hej...

Hvordan laver jeg en linksdatabase vha php og MySQL, hvor der er mulighed for opdeling af links'ne i kategorier?

Brugeren af siden skal kunne tilføje et link dvs. url, navn på linket, beskrivelse (vises i title="...") samt vælge den kategori linket skal tilhøre.

Det har jeg indtil videre klaret med følgende kode, der ikke har nogen kategori-muligheder:

<?
...
       
    mysql_query("INSERT INTO links (url, navn, descript) VALUES ('$links_url',
    '$links_navn', '$links_descript')");
   
} else {
?>
<FORM METHOD=POST ACTION=<? echo
    $PHP_SELF; ?>>

<INPUT TYPE=PASSWORD NAME=kodeord>

<INPUT TYPE=TEXT NAME=links_navn value="Navn på link">

<INPUT TYPE=TEXT NAME=links_url value="http://">

<INPUT TYPE=TEXT NAME=links_descript value="Beskrivelse af siden">

<INPUT TYPE=SUBMIT VALUE="Tilføj link!">
</FORM>
<?
}
?>

Hertil skal tilføjes en måde hvorpå der kan vælges en kategori til linket, f.eks. film, musik osv. Hvordan gør jeg det? Der skal vel tilføjes en række i tabellen "links" hvor navnet på kategorien skal stå?

Jeg har indtil videre fået konstrueret følgende, der opstiller samtlige links i databasen på punktform:


<?
$foresp = mysql_query("SELECT id, url, navn, descript
    FROM links ORDER BY navn DESC
    LIMIT 0, 999");

while($data = mysql_fetch_array($foresp)){

echo "<li><a href='".$data[1]."' title='".$data[3]."'>".$data[2]."</a><br>";
}
?>

Nu skal denne bare lokkes til at sortere linksne efter kategori så der står:

Musik:
- link 1
- link 2

Film:
- link 1
- link 2

osv...

Desuden har jeg et problem med at få funktionen til at åbne linket i et nyt vindue... lige gyldigt hvordan jeg vender og drejer en target="_blank" inde i linket kommer der en fejlmeddelelse...?!?

Ved godt at det er en stor mundfuld... derfor de mange point. Håber nogen kan/vil hjælpe alligevel, for jeg har sgu prøvet at rode med det i flere dage nu  :o)
Avatar billede detox Nybegynder
10. september 2003 - 21:47 #1
Så vil jeg foreslå at du laver en ny tabel med kategorier og et felt i din nuværende tabel der bare peger på et kategori_id felt. Det har flere store fordele, både når du skal hente og præsentere link'ene og når du skal generere formen til at gemme dine link's.
Avatar billede detox Nybegynder
10. september 2003 - 21:51 #2
Her er et eksempel på en form jeg selv bruger:

<table class="center">
<tr><td>
<form action="" method="post">
<table class="tableft">
<tr><td class="tabright">Link:</td><td><input name="link" type="text" size="40" /></td></tr>
<tr><td class="tabright">Navn:</td><td><input name="navn" type="text" size="25" /></td></tr>

<?
require 'connect.inc.php';
$res = mysql_query("SELECT * FROM buks_kat");
while ($row = mysql_fetch_assoc($res)) {
?>
    <tr>
      <td class="tabright">
        <?=$row['kat']?>
      </td>
      <td><input name="kat" type="radio" value="<?=$row['id']?>" /></td>
    </tr>
    <? }?>
  <tr><td></td><td><input name="send" type="submit" value="Fyr den af!" /></td></tr>
  </table>
</form>
<?
if (isset($_POST['send'])) {
    $kat = $_POST['kat'];
    $link = $_POST['link'];
    $navn = $_POST['navn'];
    mysql_query("INSERT INTO buks_links (link, navn, kat_id) VALUES ('$link', '$navn', $kat)") or die(mysql_error());
    echo "Linket er indsat i databasen!";
}
?>
</td></tr></table>
Avatar billede detox Nybegynder
10. september 2003 - 21:55 #3
Og her så hvordan du kan præsentere dine link opdelt i kategorier:

<?
$str = "";
require ('connect.inc.php');
$sql = "SELECT id, kat FROM buks_kat ORDER BY nr";
$kat_res = mysql_query($sql) or die(mysql_error());
while ($kat_row = mysql_fetch_array($kat_res)) {
    $str .= "<b style='color:#039'>$kat_row[kat]</b><br />";
    $sql = "SELECT link, navn FROM buks_links WHERE kat_id = $kat_row[id]";
    $res = mysql_query($sql) or die(mysql_error());
    while ($row = mysql_fetch_array($res)) {
        $str .= "<a href=\"".$row['link']."\">".$row['navn']."</a><br />";
    }
}
?>
<table class="right"><tr>
<td class="menutext">
<fieldset>
      <p style="color:blue;"><b>Links:</b>
      <br /><?=$str?></p>
</fieldset>
<fieldset>
    <p><a href="link.php">Tilf&oslash;j link</a><br /></p>
</fieldset>
</td></tr></table>
Avatar billede detox Nybegynder
10. september 2003 - 22:00 #4
Kategori tabellen ser sådan her ud:

CREATE TABLE buks_kat (
  id tinyint(4) NOT NULL auto_increment,
  kat varchar(20) NOT NULL default '',
  nr tinyint(4) NOT NULL default '0',
  PRIMARY KEY  (id)
) TYPE=MyISAM;

Der er et felt; 'nr' der bestemmer rækkefølgen af kategorierne uafhængig af 'id'
Avatar billede detox Nybegynder
10. september 2003 - 22:12 #5
Hvis du vil have åbnet et nyt vindue:
$str .= "<a href=\"".$row['link']."\" target=\"_blank\">".$row['navn']."</a><br />";
Avatar billede moine Nybegynder
11. september 2003 - 12:25 #6
ok... tak - jeg prøver at koge lidt videre på det. Er ikke så stiv i MySQL og php endnu, men det med at lave en ny tabel med kategorierne og pege på den...

Men... der mangler en knap på siden til at give dig pointene for svaret? Har opdateret og prøvet at logge ind og ud flere gange, men den kommer ikke frem? Bliver ved at prøve og du skal nok få pointene, når det lykkedes...
Avatar billede detox Nybegynder
11. september 2003 - 12:40 #7
Det jeg mener med at pege på kategorien er at du så laver et felt i din nuværende tabel, som indeholder id nummeret fra tabellen med kategorier.
Fx, hvis vi forestiller os at kategorien Film har id=1, kommer der til at stå 1 der. Den måde formen er bygget op på,med kategorier som radioknapper, sørger jo for at den rigtige værdi bliver indsat som 'value'. I mit eksempel mangler feltet med beskrivelse og der er nogle ekstra tabeldefinitioner, men det skulle være muligt at flette delen med radioknapperne og indsætning i databasen ind i dit script. Ellers må du spørge.
Grunden til du ikke kunne give mig point, var at jeg ikke havde lagt et svar c",)
Avatar billede detox Nybegynder
30. september 2003 - 02:32 #8
Hvordan går det så?
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
Computerworld tilbyder specialiserede kurser i database-management

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