[php]guestbook achterstevoren

Pagina: 1
Acties:
  • 162 views sinds 30-01-2008
  • Reageer

Onderwerpen


  • kazz1980
  • Registratie: Juni 2001
  • Laatst online: 19-08 22:44

kazz1980

Goh... Ik hier?

Topicstarter
Ik ben een gastenboek aan het maken.
Ik doe dit m.b.v. opslaan in een txt-bestand (moet voor de opdracht...)

Echter, als ik nu een nieuwe entry aan het gastenboek toevoeg slaat hij dit op achteraan de bestaande file. Gevolg is dat een nieuwe entry achteraan wordt weergegeven. Dit moet natuurlijk bovenaan staan!
Iemand enig idee hoe ik dit kan oplossen?

Dit heb ik nu:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
                    if ($naam_check AND $locatie_check AND $email_check AND $website_check AND $bericht_check){
                        //gegevens aan gastenboek toevoegen
                        $filename="gastenboek.txt";
                        $file= fopen($filename, "a") or die("foutje");
                        
                        fwrite($file, "\n$naam_check,$locatie_check,$email_check,$website_check,$bericht_check");
                        fclose($file);

                        echo "gelukt";

                    } else{


                        echo "niet gelukt";
                    
                    }
                ?>


                        <?php
                        $filename="gastenboek.txt";
                        $file= fopen($filename, "r") or die("foutje");
                        while (!feof($file)){
                            $line= fgets($file, 1024);
                            $entry= explode(",",$line);
                            echo "<tr><td>Naam: $entry[0]</td></tr>";
                        }

                        fclose($file)
                        ?>


Gaat alleen om de stukjes waar naar de file geschreven wordt en waar er gelzen wordt.

[ Voor 44% gewijzigd door kazz1980 op 17-09-2003 12:13 ]

hier stond iets interessants, maar het is even weg...


  • TheDane
  • Registratie: Oktober 2000
  • Laatst online: 17-09 14:46

TheDane

1.618

wat je kunt doen (simpel) is eerst je gastenboekbestand inlezen in een variabele. daarna het bestand leegmaken, je nieuwe entry erin schrijven, en daarna de inhoud van je variabele met de rest van het gastenboek.

  • kazz1980
  • Registratie: Juni 2001
  • Laatst online: 19-08 22:44

kazz1980

Goh... Ik hier?

Topicstarter
zoiets had ik ook bedacht ja, maar kreeg het niet voor elkaar...
Heb dat geprobeerd via het opbouwen van een array...liep PC bijna van vast, dus ging ergens niet lekker...

Ander probleem: Hoe maak ik een bestand leeg?

[ Voor 89% gewijzigd door kazz1980 op 17-09-2003 12:20 ]

hier stond iets interessants, maar het is even weg...


  • kazz1980
  • Registratie: Juni 2001
  • Laatst online: 19-08 22:44

kazz1980

Goh... Ik hier?

Topicstarter
Ik heb nu dit:

PHP:
1
2
3
4
5
6
7
8
9
                        $filename="gastenboek.txt";
                        $file= fopen($filename, "a") or die("foutje");
                        $file_temp=$file;
                        fwrite($file, "\n$naam_check,$locatie_check,$email_check,$website_check,$bericht_check");
                        while (!feof($file_temp)){
                            $line= fgets($file, 1024);
                            fwrite($file,$line);
                        }
                        fclose($file);


Dat werkt dus niet...

code:
1
Fatal error: Maximum execution time of 30 seconds exceeded in C:\apache\htdocs\gastenboek.php on line 131


En ik begrijp eigenlijk niet helemaal waarom dit mis gaat...

hier stond iets interessants, maar het is even weg...


  • Gangkast
  • Registratie: Juni 2001
  • Niet online

Gangkast

/// Meubel

modbreak:
Laat dit maar even achterwege...

[ Voor 75% gewijzigd door Janoz op 17-09-2003 12:44 ]

“The world is a book and those who do not travel read only one page”


  • Kippenijzer
  • Registratie: Juni 2001
  • Laatst online: 26-08 09:08

Kippenijzer

McFallafel, nu met paardevlees

wat dacht je van in pseudocode :
- Move file naar tijdelijke file
- Voeg entry toe aan normale file
- append tijdelijke file achter nieuwe entry
- verwijder tijdelijk file

  • kazz1980
  • Registratie: Juni 2001
  • Laatst online: 19-08 22:44

kazz1980

Goh... Ik hier?

Topicstarter
Kippenijzer schreef op 17 September 2003 @ 12:29:
wat dacht je van in pseudocode :
- Move file naar tijdelijke file
- Voeg entry toe aan normale file
- append tijdelijke file achter nieuwe entry
- verwijder tijdelijk file
dat moet inderdaad misschien kunnen lukken. ik probeer!

hier stond iets interessants, maar het is even weg...


  • kazz1980
  • Registratie: Juni 2001
  • Laatst online: 19-08 22:44

kazz1980

Goh... Ik hier?

Topicstarter
Ben nu anderhalf jaar met PHP bezig, heb al complete online boekenwinkel opgezet in PHP...kom alleen ergens niet helemaal uit omdat ik nog nooit eerder met filehandling gewerkt heb (gebruik liever MySQL...maar dat mag niet voor deze opdracht).

[ Voor 16% gewijzigd door kazz1980 op 17-09-2003 12:49 ]

hier stond iets interessants, maar het is even weg...


  • mocean
  • Registratie: November 2000
  • Laatst online: 04-09 10:34
kazz1980 schreef op 17 September 2003 @ 12:32:
[...]


Wat is dit nu weer voor lamme opmerking??
Ben al anderhalf jaar met PHP bezig, heb al complete online boekenwinkel opgezet in PHP...kom alleen ergens niet helemaal uit omdat ik nog nooit eerder met filehandling gewerkt heb (gebruik liever MySQL...maar dat mag niet voor deze opdracht).
Dit is echt zo basic, en heeft weinig met programmeren te maken, meer met het bedenken van het algoritme. En dat is erg simpel:

code:
1
2
3
4
var1=leesfileinhoud
var2=nieuwbericht&var1
maakfileleeg
schijffile(var2)


En zaken als files leegmaken etc. kan je heel makkelijk op de php site vinden bij de fopen uitleg.

Koop of verkoop je webshop: ecquisition.com


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

kazz1980 schreef op 17 September 2003 @ 12:24:
Ik heb nu dit:

PHP:
1
2
3
4
5
6
7
8
9
                        $filename="gastenboek.txt";
                        $file= fopen($filename, "a") or die("foutje");
                        $file_temp=$file;
                        fwrite($file, "\n$naam_check,$locatie_check,$email_check,$website_check,$bericht_check");
                        while (!feof($file_temp)){
                            $line= fgets($file, 1024);
                            fwrite($file,$line);
                        }
                        fclose($file);


Dat werkt dus niet...

code:
1
Fatal error: Maximum execution time of 30 seconds exceeded in C:\apache\htdocs\gastenboek.php on line 131


En ik begrijp eigenlijk niet helemaal waarom dit mis gaat...
Dan zal ik het even uitleggen
1&2 je opent een bestand in append mode met de naam gastenboek.txt en zet de handle in $file.
3 je kopieert de handle naar new_file (en doet hier verder niks mee)
4 je scrijft een nieuwe entry weg achteraan in het bestand
5 tm 8 je leest het bestand in tot het eind en schrijft dit er vervolgens weer achter. Zoals je misschine nu ziet houdt dit nooit op omdat je telkens weer meer achter je bestand aan schrijft en het bestand dus nooit aan het einde zal komen.

Wat dan wel te doen?

Eerste moet je je hele bestand eerst inlezen in een variabele, en pas dan leegmaken entry invullen en rest toevoegen.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Tiny
  • Registratie: Mei 2003
  • Laatst online: 15-06 23:03

Tiny

Wat eten we?

Is er een belangrijke reden waarom je gebruik maakt van een tekstbestand ipv bijv een mysql database?

  • Gangkast
  • Registratie: Juni 2001
  • Niet online

Gangkast

/// Meubel

Tja, en? Heb je weinig geleert in je tijd >:)
Of hebbie 1,5 jaar tutorials overgetypt?


modbreak: Als je hier komt om te kloten rot je maar weer fijn op. iedereen aub deze opmerking negeren en dan kunnen we weer ontopic verder

[ Voor 82% gewijzigd door curry684 op 17-09-2003 13:02 ]

“The world is a book and those who do not travel read only one page”


  • kazz1980
  • Registratie: Juni 2001
  • Laatst online: 19-08 22:44

kazz1980

Goh... Ik hier?

Topicstarter
PencakSilat schreef op 17 September 2003 @ 12:44:
Is er een belangrijke reden waarom je gebruik maakt van een tekstbestand ipv bijv een mysql database?
Dat is de opdracht...kan het ook niet helpen. MySQL zou idd veel geschikter zijn.

hier stond iets interessants, maar het is even weg...


  • kazz1980
  • Registratie: Juni 2001
  • Laatst online: 19-08 22:44

kazz1980

Goh... Ik hier?

Topicstarter
Gangkast schreef op 17 September 2003 @ 12:46:
[...]


Tja, en? Heb je weinig geleert in je tijd >:)
Of hebbie 1,5 jaar tutorials overgetypt?
Wil je hier svp mee ophouden? Dit zijn ronduit flames.
Ik begrijp een deel van PHP gewoon nog niet helemaal, daarom vraag ik om hulp.
Dan zit ik er dus niet op te wachten om te horen dat ik het niet kan...Dat wist ik nl. al, anders zou ik de vraag niet stellen!

Hap nou niet daar wordt ie happy van. Gebruik TR of SeM aub.

[ Voor 10% gewijzigd door curry684 op 17-09-2003 13:04 ]

hier stond iets interessants, maar het is even weg...


  • kazz1980
  • Registratie: Juni 2001
  • Laatst online: 19-08 22:44

kazz1980

Goh... Ik hier?

Topicstarter
Dom ja...gewoon een oneindige loop gemaakt....even niet goed nagedacht!

Een betere oplossing is dus (zoals je zegt) de file inlezen en opslaan in een variabele.
Ik probeer dit middels de functie fread(), maar dat wil ook weer niet:

PHP:
1
2
3
4
5
                        $filename="gastenboek.txt";
                        $file= fopen($filename, "r") or die("foutje");
                        
                        $file_temp= fread($file, 100000) or die ("foutje_temp");
                        fclose($file);


Dat vorige was een denkfoutje...maar hier snap ik echt even niet wat er mis gaat...Ik gebruik de functie toch gewoon goed zo? (volgens php.net ten minste...)

[ Voor 59% gewijzigd door kazz1980 op 17-09-2003 12:56 ]

hier stond iets interessants, maar het is even weg...


  • Arnaud
  • Registratie: Mei 2000
  • Laatst online: 16-09 07:24
Als je in PHP gebruik kunt maken van de "Microsoft Text Driver" dan kun je het text-bestand inlezen net alsof het een database is. Vervolgens kun je dan (in je SQL-statement) met Order By ... ASC of Desc doen wat je wilt. Op deze manier hoef je zelf je variabelen niet meer te parsen en kun je werken zoals je blijkbaar met SQL gewend bent.

De simpelere (maar wel omslachtige) oplossingen staan hierboven al.

[ Voor 23% gewijzigd door Arnaud op 17-09-2003 12:57 ]


Verwijderd

volgens mij gebruik je niet de juiste fopen mode.

http://nl2.php.net/manual/en/function.fopen.php

je gebruikt :
fopen($filename, "a")
'a' = Open for writing only; place the file pointer at the end of the file.

en dit zou volgens mij moeten zijn:
fopen($filename, "x")
'x' = Create and open for writing only; place the file pointer at the beginning of the file.

  • kazz1980
  • Registratie: Juni 2001
  • Laatst online: 19-08 22:44

kazz1980

Goh... Ik hier?

Topicstarter
Verwijderd schreef op 17 September 2003 @ 12:56:
volgens mij gebruik je niet de juiste fopen mode.

http://nl2.php.net/manual/en/function.fopen.php

je gebruikt :
fopen($filename, "a")
'a' = Open for writing only; place the file pointer at the end of the file.

en dit zou volgens mij moeten zijn:
fopen($filename, "x")
'x' = Create and open for writing only; place the file pointer at the beginning of the file.
huh? "x"?? Daar wordt op www.php.net geen woord over gerept...
De "x" wordt niet geaccepteerd door de functie fopen...

[ Voor 11% gewijzigd door kazz1980 op 17-09-2003 13:00 ]

hier stond iets interessants, maar het is even weg...


  • kazz1980
  • Registratie: Juni 2001
  • Laatst online: 19-08 22:44

kazz1980

Goh... Ik hier?

Topicstarter
Arnaud schreef op 17 September 2003 @ 12:55:
Als je in PHP gebruik kunt maken van de "Microsoft Text Driver" dan kun je het text-bestand inlezen net alsof het een database is. Vervolgens kun je dan (in je SQL-statement) met Order By ... ASC of Desc doen wat je wilt. Op deze manier hoef je zelf je variabelen niet meer te parsen en kun je werken zoals je blijkbaar met SQL gewend bent.

De simpelere (maar wel omslachtige) oplossingen staan hierboven al.
Het moet ook onder linux werken...

hier stond iets interessants, maar het is even weg...


  • ruthger
  • Registratie: September 2000
  • Laatst online: 22-11-2024
Ik heb nog wel een script voor een database gebaseerd op tekstbestanden. Bruikbaar als voorbeeld, natuurlijk....

http://www.phpclasses.org/browse.html/package/623.html

Veni, vidi et cervesiam


  • kazz1980
  • Registratie: Juni 2001
  • Laatst online: 19-08 22:44

kazz1980

Goh... Ik hier?

Topicstarter
Ik heb em!!
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
                        $filename="gastenboek.txt";
                        $file= fopen($filename, "r") or die("foutje");
                        
                        while (!feof($file)){
                        $file_temp .= fread($file, 1024);
                        }                       }
                        fclose($file);
                        
                        

                        $final_content= "\n$naam_check,$locatie_check,$email_check,$website_check,$bericht_check". $file_temp;
                        
                        $file2= fopen($filename, "w") or die("foutje");
                        $finalwrite= fwrite($file2, $final_content);
                        fclose($file2);

bedankt allen!

hier stond iets interessants, maar het is even weg...


  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

kazz1980 schreef op 17 September 2003 @ 12:57:
[...]


huh? "x"?? Daar wordt op www.php.net geen woord over gerept...
De "x" wordt niet geaccepteerd door de functie fopen...
New feature in versie 4.3.2

Programmer - an organism that turns coffee into software.


  • mocean
  • Registratie: November 2000
  • Laatst online: 04-09 10:34
je kan ook fget_contents gebruiken meen ik, ipv
PHP:
1
2
3
4
$file= fopen($filename, "r") or die("foutje"); 
while (!feof($file)){ 
  $file_temp .= fread($file, 1024); 
}

Koop of verkoop je webshop: ecquisition.com


  • Gods Lonely Man
  • Registratie: April 2002
  • Laatst online: 19-02-2024

Gods Lonely Man

A sidekick's sidekick

waarom niet gewoon dit?:/

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php 
                        $filename="gastenboek.txt"; 
                        $file= fopen($filename, "r") or die("foutje"); 
                      $file =    array_reverse ($file);

                        while (!feof($file)){ 
                            $line= fgets($file, 1024); 
                            $entry= explode(",",$line); 
                            echo "<tr><td>Naam: $entry[0]</td></tr>"; 
                        } 

                        fclose($file) 
                        ?> 

It was that kind of a crazy afternoon, terrifically cold, and no sun out or anything, and you felt like you were disappearing every time you crossed a road.

If it weren't for Carbon-14, I wouldn't date at all.


Verwijderd

Volgens mij moet je de mode 'r+' gebruiken. De (mijn) manual zegt hierover: "Openen voor lezen en schrijven; plaats de bestands pointer aan het begin van het bestand."

dan krijg je dus:
PHP:
1
2
3
$file= fopen($filename, "r+") or die("foutje"); 
$finalwrite= fwrite($file, $content); 
fclose($file);
Pagina: 1