Avatar billede Slettet bruger
14. december 2010 - 18:21 Der er 30 kommentarer og
1 løsning

Kategorier

Hej igen,

Hvordan får jeg kopieret 'toplinks' funktionen, flere gange så jeg kan bruge den som kategori?

<?php
  $page_title         = "Links";
  $stylesheet        = "style";
  include($DOCUMENT_ROOT.'start.php');
 
  require($_SERVER["DOCUMENT_ROOT"].'boot.php');
  include($_SERVER["DOCUMENT_ROOT"].'functions.php');

$thisfile = $PHP_SELF;
// linkstrenge til de tre funktioner.
$linkshowtop = "<a href=\"$thisfile\">Top links</a> &nbsp; ";
$linkshowall = "<a href=\"$thisfile?show=all\">Vis alle</a> &nbsp; ";
// $linkadd = "<a href=\"$thisfile?addurl=yes\">Tilføj link</a>";

if (strtolower($show) == "all") {
  $where = "";
} else {
  $where = " having point >= 0";
}

$count = query("select sum(hits) as cnt from links");
$hitcount = $count[0]->cnt;

$result = query("select id,title,date,rating,hits,url,(hits*rating-(to_days(curdate())-to_days(date))) as point ".
                "from links$where order by point DESC");

page_start("");
echo $linkshowtop;
echo $linkshowall;
echo $linkadd;

if (!isset($addurl)) {
echo "<table width='100%' border='0'>\n";
  for ($i=0;$i<sizeof($result);$i++) {
    if ($result[$i]->point >= 0) {
      $point = $result[$i]->point;
    } else {
      $point = "-";
    }
    echo "<tr><td><p title='".$result[$i]->url."'>".
        "<a href='golink.php?id=".$result[$i]->id."'target='_blank'>".
        stripslashes($result[$i]->title)."</a><a href='".$result[$i]->url."'>".
        "</a></td>".
        "<td><img src=\"/images/links-".$result[$i]->rating.".gif\" ".
        "alt='".stars($result[$i]->rating)."'width='24' height='12'></td>".
        "<td align=\"right\">".$result[$i]->hits."</td>";
    echo "<td align=\"right\">$point</td>";

    echo "</tr>\n";
  }

echo "</table>";
} else {
?>

<form action='addlink.php' method='post' target='_blank'>
  <table width='380' border='0' align='center'>
    <tr>
      <td>Websidens navn : <br>
        <input type='text' name='title' value='' size='30' id='title'></td>
    </tr>
    <tr>
      <td>URL : <br>
        <input type='text' name='url' value='http://' size='30' id='url'></td>
    </tr>
    <tr>
      <td align='center'><br /><input type='submit' value='Tilf&oslash;j link' id='submit' name="submit"></td>
    </tr>
  </table>
</form>
<?php
}
echo "Klik i alt : $hitcount\n";
echo mysql_error();

page_end();

include($DOCUMENT_ROOT.'end.php');

?>

Hilsen Frank
Avatar billede majbom Novice
14. december 2010 - 18:40 #1
det kan godt være det bare er mig, men jeg er altså nødt til at have noget mere at vide om hvad det er du gerne vil...

hvad er toplinks?
Avatar billede zynzz Praktikant
14. december 2010 - 19:40 #2
Som splazz også skriver mere info tak..
Avatar billede Slettet bruger
14. december 2010 - 21:05 #3
Det gik nok lidt for hurtigt med at oprette den her tråd, jeg undskylder.

Toplinks er lagt ind således at jeg i DB kan sætte '1' i 'top' og så bliver alle links med den markering vist, ligeledes med 'top5'.

Jeg kan bare ikke se noget i php koden om at top og top5 bliver sorteret ud.

CREATE TABLE IF NOT EXISTS `links` (
  `id` int(11) NOT NULL auto_increment,
  `top` tinyint(2) NOT NULL default '0',
  `top5` tinyint(2) NOT NULL default '0',
  `rating` int(2) default '0',
  `hits` int(11) default '0',
  `date` date default NULL,
  `title` varchar(64) NOT NULL default '',
  `url` varchar(256) NOT NULL default '',
  UNIQUE KEY `id` (`id`),
  KEY `top` (`top`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


Jeg vil gerne have flere 'top5' muligheder, således at jeg kan omdøbe dem til forskellige kategorier.

Håber det hjalp
Avatar billede majbom Novice
14. december 2010 - 22:20 #4
du kunne tilføje et felt til ovenstående tabel, som indeholder et id.
dette id, skal så have relation til en anden tabel med kategorier, således at id'et er det samme som id'et på den kategori det nu tilhører.
Avatar billede Slettet bruger
15. december 2010 - 18:03 #5
Det er der jo allerede, i form af "top5", men mit problem er, at der er ikke noget link som sådan til Top 5, og der er ikke (såvidt jeg kan se) noget der sorterer top 5 links fra.

Jeg havde forestillet mig at ændre top 5 til f.eks. underholdning, men jeg tror at den del der sorterer "underholdning" fra, er gået tabt. Jeg har prøvet med en af de andre fra et anden kode (opskrifterne) men det virker slet ikke :(

Jeg vil gerne have f.eks. 10 felter i DB der vises hver for sig på en side af samme navn.

`kat1` tinyint(2) NOT NULL default '0',
`kat2` tinyint(2) NOT NULL default '0',
`kat3` tinyint(2) NOT NULL default '0',
`kat4` tinyint(2) NOT NULL default '0',
`kat5` tinyint(2) NOT NULL default '0',

Og ligeledes links

$linkshowtop1 = "<a href=\"$thisfile\">Kat 1</a> &nbsp; ";
$linkshowtop2 = "<a href=\"$thisfile\">Kat 2</a> &nbsp; ";
$linkshowtop3 = "<a href=\"$thisfile\">Kat 3</a> &nbsp; ";
$linkshowtop4 = "<a href=\"$thisfile\">Kat 4</a> &nbsp; ";
$linkshowtop5 = "<a href=\"$thisfile\">Kat 5</a> &nbsp; ";

Men hvordan får jeg det til at virke?
Avatar billede Slettet bruger
15. december 2010 - 18:43 #6
Hov, fandt lige den stump der henter "top5"

Det ligner at den kan includes på en hvilken som helst side.
Men kunne den ikke strikkes ind så man linker til den (og x antal andre) fra menuen sammen med Toplinks og Vis alle ??
<?php

function toplinks($cnt=5) {
// boot.php MUST be loaded.

// First get the links from table limited by cnt for count.
// MySQL must be able to perform rand().

  $toplinks = query("select title, url from links ".
                    "where top5 = 1 order by rand() limit 0,$cnt");

// Test to se if any result.

  if (sizeof($toplinks) == 0) {
// if no result, write error and return 0
    echo "No links in database or database error\n";
    echo $cnt;
    echo mysql_error();
    return 0;
  } else {
// else, if any results, write them as links and return 1
    for ($i=0;$i<sizeof($toplinks);$i++) {
      echo "<a href='".$toplinks[$i]->url."' target='_blank' title='".
          $toplinks[$i]->url."'>".stripslashes($toplinks[$i]->title)."</a><br>\n";
    }
    return 1;
  }
}

        echo "<b>Top 5</b><br />"; toplinks(5);

?>
Avatar billede Slettet bruger
15. december 2010 - 21:40 #7
I kan se siden her, hvis det kan hjælpe.

www.anakin.dk/links
Avatar billede webweaver Praktikant
19. december 2010 - 12:13 #8
Hej PFPedersen.

Skal lige forstå det helt korrekt stadig, inden vi arbejder videre med det.

Skal du have vist de højeste 10 toplinks fx?
Uafhængigt af kategori. Så det er blandet.?

Eller vil du have delt dine links op i kategorier?
Som du siger, så du har en menu med kategori 1 fx, og så vises alle (eller hvor mange man nu ønsker) i den kategori og Kategori 2, hvor kun den kategori vises og så videre ...?
Avatar billede Slettet bruger
19. december 2010 - 12:39 #9
Både ja og nej, den 'kategori' hvis man kan kalde den det, (Top 5) viser kun de links med den højeste karakter (rate*hits).

Hvis nu jeg indsætter et felt mere i DB, fe.sk. 'kat' og i det felt kan jeg så sætte værdien f.eks. 1-5. Så vil jeg gerne have et link i toppen til en side med alle links der har værdi 1, og ligeledes med 2, 3, 4, 5 osv. hvor mange jeg nu laver.

Jeg ved ikke hvad der er nemmest, om det er at oprette en tabel for sig med kategorierne, eller have et felt med 1-5 som jeg så navngiver et andet sted i koden.
Avatar billede webweaver Praktikant
19. december 2010 - 23:50 #10
Tjaa, det handler nok lidt om hvor mange kategorier du har.
Jeg ville nok bare lave det i samme tabel som de forskellige links og så tilføje et felt der som hedder kategori eller sådan noget som du også selv snakker om.

Hvis du har sådan et felt, er det bare at hente ud fra det af.

mysql_query("SELECT * FROM tabel WHERE kategori = 1 ORDER BY top5 ASC") or die(mysql_error());

Den vil hente alle ud fra kategori 1 af og sortere dem i rækkefølge ud fra top 5.

Hvis du skal hente alle kategorier ud, så er det jo også bare at hente alle rækker ud.

mysql_query("SELECT * FROM tabel ORDER BY top5 ASC") or die(mysql_error());
Avatar billede Slettet bruger
20. december 2010 - 20:51 #11
Det er nok det nemmeste.

Hvordan kæder jeg det sammen med et link i toppen?
Avatar billede webweaver Praktikant
20. december 2010 - 22:07 #12
Du laver en side hvor du vil have det på, og linker til den?

Eller misforstår jeg dit spørgsmål?
Avatar billede webweaver Praktikant
20. december 2010 - 22:08 #13
Eller du vil måske have det vist på samme side? (index.php)
Avatar billede Slettet bruger
21. december 2010 - 21:49 #14
Jeg kunne rigtig godt tænke mig alle kategorierne vist på samme side, f.eks. 3x4

Kategori 1    Kategori 2    Kategori 3    Kategori 4
- Link 1      - Link 1      - Link 1      - Link 1
- Link 2      - Link 2      - Link 2      - Link 2
- Link 3      - Link 3      - Link 3      - Link 3
- Link 4      - Link 4      - Link 4      - Link 4
- Link 5      - Link 5      - Link 5      - Link 5

Kategori 5    Kategori 6    Kategori 7    Kategori 8
- Link 1      - Link 1      - Link 1      - Link 1
- Link 2      - Link 2      - Link 2      - Link 2
- Link 3      - Link 3      - Link 3      - Link 3
- Link 4      - Link 4      - Link 4      - Link 4
- Link 5      - Link 5      - Link 5      - Link 5

Her vises de 5 links med flest klik, og når man så klikker på kategorien, så vises alle links i den kategori.
Avatar billede webweaver Praktikant
22. december 2010 - 18:20 #15
Okay på den måde. Ja der ligger lidt arbejde i det. Når du vil have det på den måde, vil jeg nok foreslå dig at du laver en tabel i databasen til dine kategorier alligevel og giver dem et id, som diverse links så også får.

Jeg bliver lige nødt til at oprette et par tabeller selv og arbejde lidt med det, for at strikke det sammen og teste det.

Jeg vender tilbage med løsningen :-)
Avatar billede webweaver Praktikant
23. december 2010 - 00:15 #16
Så fik jeg kigget på det :)

Du kan se det her,
http://www.lasse-jensen.dk/eksperten/kategori.php

Det skulle vidst være det som du efterspørger?

Det er bygget op omkring en db med links og en db med kategorierne. Links skal have det id som kategorien får, og så vil det vises i oversigten helt automatisk. Der kan også tilføjes flere kategorier og så videre, hvor systemet selv finder ud af det ... :)

Opbygning af database:

Links,
id (auto increment), kat-id, link

Kategorier,
id (auto increment), kategori

Og så vil det færdige eksempel til dit site se således ud,

<?php
  $page_title        = "Links";
  $stylesheet        = "style";
  include($DOCUMENT_ROOT.'start.php');
 
  require($_SERVER["DOCUMENT_ROOT"].'boot.php');
  include($_SERVER["DOCUMENT_ROOT"].'functions.php');

$thisfile = $PHP_SELF;
// linkstrenge til de tre funktioner.
$linkshowtop = "<a href=\"$thisfile\">Top links</a>   ";
$linkshowall = "<a href=\"$thisfile?show=all\">Vis alle</a>   ";
$linkshowkat = "<a href=\"$thisfile?show=kat\">Vis kategorier</a>   ";
// $linkadd = "<a href=\"$thisfile?addurl=yes\">Tilføj link</a>";

if (strtolower($show) == "all") {
  $where = "";
} else {
  $where = " having point >= 0";
}

$count = query("select sum(hits) as cnt from links");
$hitcount = $count[0]->cnt;

$result = query("select id,title,date,rating,hits,url,(hits*rating-(to_days(curdate())-to_days(date))) as point ".
                "from links$where order by point DESC");

page_start("");
echo $linkshowtop;
echo $linkshowall;
echo $linkshowkat;
echo $linkadd;

if ($_GET['show'] == "all" || !$_GET['show']) {
echo "<table width='100%' border='0'>\n";
  for ($i=0;$i<sizeof($result);$i++) {
    if ($result[$i]->point >= 0) {
      $point = $result[$i]->point;
    } else {
      $point = "-";
    }
    echo "<tr><td><p title='".$result[$i]->url."'>".
        "<a href='golink.php?id=".$result[$i]->id."'target='_blank'>".
        stripslashes($result[$i]->title)."</a><a href='".$result[$i]->url."'>".
        "</a></td>".
        "<td><img src=\"/images/links-".$result[$i]->rating.".gif\" ".
        "alt='".stars($result[$i]->rating)."'width='24' height='12'></td>".
        "<td align=\"right\">".$result[$i]->hits."</td>";
    echo "<td align=\"right\">$point</td>";

    echo "</tr>\n";
  }

echo "</table>";
} else if ($_GET['show'] == "kat") {

$number = 0;
               
$query = mysql_query("SELECT * FROM tabel_kategori ORDER BY kategori ASC") or die(mysql_error());
                       
while ($data = mysql_fetch_array($query)) {
                       
$id = $data['id'];
$kategori = $data['kategori'];
$number++;
                           
$query2 = mysql_query("SELECT link FROM tabel_links WHERE kat_id = '$id' ORDER BY link ASC") or die(mysql_error());
                           
$count = mysql_num_rows($query2);
                       
echo '<td style="width: 150px; vertical-align: top"><p style="text-align: center; font-weight: bold; text-decoration: underline">' . $kategori . ' (' . $count . ')</p>';
                                                   
if ($count == 0) {
                           
echo '<p style="text-align: center; font-style: italic">Ingen links tilføjet</p>';
                               
}
                           
while ($data2 = mysql_fetch_array($query2)) {
                           
$link = $data2['link'];
                           
echo '<p style="text-align: center">' . $link . '</p>';
                           
}
                           
echo '</td>';
                           
if ($number != 0) {
                           
if (($number % 4) == 0) {
                       
echo "</tr>\n\n";
echo "<tr>\n";
                               
}
                               
}
                               
}
               
mysql_close($connect);   

} else {
?>

<form action='addlink.php' method='post' target='_blank'>
  <table width='380' border='0' align='center'>
    <tr>
      <td>Websidens navn : <br>
        <input type='text' name='title' value='' size='30' id='title'></td>
    </tr>
    <tr>
      <td>URL : <br>
        <input type='text' name='url' value='http://' size='30' id='url'></td>
    </tr>
    <tr>
      <td align='center'><br /><input type='submit' value='Tilføj link' id='submit' name="submit"></td>
    </tr>
  </table>
</form>
<?php
}
echo "Klik i alt : $hitcount\n";
echo mysql_error();

page_end();

include($DOCUMENT_ROOT.'end.php');

?>


Sig endelig til, hvis du har problemer med at få det til at køre :)
Avatar billede webweaver Praktikant
23. december 2010 - 00:23 #17
Det skal lige siges, at jeg bare har taget det eksempel jeg har lavet og kopieret der herind. Dermed også "designet". Dog har jeg kun kopieret PHP'en ind til dig og derfor mangler HTML delen rundt omkring. Det vil derfor ikke virke korrekt, hvis du bare sætter det ind som det er nu.

Hvis du lige vil have HTML delen med, så skal du oppe ovenover $number = 0; indsætte;

<table style="margin: auto; width: 600px; border: 1px solid black">
           
<tr>

og nedenunder mysql_close($connect); indsætte

</tr>

</table>
Avatar billede webweaver Praktikant
23. december 2010 - 00:27 #18
Ydermere kan jeg forresten så også lige fortælle at du kan ændre 4-tallet i denne linie: if (($number % 4) == 0) { til hvilket som helst andet tal, og dermed styre hvor mange kategorier der skal vises ved siden af hinanden, før der skiftes linie.
Avatar billede Slettet bruger
23. december 2010 - 09:17 #19
Det ser fandme flot ud!! Nu husker du lige at holde en pause og smage julemaden :)

Det ser ud som om du har oprettet en tabel til kategorier, men jeg kan ikke lige se hvordan de skal se ud.

$query = mysql_query("SELECT * FROM tabel_kategori ORDER BY...
$query2 = mysql_query("SELECT link FROM tabel_links WHERE...

Er tabel_links den samme som den nuværende?
Er tabel_kategori en ny ved siden af, eller et felt i den eksisterende?
Avatar billede Slettet bruger
23. december 2010 - 09:29 #20
Jeg har links som ser således ud:

CREATE TABLE IF NOT EXISTS `links` (
  `id` int(11) NOT NULL auto_increment,
  `top` tinyint(2) NOT NULL default '0',
  `rating` int(2) default '0',
  `hits` int(11) default '0',
  `date` date default NULL,
  `title` varchar(64) NOT NULL default '',
  `kat-id` int(2) NOT NULL,
  `url` varchar(256) NOT NULL default '',
  UNIQUE KEY `id` (`id`),
  KEY `top` (`top`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=68 ;


Og så har jeg kategorier som ser således ud:

CREATE TABLE IF NOT EXISTS `links_kat` (
  `id` int(3) NOT NULL auto_increment,
  `kategori` varchar(50) NOT NULL default '',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=21 ;


Er det rigtigt?
Avatar billede Slettet bruger
23. december 2010 - 09:47 #21
Hmm.. har vist lige haft et øjeblik med ilt til hjernen, for det virker helt fint nu. Har udkommenteret

  }
}
}
//mysql_close($connect); 
echo '</tr></table>';
} else {
?>

Så virker det hele uden fejl. Så skal html lige rettes lidt til, og links tildeles deres kategorier.

Det ser virkelig flot ud.

Svar udbedes ;)
Avatar billede Slettet bruger
23. december 2010 - 09:59 #22
Hov, en lille opservation, der vises kun antal links i hver kategori, men ingen links under ?!?

Siden ser således ud nu:

<?php
  $page_title         = "Links";
  $stylesheet        = "style";
  $bg                = "index";
  $table            = "900";
  $menu                = "links";
  include($DOCUMENT_ROOT.'/php/start.php');

  require($_SERVER["DOCUMENT_ROOT"].'/php/links_boot.php');
  include($_SERVER["DOCUMENT_ROOT"].'/php/links_functions.php');

$thisfile = $PHP_SELF;
// linkstrenge til de tre funktioner.
$linkshowtop = "<a href=\"$thisfile\">Top links</a> &nbsp; ";
$linkshowall = "<a href=\"$thisfile?show=all\">Vis alle</a> &nbsp; ";
$linkshowkat = "<a href=\"$thisfile?show=kat\">Vis kategorier</a> &nbsp; ";
// $linkadd = "<a href=\"$thisfile?addurl=yes\">Tilføj link</a>";

if (strtolower($show) == "all") {
  $where = "";
} else {
  $where = " having point >= 0";
}

$count = query("select sum(hits) as cnt from links");
$hitcount = $count[0]->cnt;

$result = query("select id,title,date,rating,hits,url,(hits*rating-(to_days(curdate())-to_days(date))) as point ".
                "from links$where order by point DESC");

page_start("");
echo $linkshowtop;
echo $linkshowall;
echo $linkshowkat;
echo $linkadd;

if ($_GET['show'] == "all" || !$_GET['show']) {
echo "<table width='100%' border='0'>\n";
  for ($i=0;$i<sizeof($result);$i++) {
    if ($result[$i]->point >= 0) {
      $point = $result[$i]->point;
    } else {
      $point = "-";
    }
    echo "<tr><td><p title='".$result[$i]->url."'>".
        "<a href='golink.php?id=".$result[$i]->id."'target='_blank'>".
        stripslashes($result[$i]->title)."</a><a href='".$result[$i]->url."'>".
        "</a></td>".
        "<td><img src=\"/images/links-".$result[$i]->rating.".gif\" ".
        "alt='".stars($result[$i]->rating)."'width='24' height='12'></td>".
        "<td align=\"right\">".$result[$i]->hits."</td>";
    echo "<td align=\"right\">$point</td>";

    echo "</tr>\n";
  }

echo "</table>";
} else if ($_GET['show'] == "kat") {

echo '<table style="margin: auto; width: 600px;"><tr>';
         
$number = 0;
             
$query = mysql_query("SELECT * FROM links_kat ORDER BY kategori ASC") or die(mysql_error());
                     
while ($data = mysql_fetch_array($query)) {
                     
$id = $data['id'];
$kategori = $data['kategori'];
$number++;
                         
//$query2 = mysql_query("SELECT link FROM tabel_links WHERE kat_id = '$id' ORDER BY link ASC") or die(mysql_error());
$query2 = mysql_query("SELECT * FROM links WHERE kat_id = '$id' ORDER BY title DESC") or die(mysql_error());
                         
$count = mysql_num_rows($query2);
                     
echo '<td style="width: 150px; vertical-align: top"><p style="text-align: center; font-weight: bold; text-decoration: underline">' . $kategori . ' (' . $count . ')</p>';
                                                 
if ($count == 0) {
                         
echo 'Ingen links tilføjet';
                             
}
                         
while ($data2 = mysql_fetch_array($query2)) {
                         
$link = $data2['link'];
                         
echo '<p style="text-align: center">' . $link . '</p>';
                         
}
                         
echo '</td>';
                         
if ($number != 0) {
                         
if (($number % 4) == 0) {
                     
echo "</tr>\n\n";
echo "<tr>\n";
                             
}
                             
}
                             
}
             
//mysql_close($connect); 
echo '</tr></table>';
} else {
?>

<form action='addlink.php' method='post' target='_blank'>
  <table width='380' border='0' align='center'>
    <tr>
      <td>Websidens navn : <br>
        <input type='text' name='title' value='' size='30' id='title'></td>
    </tr>
    <tr>
      <td>URL : <br>
        <input type='text' name='url' value='http://' size='30' id='url'></td>
    </tr>
    <tr>
      <td align='center'><br /><input type='submit' value='Tilføj link' id='submit' name="submit"></td>
    </tr>
  </table>
</form>
<?php
}
echo "Klik i alt : $hitcount\n";
echo mysql_error();

page_end();

include($DOCUMENT_ROOT.'/php/end.php');

?>
Avatar billede Slettet bruger
23. december 2010 - 12:38 #23
Nu har jeg fået den til at vise links i hver kategori, men uden at de er aktive links. Jeg har en idé om at

  $link = $data2['title'];

skal skrives om til noget i stil med
                         
echo "<a href='".$link[$i]->url."' target='_blank' title='".
      $link[$i]->url."'>".stripslashes($link[$i]->title)."</a><br />\n";

Men når jeg gør det, så forsvinder alle links fra kategorien igen.

Og så er jeg i tvivl om hvor jeg skal indsætte "limit 5" så den kun viser de 5 links med flest point/hits
Avatar billede webweaver Praktikant
23. december 2010 - 14:01 #24
Goddag PFPedersen.

Du har vidst fået skrevet nogle indlæg kan jeg se ...
Første og fremmest, tak :-)

Lad os tage den fra starten af,

#19

Det er korrekt at der skal bruges 2 tabeller til dette system. Det er nemmest på den måde at hente kategorierne ud nemlig. "tabel_kategori" er tabellen med kategorierne i. Den kan selvfølgelig også hedde andet, så skal du bare huske at opdatere navnene i PHP'en. Denne tabel skal indeholde 2 felter.

1: id, INT, auto_increment, primær
2: kategori, text


Den anden tabel "tabel_links" er den tabel, hvor selve links'ne bliver gemt i. Den består af 3 felter (måske flere, hvis du selv har nogle ting du vil have med til linket), men altså 3 felter for at systemet kan køre.

1: id, INT, auto_increment, primær
2: kat_id, INT
3: link, text


Hvis en kategori har et id på 4, så skal de links som skal vises i "kategori 4" have kat_id sat til 4.

#23

Jeg vil lige starte med at sige, at jeg lavede en lille taste fejl tidligere i tråden. Jeg fik vidst skrevet at feltet i databasen skulle hedder kat-id, men i PHP'en søger den efter et felt som hedder kat_id med underscore. Så vær opmærksom på det, ellers viser den ingen links umiddelbart. Det ser dog ud til at du opdagede den lille fejl :)

Det er rigtigt at den ikke viser links, men bare tekst. Der var ingen grund til at jeg skulle sidde og taste adresser ind på test systemet. Tekst var nemmere og det skulle være lige vidt om det er det ene eller det andet.

Hvordan ser dit link felt ud i databasen? http://www.hjemmeside.dk fx?

Din linie er umiddelbart fejlfri, men hvor du har $i fra f. eks?
Og har du brug for at skrive alt det, hvis du har stien stående i databasen samt en titel?


For at få vist de 5 links som er mest benyttede, skal følgende gøres;

$query2 = mysql_query("SELECT * FROM links WHERE kat_id = '$id' ORDER BY title DESC") or die(mysql_error());

rettes til

$query2 = mysql_query("SELECT * FROM links WHERE kat_id = '$id' ORDER BY top5 DESC LIMIT 5") or die(mysql_error());


I øvrigt kan jeg se, at du har det stående 2 gange. Den originale og din egen. Det er der ingen grund til.

//$query2 = mysql_query("SELECT link FROM tabel_links WHERE kat_id = '$id' ORDER BY link ASC") or die(mysql_error());
$query2 = mysql_query("SELECT * FROM links WHERE kat_id = '$id' ORDER BY title DESC") or die(mysql_error());

Der sletter du bare den øverste og retter den nederste.
Avatar billede Slettet bruger
23. december 2010 - 14:35 #25
Hej Lasse,

Jeg har siddet og studeret det nøje, og har også fået rettet et par småfejl her og der, har også fået tilføjet nogen der lige skulle skrives anderledes (det skete da jeg fjernede alle <p> tags, så forsvandt de fleste linjeskift ;)


Link feltet hedder url

$ tegnet har jeg fundet i den originale tekst, men jeg kunne slet ikke få alle de ' og " til at passe sammen. Jeg formoder også at de er skrevet på hver deres måde. Nogen bruger udelukkende ' mens andre bruger \" og når det så er blandet sammen, som det var til at begynde med, så er det sg ikk nemt.

Jeg har tilføjet Limit 5 og det ser godt ud. Nu skal jeg så bare ha aktiveret de her links :)

Adressen til systemet er www.anakin.dk/links

P.S. Tilføj link delen virker ikke, den viser bare oversigten, og jeg ved ikke om det er fra starten eller her til sidst i mine ændringer at det er gået galt.

Koden ser p.t. således ud:

<?php
  $page_title         = "Links";
  $stylesheet        = "style";
  $bg                = "index";
  $table            = "900";
  $menu                = "links";
  include($DOCUMENT_ROOT.'/php/start.php');

  require($_SERVER["DOCUMENT_ROOT"].'/php/links_boot.php');
  include($_SERVER["DOCUMENT_ROOT"].'/php/links_functions.php');

$thisfile = $PHP_SELF;
// linkstrenge til de tre funktioner.
$linkshowtop = "<a href=\"$thisfile\">Top links</a> &nbsp; ";
$linkshowall = "<a href=\"$thisfile?show=all\">Vis alle</a> &nbsp; ";
$linkshowkat = "<a href=\"$thisfile?show=kat\">Vis kategorier</a> &nbsp; ";
$linkadd = "<a href=\"$thisfile?addurl=yes\">Tilføj link</a>";

if (strtolower($show) == "all") {
  $where = "";
} else {
  $where = " having point >= 0";
}

$count = query("select sum(hits) as cnt from links");
$hitcount = $count[0]->cnt;

$result = query("select id,title,date,rating,hits,url,(hits*rating-(to_days(curdate())-to_days(date))) as point ".
                "from links$where order by point DESC");

page_start("");
echo $linkshowtop;
echo $linkshowall;
echo $linkshowkat;
echo $linkadd;

if ($_GET['show'] == "all" || !$_GET['show']) {
echo "<table width='100%' border='0'>\n";
  for ($i=0;$i<sizeof($result);$i++) {
    if ($result[$i]->point >= 0) {
      $point = $result[$i]->point;
    } else {
      $point = "-";
    }
    echo "<tr><td><p title='".$result[$i]->url."'>".
        "<a href='golink.php?id=".$result[$i]->id."'target='_blank'>".
        stripslashes($result[$i]->title)."</a><a href='".$result[$i]->url."'>".
        "</a></td>".
        "<td><img src=\"/images/links/".$result[$i]->rating.".gif\" ".
        "alt='".stars($result[$i]->rating)."'width='33' height='9'></td>".
        "<td align=\"right\">".$result[$i]->hits."</td>";
    echo "<td align=\"right\">$point</td>";

    echo "</tr>\n";
  }

echo "</table>";
} else if ($_GET['show'] == "kat") {

echo '<table style="margin: auto; width: 100%;"><tr>';
         
$number = 0;
             
$query = mysql_query("SELECT * FROM links_kat ORDER BY kategori ASC") or die(mysql_error());
while ($data = mysql_fetch_array($query)) {
                     
$id = $data['id'];
$kategori = $data['kategori'];
$number++;
                         
//$query2 = mysql_query("SELECT link FROM tabel_links WHERE kat_id = '$id' ORDER BY link ASC") or die(mysql_error());
$query2 = mysql_query("SELECT * FROM links WHERE kat_id = '$id' ORDER BY hits DESC LIMIT 5") or die(mysql_error());

$count = mysql_num_rows($query2);
                     
echo '<td style="width: 25%; vertical-align: top"><strong>' . $kategori . ' (' . $count . ')</strong><br />';
                                                 
if ($count == 0) {
                         
echo '';
                             
}
                         
while ($data2 = mysql_fetch_array($query2)) {
                         
//$link = $data2['title'];
  $link = $data2['title'];
                         
echo ' &nbsp; &#8226; ' . $link . '<br />';

/*
      echo "<a href='".$link[$i]->url."' target='_blank' title='".
          $link[$i]->url."'>".stripslashes($link[$i]->title)."</a><br />\n";

*/


}
                         
echo '</td>';
                         
if ($number != 0) {
                         
if (($number % 4) == 0) {
                     
echo "</tr>\n\n";
echo "<tr>\n";
                             
}
                             
}
                             
}
             
//mysql_close($connect); 
echo '</tr></table>';
} else {
?>

<form action='addlink.php' method='post' target='_blank'>
  <table width='380' border='0' align='center'>
    <tr>
      <td>Websidens navn : <br /><input type='text' name='title' value='' size='30' id='title'></td>
    </tr>
    <tr>
      <td>URL : <br /><input type='text' name='url' value='http://' size='30' id='url'></td>
    </tr>
    <tr>
      <td>Kategori:<br />
        <select name="kategori" value="kategori" id="title">
          <option>1 - her mangler lidt tekst</option>
          <option>2</option>
          <option>3</option>
          <option>4</option>
          <option>5</option>
          <option>6</option>
          <option>7</option>
          <option>8</option>
          <option>9</option>
          <option>10</option>
          <option>11</option>
          <option>12</option>
          <option>13</option>
          <option>14</option>
          <option>15</option>
          <option>16</option>
          <option>17</option>
          <option>18</option>
          <option>19</option>
          <option>20</option>
        </select>
      </td>
    </tr>
    <tr>
      <td>Karakter:<br />
        <select name="rating" value="rating" id="title">
          <option>1</option>
          <option>2</option>
          <option>3</option>
          <option>4</option>
          <option>5 Middel</option>
          <option>6</option>
          <option>7</option>
          <option>8</option>
          <option>9</option>
          <option>10 Bedst</option>
        </select>
      </td>
    </tr>
    <tr>
      <td align='center'><br /><input type='submit' name="submit" value='Tilføj link' id='submit'></td>
    </tr>
  </table>
</form>
<?php
}
echo "Klik i alt : $hitcount\n";
echo mysql_error();

page_end();

include($DOCUMENT_ROOT.'/php/end.php');

?>
Avatar billede webweaver Praktikant
23. december 2010 - 16:25 #26
Hej Frank.

Jeg så godt det med tilføj ny url ikke fungerede. Jeg har rettet til i din kode, så det skulle fungere med links og med tilføjning af url, samt oprydning i koden, så du ikke har ting stående gentaget.


<?php
  $page_title        = "Links";
  $stylesheet        = "style";
  $bg                = "index";
  $table            = "900";
  $menu                = "links";
  include($DOCUMENT_ROOT.'/php/start.php');

  require($_SERVER["DOCUMENT_ROOT"].'/php/links_boot.php');
  include($_SERVER["DOCUMENT_ROOT"].'/php/links_functions.php');

$thisfile = $PHP_SELF;
// linkstrenge til de tre funktioner.
$linkshowtop = "<a href=\"$thisfile\">Top links</a>   ";
$linkshowall = "<a href=\"$thisfile?show=all\">Vis alle</a>   ";
$linkshowkat = "<a href=\"$thisfile?show=kat\">Vis kategorier</a>   ";
$linkadd = "<a href=\"$thisfile?addurl=yes\">Tilføj link</a>";

if (strtolower($show) == "all") {
  $where = "";
} else {
  $where = " having point >= 0";
}

$count = query("select sum(hits) as cnt from links");
$hitcount = $count[0]->cnt;

$result = query("select id,title,date,rating,hits,url,(hits*rating-(to_days(curdate())-to_days(date))) as point ".
                "from links$where order by point DESC");

page_start("");
echo $linkshowtop;
echo $linkshowall;
echo $linkshowkat;
echo $linkadd;

if ($_GET['addurl'] != "yes" && $_GET['show'] == "all" || !$_GET['show']) {
echo "<table width='100%' border='0'>\n";
  for ($i=0;$i<sizeof($result);$i++) {
    if ($result[$i]->point >= 0) {
      $point = $result[$i]->point;
    } else {
      $point = "-";
    }
    echo "<tr><td><p title='".$result[$i]->url."'>".
        "<a href='golink.php?id=".$result[$i]->id."'target='_blank'>".
        stripslashes($result[$i]->title)."</a><a href='".$result[$i]->url."'>".
        "</a></td>".
        "<td><img src=\"/images/links/".$result[$i]->rating.".gif\" ".
        "alt='".stars($result[$i]->rating)."'width='33' height='9'></td>".
        "<td align=\"right\">".$result[$i]->hits."</td>";
    echo "<td align=\"right\">$point</td>";

    echo "</tr>\n";
  }

echo "</table>";
} else if ($_GET['show'] == "kat") {

echo '<table style="margin: auto; width: 100%;"><tr>';
         
$number = 0;
             
$query = mysql_query("SELECT * FROM links_kat ORDER BY kategori ASC") or die(mysql_error());
while ($data = mysql_fetch_array($query)) {
                     
$id = $data['id'];
$kategori = $data['kategori'];
$number++;
                         
$query2 = mysql_query("SELECT id, title, url FROM links WHERE kat_id = '$id' ORDER BY hits DESC LIMIT 5") or die(mysql_error());

$count = mysql_num_rows($query2);
                 
echo '<td style="width: 25%; vertical-align: top"><strong>' . $kategori . ' (' . $count . ')</strong><br />';
                                                                while ($data2 = mysql_fetch_array($query2)) {
                         
  $title = $data2['title'];
  $url = $data2['url'];
                         
  echo '<a href="' . $url . '" target="_blank" title="' . $url . '">' . stripslashes($title) . '</a><br />\n';

}
                         
echo '</td>';
                         
if ($number != 0) {
                         
if (($number % 4) == 0) {
                     
echo "</tr>\n\n";
echo "<tr>\n";
                             
}
                             
}
                             
}
             
echo '</tr></table>';
} else {
?>

<form action='addlink.php' method='post' target='_blank'>
  <table width='380' border='0' align='center'>
    <tr>
      <td>Websidens navn : <br /><input type='text' name='title' value='' size='30' id='title'></td>
    </tr>
    <tr>
      <td>URL : <br /><input type='text' name='url' value='http://' size='30' id='url'></td>
    </tr>
    <tr>
      <td>Kategori:<br />
        <select name="kategori" value="kategori" id="title">
          <option>1 - her mangler lidt tekst</option>
          <option>2</option>
          <option>3</option>
          <option>4</option>
          <option>5</option>
          <option>6</option>
          <option>7</option>
          <option>8</option>
          <option>9</option>
          <option>10</option>
          <option>11</option>
          <option>12</option>
          <option>13</option>
          <option>14</option>
          <option>15</option>
          <option>16</option>
          <option>17</option>
          <option>18</option>
          <option>19</option>
          <option>20</option>
        </select>
      </td>
    </tr>
    <tr>
      <td>Karakter:<br />
        <select name="rating" value="rating" id="title">
          <option>1</option>
          <option>2</option>
          <option>3</option>
          <option>4</option>
          <option>5 Middel</option>
          <option>6</option>
          <option>7</option>
          <option>8</option>
          <option>9</option>
          <option>10 Bedst</option>
        </select>
      </td>
    </tr>
    <tr>
      <td align='center'><br /><input type='submit' name="submit" value='Tilføj link' id='submit'></td>
    </tr>
  </table>
</form>
<?php
}
echo "Klik i alt : $hitcount\n";
echo mysql_error();

page_end();

include($DOCUMENT_ROOT.'/php/end.php');

?>


Hvordan kører det nu?
Avatar billede Slettet bruger
23. december 2010 - 17:12 #27
Det ser meget bedre ud, men Tilføj link virker stadig ikke :(
Avatar billede webweaver Praktikant
23. december 2010 - 20:38 #28
Okay, for at gøre det mere logisk og for at få det til at virke korrekt, flytter vi lige rundt på if sætningerne.

<?php
  $page_title        = "Links";
  $stylesheet        = "style";
  $bg                = "index";
  $table            = "900";
  $menu                = "links";
  include($DOCUMENT_ROOT.'/php/start.php');

  require($_SERVER["DOCUMENT_ROOT"].'/php/links_boot.php');
  include($_SERVER["DOCUMENT_ROOT"].'/php/links_functions.php');

$thisfile = $PHP_SELF;
// linkstrenge til de tre funktioner.
$linkshowtop = "<a href=\"$thisfile\">Top links</a>  ";
$linkshowall = "<a href=\"$thisfile?show=all\">Vis alle</a>  ";
$linkshowkat = "<a href=\"$thisfile?show=kat\">Vis kategorier</a>  ";
$linkadd = "<a href=\"$thisfile?show=add\">Tilføj link</a>";

if (strtolower($show) == "all") {
  $where = "";
} else {
  $where = " having point >= 0";
}

$count = query("select sum(hits) as cnt from links");
$hitcount = $count[0]->cnt;

$result = query("select id,title,date,rating,hits,url,(hits*rating-(to_days(curdate())-to_days(date))) as point ".
                "from links$where order by point DESC");

page_start("");
echo $linkshowtop;
echo $linkshowall;
echo $linkshowkat;
echo $linkadd;

if ($_GET['show'] == "add") {

?>

<form action='addlink.php' method='post' target='_blank'>
  <table width='380' border='0' align='center'>
    <tr>
      <td>Websidens navn : <br /><input type='text' name='title' value='' size='30' id='title'></td>
    </tr>
    <tr>
      <td>URL : <br /><input type='text' name='url' value='http://' size='30' id='url'></td>
    </tr>
    <tr>
      <td>Kategori:<br />
        <select name="kategori" value="kategori" id="title">
          <option>1 - her mangler lidt tekst</option>
          <option>2</option>
          <option>3</option>
          <option>4</option>
          <option>5</option>
          <option>6</option>
          <option>7</option>
          <option>8</option>
          <option>9</option>
          <option>10</option>
          <option>11</option>
          <option>12</option>
          <option>13</option>
          <option>14</option>
          <option>15</option>
          <option>16</option>
          <option>17</option>
          <option>18</option>
          <option>19</option>
          <option>20</option>
        </select>
      </td>
    </tr>
    <tr>
      <td>Karakter:<br />
        <select name="rating" value="rating" id="title">
          <option>1</option>
          <option>2</option>
          <option>3</option>
          <option>4</option>
          <option>5 Middel</option>
          <option>6</option>
          <option>7</option>
          <option>8</option>
          <option>9</option>
          <option>10 Bedst</option>
        </select>
      </td>
    </tr>
    <tr>
      <td align='center'><br /><input type='submit' name="submit" value='Tilføj link' id='submit'></td>
    </tr>
  </table>
</form>
<?php

} else if ($_GET['show'] == "kat") {

echo '<table style="margin: auto; width: 100%;"><tr>';
         
$number = 0;
             
$query = mysql_query("SELECT * FROM links_kat ORDER BY kategori ASC") or die(mysql_error());
while ($data = mysql_fetch_array($query)) {
                     
$id = $data['id'];
$kategori = $data['kategori'];
$number++;
                         
$query2 = mysql_query("SELECT id, title, url FROM links WHERE kat_id = '$id' ORDER BY hits DESC LIMIT 5") or die(mysql_error());

$count = mysql_num_rows($query2);
                 
echo '<td style="width: 25%; vertical-align: top"><strong>' . $kategori . ' (' . $count . ')</strong><br />';
                                                                while ($data2 = mysql_fetch_array($query2)) {
                         
  $title = $data2['title'];
  $url = $data2['url'];
                         
  echo '<a href="' . $url . '" target="_blank" title="' . $url . '">' . stripslashes($title) . '</a><br />\n';

}
                         
echo '</td>';
                         
if ($number != 0) {
                         
if (($number % 4) == 0) {
                     
echo "</tr>\n\n";
echo "<tr>\n";
                             
}
                             
}
                             
}
             
echo '</tr></table>';
} else {

echo "<table width='100%' border='0'>\n";
  for ($i=0;$i<sizeof($result);$i++) {
    if ($result[$i]->point >= 0) {
      $point = $result[$i]->point;
    } else {
      $point = "-";
    }
    echo "<tr><td><p title='".$result[$i]->url."'>".
        "<a href='golink.php?id=".$result[$i]->id."'target='_blank'>".
        stripslashes($result[$i]->title)."</a><a href='".$result[$i]->url."'>".
        "</a></td>".
        "<td><img src=\"/images/links/".$result[$i]->rating.".gif\" ".
        "alt='".stars($result[$i]->rating)."'width='33' height='9'></td>".
        "<td align=\"right\">".$result[$i]->hits."</td>";
    echo "<td align=\"right\">$point</td>";

    echo "</tr>\n";
  }

echo "</table>";

}
echo "Klik i alt : $hitcount\n";
echo mysql_error();

page_end();

include($DOCUMENT_ROOT.'/php/end.php');

?>


Nu burde det dælme virke. Og det burde ikke have ændret noget udseendes-mæssigt på din side.
Avatar billede Slettet bruger
23. december 2010 - 20:54 #29
Jeg har pillet hele tilføj formularen ud af scriptet, så den kører på sin egen side, jeg er jo ikke interesseret i alle andres gode ideer til hvilke links jeg skal have vist i oversigten.

Tak for hjælpen.
Avatar billede webweaver Praktikant
23. december 2010 - 21:15 #30
Okay fint nok. Det kan du også bare gøre. Husk at tilpasse if sætningen så :)

Men selvom du har den liggende på en anden side, bør du nok finde på noget sikkerhed, ellers vil spambots og andre finde frem til siden alligevel og udfylde formen og tilføje links som det passer dem. Et felt med password kunne fx gøre det, meget simpelt.

Og det var da så lidt :) Og så smider jeg et svar :-)
Avatar billede Slettet bruger
23. december 2010 - 22:57 #31
Det jeg aller helst ville have, var et login system der krævede login for at udfylde formularen.

Men som skrevet i en anden tråd, har jeg ikke haft det store held med at få det til at virke.
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