Tutorials

Hoe maak ik een nieuwssysteem ?

Echt heel simpel

Pagina 1

Stap 1

In deze tutorial zal ik stap voor stap uitleggen hoe je een nieuwssysteem maakt.
Om een beetje mee te kunnen volgen moet je de basis van mysql kennen.
We gaan een nieuwssysteem maken waarmee we nieuwsberichten en reacties met kunnen toevoegen en we dat natuurlijk ook kunnen lezen.


Pagina 2

Stap 2

Eerst hebben we 2 tabellen nodig voor in de database toe te voegen waar al de nieuwsberichten en reacties komen.
Query code voor nieuws:

CREATE TABLE nieuws (
id int(10) auto_increment not null default '0',
datum varchar(20) not null,
bericht text not null,
emailadres varchar(60) not null,
onderwerp varchar(60) not null,
naam varchar(30) not null,
primary key(id))

Query code voor reacties:


CREATE TABLE nieuwscomments (
id int(10) auto_increment not null default '0',
nieuwsid int(10) not null,
datum varchar(20) not null,
tijd varchar(10) not null,
bericht text not null,
emailadres varchar(60) not null,
naam varchar(30) not null,
primary key(id))
Pagina 3

Stap 3

Nu moeten we een formulier maken waarmee we nieuws met kunnen toevoegen in de tabel 'nieuws'.
De uitleg volgt in de code.

nieuwstoevoegen.php
-----------------

<?php
//Eerst connecten we met de database
mysql_connect (".....",".....", "....."); //host, username, password
mysql_select_db("........."); //database

//Dit gebruiken we om de datum op te stellen in het Nederlands
$arraymaand = array("Januari","Februari","Maart","April",
"Mei","Juni", "Juli","Augustus","September","Oktober",
"November","December");
$datum = date("j") . $arraymaand[date(" n") - 1] . date(" Y");
$bericht= addslashes($bericht); //slashes toevoegen voor de ' de " en de / om parse errors te vermijden
//Als er is gedrukt op de submit knop van het formulier checken we eerst of alle velden wel zijn ingevuld...


if ($_POST['submit'])
{
if ($_POST['bericht'] == "")
$error="Je moet een bericht invullen!";
elseif ($_POST['naam'] =="")
$error="Je moet je naam invullen!";
elseif ($_POST['emailadres'] =="")
$error="Je moet je e-mailadres invullen!";
elseif ($_POST['onderwerp'] =="")
$error="Je moet een onderwerp invullen!";
if ($error)
{ //als er geen error is kunnen we een query opstellen en een record toevoegen in de database
//query opstellen
$query = "INSERT INTO nieuws (datum,bericht,emailadres,
onderwerp,naam) VALUES ('$datum','$bericht','$emailadres',
'$onderwerp','$naam')";
//query toepassen
mysql_query($query) or die (mysql_error());
echo "Het nieuws is toegevoegd!";
}
elseif (!$error)
{ //als er een error is dan laten we die zien met een knop terug naar de vorige pagina
echo "
<div align=\"center\"><table width=\"50%\" border=\"1\"
cellspacing=\"0\" cellpadding=\"2\">
<tr bordercolor=\"#000000\">
<td bordercolor=\"#000000\" bgcolor=\"#e2e2e2\" height=\"36\">
<div align=\"center\"><div align=center>$error<br>

<form method=\"post\" action=\"javascript:history.go(-1)\">
<div align=center><input type=\"submit\"
name=\"Terug\" value=\"Terug\">
</form></td></tr></table>";
}
}
else
{ //als er nog niet op de submit knop is gedrukt dan laten we het formulier zien
?>
<u>Nieuws toevoegen: </u>
<form action="" method="post">
<table width="95%" border="0" cellspacing="0" cellpadding="0">
<tr><td>
Je naam :
</td></tr><tr><td>
<input type="text" name="naam">
</td></tr><tr><td>
Je e-mailadres :
</td></tr><tr><td>
<input type="text" name="emailadres">
</td></tr><tr><td>
Het onderwerp:
</td></tr><tr> <td>
<input type="text" name="onderwerp">
</td></tr><tr><td>
Bericht:
</td></tr><tr><td>
<textarea name="bericht" cols="60" rows="20" wrap="VIRTUAL"></textarea>
<br>
</td></tr><tr><td>
<input type="submit" value="Nieuws toevoegen" name="submit">
<input type="reset" value="Wis velden" name="reset">
</td></tr></table>
</form>
<?php } ?>


Pagina 4

Stap 4

Nu kan je dus berichten toevoegen in de database maar het is de bedoeling dat we de berichten kunen zien.
Dit doen we met de functie SELECT

Nieuws.php
-----------

<?php
//Eerst connecten we met de database
mysql_connect (".....",".....", "....."); //host, username, password
mysql_select_db("........."); //database


$query = mysql_query("SELECT * FROM nieuws ORDER BY id DESC");
//Alles selecteren van de tabel nieuws gerangschikt op id van hoog naar laag vb: (100,99,95,94,...)

while ($obj = mysql_fetch_object($query))
{ //een loop maken zodat we later de resulaten kunnen laten echo-en
$nieuwsid = $obj->id;
$bericht = stripslashes($obj->bericht); //de slashes die te veel zijn verwijderen
$bericht = nl2br($bericht); //een nieuwe lijn beginnen als er in de kolom 'bericht' ook een nieuwe lijn begint

//eventueel kan je hier smileys includen, is maar een idee :) de code is dan vb: ( include ("smileys.php"); )

//nu gaan we de comments tellen en als er comments zijn maken we een link naar de comments, zo niet maken we een link naar postcomment

$rij = mysql_query("SELECT * FROM nieuwscomments WHERE nieuwsid='$nieuwsid' ");
//we selecteren de comments die het zelfde id heeft als het id van het nieuwsbericht
$comments = mysql_num_rows($rij); //we tellen het aantal resultaten op

if ($comments == 1) //als het aantal comments gelijk is aan 1 dan gebruiken we X comment en niet X comments
$commentsnaam ="<a href=\"nieuwscomments.php?nieuwsid=$nieuwsid\">$comments comment</a>";
elseif ($comments > 1) //als het aantal comments meer is dan 1 gebruiken we X comments en niet X comment
$commentsnaam ="<a href=\"nieuwscomments.php?nieuwsid=$nieuwsid\">$comments comments</a>";
if ($comments == "0") //als er geen comments zijn dan maken we een link naar een pagina waar je een comment kan posten
$commentsnaam ="<a href=\"postcomment.php?nieuwsid=$nieuwsid\">Post comment</a>";
?>
<table width="98%" border="1" cellspacing="0" cellpadding="0">
<tr>
<td height="21">
<div align="left">
<?php echo"$obj->datum"; ?>
&nbsp;Gepost door
<?php echo"$obj->naam"; ?>
</div>
</td></tr><tr>
<td valign="top" height="43">
<table width="100%" border="0" cellspacing="0" cellpadding="3" height="35">
<tr>
<td valign="top" height="19">
<div align="left">
<?php echo"$bericht"; ?>
</div>
</td></tr><tr>
<td valign="top" height="8">
<div align="right">[<?php echo"$commentsnaam"; ?>]</div>
</td></tr></table></td></tr></table>
<br>
<?php
} //de loop eindigen en herhalen tot dat hij alle records heeft geprint.
?>


Pagina 5

Stap 5

Wat we nu nog missen is de pagina waar je reacties met kan toevoegen en een pagina waar je de comments kunt lezen.
Het probleem dat sommige mensen hebben is dat ze niet weten hoe je de comments kunt laten selecteren bij het juiste nieuwsbericht.
Wel, we maken dus een kolom bij de tabel 'nieuwscomments' met de naam 'nieuwsid'
Als we dan een comments toevoegen kan je het id van het nieuwsbericht in die kolom opslagen en kan je zo het de comments selecteren bij het gepaste nieuwsbericht.
Nu gaan we verder met de pagina.


postcomment.php
-----------------

<?php
$datum = date("d/m/Y"); //de datum
$tijd = date("H:i"); //de tijd

if ($_POST['Submit'])
{ //als er op submit is gedrukt gaan we checken of alle velden wel zijn ingevuld ...
if ($_POST['$bericht'] == "")
$error = "Je moet een bericht invullen<br><br>";
elseif ($_POST['$naam'] == "")
$error = "Je moet je naam invullen<br><br>";
elseif ($_POST['$emailadres'] == "")
$error = "Je moet je e-mailadres invullen<br><br>";
if (!$error)
{ //als er geen error is
$query ="INSERT INTO nieuwscomments (naam, tijd, datum, bericht,
nieuwsid, emailadres) VALUES ('$naam', '$tijd', '$datum', '$berichtr',
'$nieuwsid', '$emailadres')";
mysql_query($query) or die (mysql_error());
header("location:nieuwscomments.php?nieuwsid=$nieuwsid");
//als je de comment hebt gepost stuur je de bezoeker terug naar het nieuwsbericht
}
else if ($error)
{ //als er een error is
echo "
<div align=\"center\"><table width=\"50%\" border=\"1\"
cellspacing=\"0\" cellpadding=\"2\">
<tr bordercolor=\"#000000\">
<td bordercolor=\"#000000\" bgcolor=\"#e2e2e2\" height=\"36\">
$error<br>
<form method=\"post\" action=\"javascript:history.go(-1)\">
<input type=\"submit\" name=\"Terug\" value=\"Terug\">
</form>
</td></tr></table></div>";
}
}
else
{
?>
<form method="post" action="">
<table width="98%" border="1" cellpadding="2" cellspacing="0">
<tr>
<td height="38">
Post een reactie:<br>
<hr noshade>
Bericht:
</td></tr>
<tr><td>
<textarea name="bericht" cols="60" rows="10"></textarea>
</td></tr>
<tr><td>
<div align="left">
<input type="submit" name="Submit" value="Post comment">
<input type="reset" name="Reset" value="Wis velden">
<input type="button" value="Terug naar nieuws"
onClick="window.location='nieuwscomments.php?nieuwsid=<?php echo"$nieuwsid"; ?>' " name="button">
</div></td></tr></table>
</form>
<?php } ?>

Pagina 6

Stap 6

Het laatste deel is de pagina waar je de reacties kunt lezen.

nieuwscomments.php
--------------------
<?php
$obj=mysql_query("SELECT * FROM nieuws where id=$nieuwsid") or die(mysql_error()); //het nieuwsbericht selecteren
while($result= mysql_fetch_object($obj))
{
$naam = $result->naam;
$datum = $result->datum;
$emailadres = $result->emailadres;
$onderwerp = stripslashes($result->onderwerp);
$bericht = stripslashes($result->bericht);
$bericht =nl2br($bericht);
}
?>
<table width="98%" border="1" cellspacing="0" cellpadding="0">
<tr>
<td height="21">
<?php
echo("$datum&nbsp;");
echo("Gepost door: <a href=\"mailto: $emailadres\">$naam</a>&nbsp;");
?>
</td>
</tr><tr>
<td valign="top" height="24">
<table width="100%" border="0" cellspacing="0" cellpadding="3" height="35">
<tr>
<td valign="top" height="12">
<?php echo"$bericht"; ?>
</td></tr></table>
</td></tr></table>
<br>
<?php
$rij=mysql_query("SELECT * FROM nieuwscomments where nieuwsid=$nieuwsid") or die(mysql_error());
//de comments selecteren die het ZELFDE ID hebben als het id van het nieuwssysteem

while($result= mysql_fetch_object($rij))
{ //een loop maken
$aantal = mysql_num_rows($rij);
$naam2 = $result->naam;
$datum2 = $result->datum;
$tijd2 = $result->tijd;
$emailadres2 = $result->emailadres;
$bericht2 = stripslashes($result->bericht);
$bericht2= nl2br($bericht2);
if ($aantal > 0)
{ //als er nieuwsberichten zijn
?>
<table width="98%" border="1" cellspacing="0" cellpadding="2">
<tr>
<td valign="top" height="43"> Gepost door :
<?php
echo("<a href=\"mailto: $emailadres2\">$naam2</a>&nbsp;");
echo("Onderwerp:$onderwerp2");
?>
<br>
Gepost op:
<?php echo("$datum2 $tijd2"); ?>
<br>
<hr noshade>
<?php echo("$bericht2"); ?>
</td>
</tr>
</table>
<br>
<?php
}
} //de loop eindigen en herhalen tot dat hij alle records heeft geprint.
?>
<input type="submit" name="Submit2" value="Terug naar nieuws" onclick="window.location='index.php'">
<input type="submit" name="Submit" value="Post een comment"
onclick="window.location='<?php echo"postcomment.php?nieuwsid=$nieuwsid"; ?>'">


Het nieuwssysteem is eindelijk af :-)
Je kan eventueel nog een admin pagina maken met delete en edit en er een loginsysteem op zetten maar dat laat ik aan jullie over.
Nog veel succes met het nieuwssysteem en laat me iets horen als je iets hebt veranderd.

Reacties

0
Nog geen reacties.