/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
gæstegog virker ik
Fra : Mega Hawk


Dato : 20-09-02 13:43

Hej igen igen...

Jeg har lige været igang med at læse hæftet "start på php"

Til sidst i hæftet er der et eksempel på hvordan du laver en
enkelt gæstebog, men den virker ik helt.
Når jeg skriver noget og trykker på send så gemmer den ik noget
og skriver ik noget
Nogen der kan fortælle mig hvor fejlen er?
Jeg skulle mene jeg har skrevet koden rigtig af.
Her er koden:

<?php
$db=mysql_connect("localhost","root","");
mysql_select_db("gbog",$db);
if($skriv){
   $besked=str_replace("\n","<br>",$besked);
   $dato_array=getdate();
   $dato=$dato_array["mday"]."/".$dato_arraay["mon"]."-".$dato_arra
y["year"];
mysql_query("insert into bog (navn,email,dato,besked)
values('$navn','$email','$dato',$besked')");}
?>
<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>
<?
$foresp=mysql_query("select navn,email,dato,besked FROM bog ORDER
BY nr DESC");
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>";}
?>


--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP ???
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

 
 
Julius T. Madsen (20-09-2002)
Kommentar
Fra : Julius T. Madsen


Dato : 20-09-02 14:25

> Nogen der kan fortælle mig hvor fejlen er?
> Jeg skulle mene jeg har skrevet koden rigtig af.

jeg har ikke lige kigget din kode, men hvis du er 100% sikker på at
du har skrevet koden rigtigt af, så er det vel din database den er
gal med - er du sikker på at den også er sat ordentligt op?


--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP ???
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Mega Hawk (20-09-2002)
Kommentar
Fra : Mega Hawk


Dato : 20-09-02 14:44

er du sikker på at den også er sat ordentligt op?
>
Jepper jeg har gjort lige som det står i bogen også med databasen
derfor forstår jeg det heler ik at det ik virker


--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP ???
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

dudsen (20-09-2002)
Kommentar
Fra : dudsen


Dato : 20-09-02 14:48

Mega Hawk wrote:

> Hej igen igen...
>
> Jeg har lige været igang med at læse hæftet "start på php"
>
> Til sidst i hæftet er der et eksempel på hvordan du laver en
> enkelt gæstebog, men den virker ik helt.
> Når jeg skriver noget og trykker på send så gemmer den ik noget
> og skriver ik noget
> Nogen der kan fortælle mig hvor fejlen er?

Der er som jeg ser det 2 åbentlyse fejlkilder der så i raeliteten
leder til bage til at dit udviklings miljø ikke er det samme som det
bogen går ud fra

> Jeg skulle mene jeg har skrevet koden rigtig af.
> Her er koden:
>
> <?php
> $db=mysql_connect("localhost","root","");

her er det ikke sikker din bruger hedder root eller har et tomt paswd.

Den anden fejl er at register_globals er sat til off i php ini
Dette gør at variabler skal behandles lidt før de overføres fra side
til side

--
Daniel Udsen
"Mr. Watson, come here, I want you." -- Alexander Graham Bell


Søren Juhl Vind (20-09-2002)
Kommentar
Fra : Søren Juhl Vind


Dato : 20-09-02 16:03

> Jeg har lige været igang med at læse hæftet "start på php"

Sjovt nok er jeg i gang med samme hæfte :)

> Til sidst i hæftet er der et eksempel på hvordan du laver en
> enkelt gæstebog, men den virker ik helt.
> Når jeg skriver noget og trykker på send så gemmer den ik noget
> og skriver ik noget

Jeg har haft samme problem, dog ikke med gæstebogen.. men med formularer i
al almindelighed.
I stedet for bare at skrive formularefeltets navn som $navn, skal du bruge
$_POST["navn"] i stedet, jeg
ved ikke hvorfor man skal.. men det virker ihvertfald hvis du gør det.

> Nogen der kan fortælle mig hvor fejlen er?
> Jeg skulle mene jeg har skrevet koden rigtig af.
> Her er koden:

Jeg skriver lige de fejl jeg lige kan se.

> <?php
> $db=mysql_connect("localhost","root","");

Er du sikker på at dit username er root og at du ikke har noget password?

> mysql_select_db("gbog",$db);
> if($skriv){
> $besked=str_replace("\n","<br>",$besked);
> $dato_array=getdate();
> $dato=$dato_array["mday"]."/".$dato_arraay["mon"]."-".$dato_arra
> y["year"];
> mysql_query("insert into bog (navn,email,dato,besked)
> values('$navn','$email','$dato',$besked')");}

Her retter du $navn','$email','$dato',$besked' til
'$_POST["navn"]','$_POST["email"]','$_POST["dato"]','$_POST["besked"]'.

> ?>
> <center>
> <form method=post action=<?php echo $php_self;?>>
> <input type=hidden name=skriv value=1>
> navn:<input type=text name=email><br>

Skal navn's name ikke være navn(lyder kryptisk.. men ok du forstår hvad jeg
mener)

> 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>
> <?
> $foresp=mysql_query("select navn,email,dato,besked FROM bog ORDER
> BY nr DESC");
> 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>";}
> ?>

Resten ser fint ud.. jeg er da glad for at jeg ikke er den eneste nybegynder
herinde :)

-Søren




Jakob Møbjerg Nielse~ (20-09-2002)
Kommentar
Fra : Jakob Møbjerg Nielse~


Dato : 20-09-02 23:51

Søren Juhl Vind wrote:
> I stedet for bare at skrive formularefeltets navn som $navn, skal du
> bruge $_POST["navn"] i stedet, jeg
> ved ikke hvorfor man skal..

Det er mere sikkert. Det beskytter bl.a. mod injections.

--
Jakob Møbjerg Nielsen | "Five exclamation marks, the
jakob@dataloger.dk | sure sign of an insane mind."
http://www.jakobnielsen.dk/ | -- Terry Pratchett, Reaper Man
Jeg søger et fuldtidsjob som programmør. Tag et kig på hjemmesiden.



Niels Andersen (21-09-2002)
Kommentar
Fra : Niels Andersen


Dato : 21-09-02 14:53

Søren Juhl Vind wrote in <3d8b37ad$0$49658$edfadb0f@dspool01.news.tele.dk>:
> I stedet for bare at skrive formularefeltets navn som $navn, skal du bruge
> $_POST["navn"] i stedet, jeg
> ved ikke hvorfor man skal.. men det virker ihvertfald hvis du gør det.

Det med at man bare kan skrive "$navn" er en feature. Desværre giver den
flere problemer end den løser.
Det kan slås til og fra som man vil. Tidligere var den slået til som
standard, men i nyere versioner af PHP er den slået fra.

Hvis du virkelig vil, kan *kan* du slå den til. Det anbefales dog kraftigt
at lade den være slået fra.

Det begyndte jeg i øvrigt at anbefale længe før en sikkerhedsekspert skrev
en artikel om det, hvorefter udviklerne lavede det om. Men der var der nu
mange der gjorde. :)

--
Mvh.

Niels Andersen
(la nels. anersyn.)

Ukendt (20-09-2002)
Kommentar
Fra : Ukendt


Dato : 20-09-02 16:51

><form method=post action=<?php echo $php_self;?>>

<?php echo $_SERVER["PHP_SELF"]; ?>

><input type=hidden name=skriv value=1>

<input type='hidden' name='skriv' value=1>

ALLE "ikke" tal skal skrives med ' eller " rundt om ellers er det ikke
alle browsere der fatter noget af det

Peter Brodersen (22-09-2002)
Kommentar
Fra : Peter Brodersen


Dato : 22-09-02 20:03

On Fri, 20 Sep 2002 17:51:02 +0200, -Martin-
<martin_aarhof(AT)hotmail.com> wrote:

><input type='hidden' name='skriv' value=1>
>
>ALLE "ikke" tal skal skrives med ' eller " rundt om ellers er det ikke
>alle browsere der fatter noget af det

Kun i X(HT)ML, og der skal alle værdier til attributter i gåseøjne.

name=skriv har alledage været lovlig HTML, og jeg kan ikke komme på én
browser, der ikke honorerer dette. Til gengæld er det et problem, hvis
der er andet end blot lige tal og bogstaveri, for eksempel slashes og
lignende.

--
- Peter Brodersen

Niels Andersen (21-09-2002)
Kommentar
Fra : Niels Andersen


Dato : 21-09-02 15:14

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.)

Mega Hawk (23-09-2002)
Kommentar
Fra : Mega Hawk


Dato : 23-09-02 09:00

Hej folkenz.

Jeg vil bare lige sige 100000000 tark fordi i har brugt så meget tid på at
hjælpe mig og give mig råd
Jeg kan så også sige at det virker nu så 100000000 tark folkenz....

--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP ???
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408937
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste