20. september 2003 - 14:51Der er
16 kommentarer og 1 løsning
fejl i koden
Jeg har følgende kode som der er nogle fejl i. 1: Når man skriver sin email, vil den ikke lave det til et link 2: Hvis man skriver et emne, vil den ikke udskrive det
echo top("Fejl") . "Gæstebogen brokkede sig lidt over dit input:" . $fejlmelding . $generel_tekst . bund(); exit;
}
/* * Denne funktion skriver i gæstebogen - altså i databasen. * Bemærk, at vi ikke bruger PHP til at indsætte tiden, men * bruger MySQLs indbyggede funktion now(). */
function skriv_i_gbog($navn, $emne, $epost, $besked) {
$ip = getenv('REMOTE_ADDR');
$sql = "insert into gaestebog(navn,epost,besked,emne,ip,tid) values('$navn','$epost','$besked','$emne','$ip',now())";
/* * Vi laver lidt simpelt fejlcheckeri og ser, om der overhovedet * er skrevet noget. Hvis ikke, bruger vi fejlfunktionen til at brokke os. * Fejlfunktionen slutter med "exit", der sørger for, at PHP stopper. */
if(!ereg("[A-z0-9]+", $navn)) {
$fejl[] = "Du har ikke skrevet dit navn";
}
if(!ereg("[A-z0-9]+", $besked)) {
$fejl[] = "Du har ikke skrevet nogen besked";
}
if(count($fejl) > 0) { gbog_fejl($fejl); }
/* * Hvis vi er nået hertil, så står der i det mindste et eller andet i felterne og vi * knalder det i databasen med funktionen skriv_i_gbog(). * Vi escaper alle fyfy-tegn med addslashes(). Når vi senere præsenterer indholdet * af gBogen bruger vi stripslashes() til at "afkode". * * Alt dette besvær er til for at folk ikke skal snige ondsindede SQL-kommandoer * ind i deres indlæg. Nyere versioner af PHP gør alt dette automatisk, * men vi kan godt li' at være på den sikre side. */
/* * Så er skidtet banket i databasen og vi sender folk videre til selve gBogen * hvor de kan se deres eget indlæg. */
header("Location: gbog.php");
/* * Skal der sendes epost til administratoren? * * Bemærk, at vi godt kan gøre dette selv om folk er sendt videre til gBogen. * Der er ingen grund til at gæsterne skal vente på, at der bliver sendt * post - derfor kommer det først allersidst. */
if($epost_p == "t") {
$ip = getenv('REMOTE_ADDR'); $epostens_indhold = "$navn har skrevet denne besked fra IP-adressen $REMOTE_ADDR:\n-----------------------------------------------------\n\n$besked";
Gbog.php ser således ud! Kan I se hvad der er galt nu. Har rodet lidt med det, og nu udskriver den email adressen der hvor emnet skal stå. der hvor ham som har skrevet i gæstebogen's navn skal stå, laves ikke om til et email link! Så det er altså disse fejl som skal rettes. Håber i kan hjælpe
<?php
##################################################################### # # # Dette er en simpel Gæste bog som du må bruge lige som # # du har lyst til # # # # Gæstebogen er lavet af Nicce # # NG@frac.dk # # # # # #####################################################################
# # Når folk kigger på gBogen første gang har de ikke noget $start_nr, så vi giver dem et nul, # så de starter med det nyeste indlæg. # Hvis en skuummel gæst selv prøver at sætte $start_nr kan den ende med at blive under nul, # når man bruger navigationen. Hvis den er under nul laver vi den også om til nul, så # mysql ikke begynder at brokke sig over ugyldigt input #
# # Vi henter to ting ud af MySQL - først og fremmest alle de indlæg vi skal kigge på # men også en hurtig optælling af, hvor mange indlæg der er ialt. Det sidste skal vi # bruge når vi bygger "frem"- og "tilbage"-links. # # Der er ingen grund til at åbne databasen endnu - vi skal først lige have bygget # de to forespørgsler. #
$sql = "select id, navn, epost, emne, date_format(tid, '%e/%c %Y, %H:%i') as tiden, besked from gaestebog order by tid desc limit $start_nr, $antal_ad_gangen"; $taeller_sql = "select count(*) as antal from gaestebog";
# # Nu åbner vi databasen, hiver informationerne ud og lukker med det samme igen. # Det er god skik at en forbindelse til database ikke er åben længere end højst nødvendigt. # # Abstraktionerne fra mysql-funktioner.php sørger for alt det grove arbejde og fejlhåndtering - dejligt. #
# # Så går vi igang med at bygge navigationen # Først bruger vi extract til at få $antal ud til behandling. # Vi looper ikke igennem resultatet, da vi ved der kun er een række, # så vi tilgår den direkte ved $optaelling[0]. #
# # Her begynder det egentlig interesante - vi looper os igennem de enkelte indlæg # og skriver dem ud til skærmen. # # Hvis forespørgslen ikke har returneret nogle resultater, springer vi alt dette over. #
if(count($resultat) < 1) {
echo "Der er ingen indlæg i gBogen";
} else {
for($i=0;$i<count($resultat);$i++) {
# # Med extract får vi smidt værdierne i variabler #
extract($resultat[$i]);
# # Vi brugte addslashes() da vi lagde tingene i databasen så for at få det til # at se læseligt ud, fjerne vi dem igen med stripslashes() #
# # For at vi får linjeskift i HTML også, bruger vi nl2br til at skifte alle \n # ud med <br>
$besked = nl2br($besked);
# # Vi laver et simpelt check: Hvis eposten indeholder et snabel-a, så laver # vi det til en mailto: # # Dette er dog ingen garanti for, at eposten er gyldig. #
# # Så er alt klart til browseren og vi spytter en tabel ud med denne besked. # Hvis du vil ændre markant i udseendet af din gæstebog, så er det # i blokken herunder det foregår. Du skal bare beholde de givne navne i # <input>-tagsene. # # Vi hopper lige ud af PHP-mode lidt, så vi er fri for at escape alle gåseøjnene. #
# # Vi hopper tilbage i PHP-mode. # # Her slutter loopet og PHP springer tilbage og går hele turen igennem med den næste # besked. Når der ikke er flere indlæg i denne omgang går PHP videre. #
}
# # Endelig skriver vi frem- og tilbage-links på i bunden af siden også. Har slettet det, fordi at det ser klodset ud. #
# # Her slutter if-else-konstruktionen der fanger, om der er nogle indlæg overhovedet. #
##################################################################### # # # Dette er en simpel Gæste bog som du må bruge lige som # # du har lyst til # # # # Gæstebogen er lavet af Nicce # # NG@frac.dk # # # # # #####################################################################
# # Når folk kigger på gBogen første gang har de ikke noget $start_nr, så vi giver dem et nul, # så de starter med det nyeste indlæg. # Hvis en skuummel gæst selv prøver at sætte $start_nr kan den ende med at blive under nul, # når man bruger navigationen. Hvis den er under nul laver vi den også om til nul, så # mysql ikke begynder at brokke sig over ugyldigt input #
# # Vi henter to ting ud af MySQL - først og fremmest alle de indlæg vi skal kigge på # men også en hurtig optælling af, hvor mange indlæg der er ialt. Det sidste skal vi # bruge når vi bygger "frem"- og "tilbage"-links. # # Der er ingen grund til at åbne databasen endnu - vi skal først lige have bygget # de to forespørgsler. #
$sql = "select id, navn, epost, emne, date_format(tid, '%e/%c %Y, %H:%i') as tiden, besked from gaestebog order by tid desc limit $start_nr, $antal_ad_gangen"; $taeller_sql = "select count(*) as antal from gaestebog";
# # Nu åbner vi databasen, hiver informationerne ud og lukker med det samme igen. # Det er god skik at en forbindelse til database ikke er åben længere end højst nødvendigt. # # Abstraktionerne fra mysql-funktioner.php sørger for alt det grove arbejde og fejlhåndtering - dejligt. #
# # Så går vi igang med at bygge navigationen # Først bruger vi extract til at få $antal ud til behandling. # Vi looper ikke igennem resultatet, da vi ved der kun er een række, # så vi tilgår den direkte ved $optaelling[0]. #
# # Her begynder det egentlig interesante - vi looper os igennem de enkelte indlæg # og skriver dem ud til skærmen. # # Hvis forespørgslen ikke har returneret nogle resultater, springer vi alt dette over. #
if(count($resultat) < 1) {
echo "Der er ingen indlæg i gBogen";
} else {
for($i=0;$i<count($resultat);$i++) {
# # Med extract får vi smidt værdierne i variabler #
extract($resultat[$i]);
# # Vi brugte addslashes() da vi lagde tingene i databasen så for at få det til # at se læseligt ud, fjerne vi dem igen med stripslashes() #
# # For at vi får linjeskift i HTML også, bruger vi nl2br til at skifte alle \n # ud med <br>
$besked = nl2br($besked);
# # Vi laver et simpelt check: Hvis eposten indeholder et snabel-a, så laver # vi det til en mailto: # # Dette er dog ingen garanti for, at eposten er gyldig. #
# # Så er alt klart til browseren og vi spytter en tabel ud med denne besked. # Hvis du vil ændre markant i udseendet af din gæstebog, så er det # i blokken herunder det foregår. Du skal bare beholde de givne navne i # <input>-tagsene. # # Vi hopper lige ud af PHP-mode lidt, så vi er fri for at escape alle gåseøjnene. #
# # Vi hopper tilbage i PHP-mode. # # Her slutter loopet og PHP springer tilbage og går hele turen igennem med den næste # besked. Når der ikke er flere indlæg i denne omgang går PHP videre. #
}
# # Endelig skriver vi frem- og tilbage-links på i bunden af siden også. Har slettet det, fordi at det ser klodset ud. #
# # Her slutter if-else-konstruktionen der fanger, om der er nogle indlæg overhovedet. #
}
# # Og spytter den sidste stump HTML ud. #
echo bund();
?> </TD> </TR> </TABLE>
det skulle ordne, at emnet blir vist ordentligt, og at email virker.
mine tags bliver nu tilføjet i databasen! Men email'en står stadig der hvor emne skal stå. Og der hvor ens navn skal stå, skulle meget gerne laves om til et link. I kan se min tagwall her www.b-teens.dk/gbog.php
# # Denne side er bare en simpel HTML-formular. # Den behøvede egentlig ikke at være en PHP-side, men vi kan jo lige så godt # bruge vores funktioner når vi nu har lavet dem ;) #
# # Hvis du vil have "skrive-siden" til at se anderledes ud kan du bare ændre i HTMLen herunder. #
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.