Met PHP nieuws + reacties uit de database halen

We hebben nu dus twee tabellen, die we met elkaar kunnen linken.. Hoop dat ik het duidelijk heb uitgelegd.. Anders plaats je maar een reactie op deze tutorial.. Eerst maken we overzicht.php (lees de comment tags goed!)

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<?
    //-- maak eerst de connectie met de database!
    $user = "je_database_username";
    $pass = "je_database_paswoord";
    $host = "localhost";
    $dbdb = "je_database_naam";
    
    if (!mysql_select_db($dbdb, mysql_connect($host, $user, $pass)))
    {

        echo "Kan geen verbinding maken met de database.";
        exit();
    }

    
    unset($user);
    unset($pass);
    unset($host);
    unset($dbdb);

    //-- haal de nieuws berichten uit de database
    $sql = "SELECT id,titel,datum FROM nieuws ORDER BY id DESC";
    //-- via de functie mysql_query() kun je de SQL code
    //-- die in $sql staat uitvoeren.

    $res = mysql_query($sql);

    echo "<b>nieuws overzicht</b><p>";
    
    //-- kijk via de functie mysql_num_rows() hoeveel
    //-- rijen er zijn. Deze moet groter of gelijk zijn
    //-- aan 1. Is dit dat niet, dan zijn er dus geen
    //-- rijen in de tabel nieuws, en dus ook geen
    //-- nieuwsberichten.

    if (mysql_num_rows($res) >= 1)
    {

        //-- met de functie mysql_fetch_array()
        //-- zet je alle resultaten in een array
        //-- en kun je deze aanroepen (in dit geval)
        //-- via de variabele $row. Voorbeeld: $row[id]
        //-- , $row[datum] en $row[titel] in dit geval omdat
        //-- alleen de kolommen id, titel en datum uit
        //-- de database worden geselecteerd (zoals
        //-- je boven kunt zien in de SQL code).
        
        //-- loop door de resultaten

        while ($row = mysql_fetch_array($res))
        {

            //-- maakt linkje naar nieuws.php?id=<nummer>
        
            //-- pak alleen de eerste 10 karakters van $row['datum']
            //-- zodat alleen de datum en niet ook de tijd wordt
            //-- getoond.

            $row['datum'] = substr($row['datum'], 0, 10);
            
            echo $row['datum'] . " <a href=\"nieuws.php?id=" . $row['id'] . "\">" . htmlentities($row['titel']) . "</a><br>";
        }
    }

    //-- laat dit dus zien als er geen nieuwsberichten
    //-- zijn.

    else
    {
        echo "Er zijn geen nieuwsberichten.";
    }

?>



Hiermee haal je dus alle nieuwsberichten uit de database. Het maakt van elke nieuws rij een linkje naar nieuws.php?id=<nummer>. Het id van een nieuwsbericht wordt dus meegestuurd aan nieuws.php. Zo kunnen we de juiste SQL code maken waarmee we alleen dat nieuws bericht uit de database selecteren. Ook kunnen we zo alleen de reacties uit de database halen die voor dat specifieke nieuwsbericht zijn bedoelt. Nu dus nieuws.php:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
<?
    //-- maak eerst de connectie met de database!
    $user = "je_database_username";
    $pass = "je_database_paswoord";
    $host = "localhost";
    $dbdb = "je_database_naam";
    
    if (!mysql_select_db($dbdb, mysql_connect($host, $user, $pass)))
    {

        echo "Kan geen verbinding maken met de database.";
        exit();
    }

    
    unset($user);
    unset($pass);
    unset($host);
    unset($dbdb);
    
    //-- linkje terug naar het nieuws overzicht
    echo "<a href=\"overzicht.php\">nieuws overzicht</a><p>";

    //-- haal het specifieke nieuwsbericht uit de database
    //-- $HTTP_GET_VARS[id] is het id adres die wordt meegegeven in de link.

    $sql = "SELECT id,titel,bericht,datum FROM nieuws WHERE id = $HTTP_GET_VARS[id]";
    //-- via de functie mysql_query() kun je de SQL code
    //-- die in $sql staat uitvoeren.

    $res = mysql_query($sql);
    //-- via de functie mysql_fetch_array() zet je
    //-- alle velden die je zojusit geselecteerd hebt
    //-- van het specifieke nieuwsbericht in een array.
    //-- je kunt ze dus aanroepen via $row[kolom_naam].

    $row = mysql_fetch_array($res);
    
    //-- zet enters om in <br>'s voor een juiste weergave
    $row['bericht'] = nl2br(htmlentities($row['bericht']));
    
    echo "<b>" . $row['titel'] . "</b> op " . $row['datum'] . "<p>";
    
    echo $row['bericht'];
    
    //-- dan nu de reacties
    echo "------------------<br>";
    echo "<b>Reacties:<br></b>";
    echo "------------------<p>";
    
    //-- haal alle reacties waarvan tid $HTTP_GET_VARS[id] is
    //-- (deze variabele bestaat nog steeds natuurlijk want die
    //-- is dus meegegeven in de link van overzicht.php

    $sql = "SELECT naam,bericht FROM reacties WHERE tid = " . $_GET['id'];
    //-- je weet wat er nu gebeurd met deze functie
    $res = mysql_query($sql);
    
    //-- je weet nu wat er gechecked wordt
    if (mysql_num_rows($res) >= 1)
    {

        //-- je weet ook wat hier gebeurt
        while ($row = mysql_fetch_array($res))
        {

            echo "<b>" . $row['naam'] . "</b><br>";
            
            //-- sommige mensen vinden het leuk om
            //-- bijvoorbeeld via reacties je layout
            //-- te verknoeien. Dit kun je voorkomen
            //-- met de functie htmlentities(). Deze
            //-- zet namelijk alle HTML codes om in
            //-- karakter entities. Dit houdt in dat
            //-- van een < %lt; wordt gemaakt. Nu is
            //-- het dus onmogelijk om de pagina te
            //-- verknoeien via HTML tags..

            $row['bericht'] = htmlentities($row['bericht']);
            
            //-- deze moet na de htmlentities() aange-
            //-- roepen worden. Dit omdat anders deze
            //-- functie weinig zin heeft. Hij zet dan
            //-- immers de <br>'s in <br> om :)

            $row['bericht'] = nl2br($row['bericht']);
            
            echo $row['bericht'] . "<p>";
        }
    }

    else
    {
        //-- geen reacties
        echo "Er zijn nog geen reacties.";
    }

    
    //-- linkje terug naar het nieuws overzicht
    echo "<p><a href=\"overzicht.php\">nieuws overzicht</a></p>";
?>


Nu hebben we dus twee tabellen, een overzicht van nieuws berichten, en een overzicht van het specifieke nieuwsbericht met daarop reacties gemaakt. Nogmaals, voor meer SQL commando's tjek: http://www.phphulp.nl/php/tutorials/index.php?cat=3&id=2 !

« Lees de omschrijving en reacties

Inhoudsopgave

  1. Wat is een database tabel?
  2. Waarmee maak ik een database tabel?
  3. Welke SQL codes gebruik ik voor een tabel?
  4. Het maken van de tweede tabel, reacties
  5. Met PHP nieuws + reacties uit de database halen
  6. Tot slot, rijen invoegen

PHP tutorial opties

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.