Avatar billede onlineman Nybegynder
16. august 2003 - 15:58 Der er 5 kommentarer

Hjælp - om fopen m.m. relateret!

Jeg har lavet en særdeles simpel gæstebog, men på trods af dette er der store problemer!! Når jeg skriver til database.txt indsættes det indtastede uden problemer, men ud vil det til gengæld ikke igen!!!.....Kun nogle få indtastninger hentes ud igen og visse af disse er endog placeret forkert (f.eks. dato ud for navn etc.) Hvor ligger problemet og kan nogen hjælpe mig! Det selvkomponerede script følger herunder: (på forhånd tak for evt. hjælp)

<html>
<head></head>
<body>
<form name="indsendform" method="post" action="<? $PHP_SELF; ?>">
Indtast navn:<br><input type="text" size="30" name="navn"><br>
Indtast email:<br><input type="text" size="30" name="email"><br>
Indtast besked:<br><textarea rows="4" cols="40" name="besked"></textarea><br>
<input type="submit" name="afsend" value="indsend">
</form>

<?
$dato_streng = date("j/n - Y");

$text_string = "$navn,$email,$dato_streng,$besked\r";

if (empty ($navn)) {
echo "Du SKAL indtaste dit navn - Tak!<p>";
}
elseif (empty ($besked)) {
echo "Du SKAL indtaste dit indlæg - Tak!<p>";
}
else {
$fil = fopen ("stien_til\\database.txt","a");
fwrite ($fil, $text_string);
fclose ($fil);
}

$fil = fopen ("stien_ til\\database.txt", "r");

while (!feof($fil)) {

$string  = fgets($fil,4096);
$enkelt_string = explode (",",$string);

echo "Navn: $enkelt_string[0]<br>";
echo "Email:$enkelt_string[1]<br>";
echo "Dato: $enkelt_string[2]<br><br>";
echo "Indlæg: $enkelt_string[3]<br>";
echo "<hr size ='1' noshade><p>";
}
fclose ($fil);

?>

</body>
</html>
Avatar billede detox Nybegynder
16. august 2003 - 16:36 #1
Umiddelbart er nok noget i den her stil:

<html>
<head></head>
<body>
<form name="indsendform" method="post" action="<?=$_SERVER['PHP_SELF'];?>">
Indtast navn:<br><input type="text" size="30" name="navn"><br>
Indtast email:<br><input type="text" size="30" name="email"><br>
Indtast besked:<br><textarea rows="4" cols="40" name="besked"></textarea><br>
<input type="submit" name="afsend" value="indsend">
</form>

<?
$dato_streng = date("j/n - Y");

$text_string = "$_POST[navn],$_POST[email],$dato_streng,$_POST[besked]\r";

if (empty ($_POST['navn'])) {
echo "Du SKAL indtaste dit navn - Tak!<p>";
}
elseif (empty ($_POST['besked'])) {
echo "Du SKAL indtaste dit indlæg - Tak!<p>";
}
else {
$fil = fopen ("stien_til\\database.txt","a");
fwrite ($fil, $text_string);
fclose ($fil);
}

$lines = file ("stien_til\\database.txt");

foreach ($lines as $line) {

$enkelt_string = explode (",",$line);

echo "Navn: $enkelt_string[0]<br>";
echo "Email:$enkelt_string[1]<br>";
echo "Dato: $enkelt_string[2]<br><br>";
echo "Indlæg: $enkelt_string[3]<br>";
echo "<hr size ='1' noshade><p>";
}
?>
</body>
</html>

Problemet med den her kode er, at man ikke må bruge komma eller newline i textarea'et.
Avatar billede detox Nybegynder
16. august 2003 - 16:37 #2
Har du ikke mulighed for at bruge en database i stedet?
Avatar billede onlineman Nybegynder
16. august 2003 - 17:59 #3
Tak for svaret - men det hjælper ikke en dyt! Vil stadigvæk ikke hente de nødvendige informationer ud af db! Hvorledes undgår iøvrigt svaghederne som du nævner nederst i dit indlæg?
Avatar billede detox Nybegynder
16. august 2003 - 18:09 #4
Det optimale vil være at bruge en database (MySQL er gratis!).
Komma'et er nemt at rette. Der kan du bare skifte det tegn du bruger til at adskille posterne med ud (fx med ;). Newline, ved jeg til gengæld ikke lige.
Avatar billede repsac Nybegynder
16. august 2003 - 21:53 #5
Måske www.php.net/fgetcsv vil hjælpe? (Sagt ~uden at have læst noget af spørgsmålet :))
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester