Mega Hawk wrote in <amf543$g5g$1@sunsite.dk>:
> Til sidst i hæftet er der et eksempel på hvordan du laver en
> enkelt gæstebog, men den virker ik helt.
Det hæfte er vist ikke særligt grundigt. Du springer over nogle vigtige
ting. Men det er vel hvad man kan forvente af et billig-hæfte.
> $db=mysql_connect("localhost","root","");
> mysql_select_db("gbog",$db);
Her bliver der slet ikke kontrolleret om alt går som det skal.
En nem lille forbedring:
$db=mysql_connect("localhost","root","") or die('Kunne ikke forbinde til
databasemanageren.');
mysql_select_db("gbog",$db) or die('Kunne ikke vælge database.');
> if($skriv){
Den har du nok fanget:
if ($_POST['skriv']) {
> $besked=str_replace("\n","<br>",$besked);
Den findes der en genvej til:
$besked = nl2br($besked);
Det smarte her er, at linje skift er nogle gange "\r\n". Det bliver så til
"\r<br>", hvilket er noget værre noget. :)
> $dato_array=getdate();
> $dato=$dato_array["mday"]."/".$dato_arraay["mon"]."-".$dato_arra
> y["year"];
Jeg ville gøre sådan her:
$date = date('j/n-Y');
Men det er vel en smagssag.
Jeg ved ikke lige om årstallet er med to eller fire cifre, jeg gik ud fra
fire. Hvis du bare vil have to, så erstat "Y" med "y".
> mysql_query("insert into bog (navn,email,dato,besked)
> values('$navn','$email','$dato',$besked')");}
Her bliver der igen ikke kontrolleret noget.
Desuden er det ikke godt for overskueligheden at "}" står i slutningen af
den linje, den burde stå på den næste linje. I øvrigt ser jeg nu, at hele
linjen ikke var indrykket. Det burde den have været, ligesom de tre linjer
før.
En sidste ting, jeg foretrækker oftest at selve SQL-kommandoen skrives på en
linje for sig selv. Det er en smagssag, men jeg synes ikke SQL-kommandoen
skal være særlig lang, før det øger overskueligheden.
Jeg får det til:
$sql = "INSERT INTO bog (navn,email,dato,besked)
VALUES('$navn','$email','$dato',$besked')";
mysql_query($sql) or die('MySQL fejl: '.mysql_error());
}
> ?>
> <center>
> <form method=post action=<?php echo $php_self;?>>
> <input type=hidden name=skriv value=1>
> navn:<input type=text name=email><br>
> email:<input type=text name=email><br>
> <textarea name=besked cols=30 rows=5></textarea><br>
> <input type=submit value="send">
> </form>
> <br><br>
> <table>
Det kunne jeg også sige en masse om, men nu er det ikke lige HTML det drejer
sig om. :)
Jeg vil nøjes med at undre mig over, at du kalder både navnet og
email-adresse for "email".
> <?
> $foresp=mysql_query("select navn,email,dato,besked FROM bog ORDER
> BY nr DESC");
Igen, ingen kontrol.
Jeg tror lige jeg viser dig scriptet, hvor jeg har rettet de nævnte ting, og
lidt mere.
Det er ikke det samme, som at jeg ville lave det på denne måde, men de
nemmeste og mest iøjnfaldende ting er rettet.
Jeg har indsættet lidt ekstra linjeskift. Dem plejer jeg ikke at bruge helt
så meget, men nu er linjerne på usenet jo også ret korte.
<?php
$db=mysql_connect("localhost","root","")
or die('Kunne ikke forbinde til databasemanageren.');
mysql_select_db("gbog",$db) or die('Kunne ikke vælge database.');
if ($_POST['skriv']) {
$besked = nl2br($_POST['besked']);
$date = date('j/n-Y');
$sql = "
INSERT INTO bog
(navn,email,dato,besked)
VALUES(
'{$_POST['navn']}',
'{$_POST['email']}',
'{$_POST['dato']}',
'{$_POST['besked']}')
";
mysql_query($sql) or die('MySQL fejl: '.mysql_error());
}
?>
<center>
<form method="post" action="<?php echo $php_self;?>">
<input type="hidden" name="skriv" value="1">
navn:<input type="text" name="navn"><br>
email:<input type="text" name="email"><br>
<textarea name="besked" cols="30" rows="5"></textarea><br>
<input type="submit" value="send">
</form>
<br><br>
<table>
<?php
$sql = "select navn,email,dato,besked FROM bog ORDER BY nr DESC";
$foresp=mysql_query($sql) or die('MySQL fejl: '.mysql_error());
while ($data=mysql_fetch_row($foresp)) {
echo "<tr><td valign=\"top\">";
echo "fra:<a href=\"mailto:$data[1]\">$data[0]</a>";
echo "<br>$data[2]";
echo "</td><td valign=\"top\">$data[3]</td></tr>\n";
}
?>
Helt utestet, men det er jo også kun til at se på og lære af.
--
Mvh.
Niels Andersen
(la nels. anersyn.)