html link weergeven als link!!!

Status
Niet open voor verdere reacties.

leonb91

Gebruiker
Lid geworden
29 jul 2008
Berichten
23
Ik weet dat het kan, maar weet niet hoe het kan in mijn situatie.
Ik wil een gewone href in mijn gastenboek weergevne, maar hij geeft weer als text.
zo krijg ik het dus te zien
HTML:
..(klik <a href="http://leonb.x10hosting.com/contact/contact.php">hier</a> of ...
Ik krijg geen foutmeldingen
Hoe kan ik deze ook als echte link krijgen?

PS.: graag geen opmerkingen van zoek zelf uit of heb geeen zien om code door de spitten.

Dit is mijn pagina die invoegt:

PHP:
<?php
include("../opmaak/doctypelinkstijl.php")
?>
<TITLE>De website van Leon Bulters - Gastenboek</TITLE>
</head>
<body>
<?php
include("../opmaak/header.php")
?>
<div id="main">
<?php
include("connect.php");
if (!isset($_POST['submit']))
{
?>
<form method="post" action="">
<table border="0">
<tr>
<td>
Voornaam:
</td>
<td>
<input type="text" name="naam" maxlength="30">
</td>
</tr>
<tr>
<td>
Achternaam:
</td>
<td>
<input type="text" name="achternaam" maxlength="40">
</td>
</tr>
<tr>
<td>
E-mailadres:
</td>
<td>
<input type="text" name="mail" maxlength="256"> Het adres word niet weergegeven!
</td>
</tr>
<tr>
<td>
Bericht:
</td>
<td>
<textarea name="bericht" cols="65" rows="15"></textarea>
</td>
</tr>
<tr>
<td>
</td>
<td>
<br ><input type="submit" value="Bericht plaatsen" name="submit">
</td>
</tr>            
</table>

<?php
}
else{ 
$naam = $_POST['naam'];    
$achternaam = $_POST['achternaam'];
$mail = $_POST['mail'];
$bericht = $_POST['bericht'];  
if (!$naam) {
echo "FOUTMELDING:<br>";
echo "Je hebt geen voornaam ingevuld, maar die is wel verplicht.<br>";
echo "<input type='submit' value='Terug' onclick='history.back(1)'>";
}
if(strlen($naam) > 30) { //Als de lengte van $naam > 30 is, ....
echo "FOUTMELDING:<br>";
echo "Je voornaam mag maar 30 tekens lang zijn.<br>";
echo "<input type='submit' value='Terug' onclick='history.back(1)'>";
}

if (!$achternaam) {
echo "FOUTMELDING:<br>";
echo "Je hebt geen achternaam ingevuld, maar die is wel verplicht.<br>";
echo "<input type='submit' value='Terug' onclick='history.back(1)'>";
}
if(strlen($achternaam) > 40) { //Als de lengte van $achternaam > 40 is, ....
echo "FOUTMELDING:<br>";
echo "Je achternaam mag maar 40 tekens lang zijn.<br>";
echo "<input type='submit' value='Terug' onclick='history.back(1)'>";
}
if (!$mail) {
echo "FOUTMELDING:<br>";
echo "Je hebt geen e-mailadres ingevuld, maar die is wel verplicht.<br>";
echo "<input type='submit' value='Terug' onclick='history.back(1)'>";
}
if(strlen($mail) > 256) { //Als de lengte van $mail > 256 is, ....
echo "FOUTMELDING:<br>";
echo "Jou emailadres is waarschijnlijk niet geldig omdat hij te lang is, voor een kortere in<br>";
echo "<input type='submit' value='Terug' onclick='history.back(1)'>";
}
if (!$bericht){
echo "FOUTMELDING:<br>";
echo "Je hebt geen bericht ingevuld, en waar gaat het hier nou juist om? Precies!... <br>";
echo "<input type='submit' value='Terug' onclick='history.back(1)'>";
}

$naam = str_replace("'", "`", $naam); //zo kan de functie uitgevoerd worden, anders kan hij in de war raken door '
$naam = htmlspecialchars($naam);
$tijd = date("H:i", strtotime('+6 hours'));
$datum = date("d-m-y");
$bericht = str_replace("'", "`", $bericht); 
$bericht = htmlspecialchars($bericht);
$sql = "INSERT INTO gastenboek (id, naam, achternaam, mail, tijd, datum, bericht)
VALUES ('', '$naam', '$achternaam', '$mail', '$tijd', '$datum', '$bericht')";
mysql_query($sql) or(mysql_error());
?>
U bericht is gepost, <a href="gastenboek.php">klik hier om terug te gaan naar de berichten</a>
<?php
}
?>
</div>
<?php
include("../opmaak/footer.php")
?>
 
Aan de code die je nu geeft hebben we niets aangezien je hier alleen maar de boel invoegt.

We hebben meer aan de code voor het weergeven van je gastenboek.
 
Aan de code die je nu geeft hebben we niets aangezien je hier alleen maar de boel invoegt.

We hebben meer aan de code voor het weergeven van je gastenboek.

sorry, dacht dat daar een fout zat, maaar dit is de code voor het weergeven:

PHP:
$sql = "SELECT * FROM gastenboek";
$uitvoer = mysql_query($sql);
$aantal = mysql_num_rows($uitvoer)
or (mysql_error());
$perpage = 10;
$page_count = ceil($aantal/$perpage);

$page = (isset($_GET['page'])) ? $_GET['page'] : 1; // als $_get[page] nog niet bestaat, dan begint je gastenboek bij pagina 1

$start = ($page * $perpage) - $perpage;
$sql = "SELECT * FROM gastenboek ORDER BY id DESC LIMIT ".$start.",".$perpage.""; //Berichten uit de database halen en deze sorteren.
$uitvoer = mysql_query($sql) or(mysql_error());
while($data = mysql_fetch_array($uitvoer))
{
echo "<hr><blockquote>Bericht geschreven door <b>".$data['naam']."&nbsp;".$data['achternaam']."</b>"; //De naam van de auteur
echo " op " .$data['datum'];
echo " om " .$data['tijd'];
echo "<hr noshade>";
$bericht = nl2br($data['bericht']);
echo $bericht; //Het bericht zelf
echo "</blockquote>";
}
 
Klopt inderdaad, had er even overheen gelezen.

PHP:
$bericht = htmlspecialchars($bericht);
Dat is de boosdoener.

Haal je die weg dan gaat je veiligheid wel aardig omlaag aangezien het dan mogelijk is om HTML-code direct uit te laten voeren.

De beste optie is waarschijnlijk om met bb-code te werken dus dat je {text} in moet voeren wil je het uit laten voeren.

Met de functie preg_replace() kom je er wel.
Er zijn ook meerdere threads in deze sectie over te vinden. Probeer de zoek-optie eens.

edit: even een link opgezocht http://helpmij.nl/forum/showthread.php?t=320370
 
Laatst bewerkt:
PHP:
$bericht = strip_tags($bericht, '<a>');
stript alle html tags behalve de <a>
maar bbcode is beter omdat je dan van de sql-injection/html-injection af bent (als je het goed uitwerkt)
 
beetje laat, maar het volgende werkt ook aardig

PHP:
 $bericht = eregi_replace("(^|[ \n\r\t])((http(s?)://)(www.)?([a-z0-9_-]+(\.[a-z0-9_-]+)+)(/[^/ \n\r]*)*)","\\1<a href=\"\\2\" target=\"_blank\">\\2</a>", $bericht);
 $bericht = eregi_replace("(^|[ \n\r\t])((ftp://)(www.)?([a-z0-9_-]+(\.[a-z0-9_-]+)+)(/[^/ \n\r]*)*)","\\1<a href=\"\\2\" target=\"_blank\">\\2</a>", $bericht);
 $bericht = eregi_replace("([a-z_-][a-z0-9\._-]*@[a-z0-9_-]+(\.[a-z0-9_-]+)+)","<a href=\"mailto:\\1\">\\1</a>", $bericht);
 $bericht = eregi_replace("(^|[ \n\r\t])(www.([a-z0-9_-]+(\.[a-z0-9_-]+)+)(/[^/ \n\r]*)*)","\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>", $bericht);
 $bericht = eregi_replace("(^|[ \n\r\t])(ftp.([a-z0-9_-]+(\.[a-z0-9_-]+)+)(/[^/ \n\r]*)*)","\\1<a href=\"ftp://\\2\" target=\"_blank\">\\2</a>", $bericht);

die herkent zelf links en mailto's...
 
Gebruik dan wel preg_replace.
 
Sneller.

eregi en ereg worden bijna niet meer gebruikt. Gaan er ook uit op termijn, volgens mij.
 
Gaan er ook uit op termijn, volgens mij.
Staat niet aangegeven op de PHP site dus blijft voorlopig nog.
Wel wordt bij de pagina van ereg_replace aangegeven dat preg_replace sneller is en dus de voorkeur verdiend. :)
 
en aangezien wij nederlanders allemaal vreselijk gehaast zijn, en nooit durven te denken wat vandaag niet lukt doen we morgen wel, gebruiken we gewoon de langzame manier. Om mensen sociaal te maken.:D:p
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan