[PHP Gastenboek] nieuwste 3 posts uit txt-file laten zien

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

Onderwerpen


Verwijderd

Topicstarter
Ik heb een heel simpel gastenboek dat werkt met een txt-file dus niet dbase-driven.
Nu heb ik een basic htmlpagina met een tabel bestaande uit twee cellen.
Linker cel include het gastenboek-invoer-formulier
de rechter cel include de berichten uit het txt file.

Op zich leuk, maar wat als er nu tig en tig posts gemaakt worden. Dan wordt dus mijn basic html-pagina wel errug lang en blijf je scrollen.
Mijn idee is daarom om in die basic html-pagina in de rechter cel slechts de nieuwste vijf posts te laten tonen.
Maar ja hoe doe ik dit....?

Een andere oplossing is om bv per 10-posts een nieuwe pagina te generen. Maar ook daarvoor geldt: hoe doe ik dat?

Mijn probleem is mijn inziens lastig omdat ik enkel een txt file gebruik en dus geen dbase icm MySQL.

  • Johnny
  • Registratie: December 2001
  • Laatst online: 17-09 16:59

Johnny

ondergewaardeerde internetguru

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//open bestand
$data='gastenboek.txt';
$afile = file($data);   

// maak een loop die het aantal regels achterstevoren doorloopt
for($num = count($afile) -1; $num >-1; $num--)
{   
//splits de regel op in verschillende variablen
    $bfile = explode("|",$afile[$num]);

//maak een leesbare datum
    $date = date("j F Y", $bfile[0]);

//laat het geheel zien
    echo "<div class=\"box\" title=\"".$date."\"><p>".$bfile[2]."</p></div>";
}


als je count($afile) vervangt met 3 laat hij alleen de laatste 3 zien.

[ Voor 14% gewijzigd door Johnny op 25-09-2003 00:18 ]

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


Verwijderd

Topicstarter
offtopic:
Thx man!
Ga t vanavond proberen, heel de dag saai college :(

Verwijderd

Topicstarter
:( ik kom er nog niet uit :(
ik heb t volgende, er gaat iets fout bij de datum heb ik t idee:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?

//open bestand 
$data = "berichten.txt";
$afile = file($data);     

// maak een loop die het aantal regels achterstevoren doorloopt 
for($num = count($afile) -1; $num >-1; $num--) 
{     
//splits de regel op in verschillende variablen 
    $bfile = explode("|",$afile[$num]); 

//maak een leesbare datum 
$dag = date(d);
$maand = date(m);
$jaar = date(Y);

$date = ("$dag/$maand/$jaar", $bfile[0]);

//laat het geheel zien 
    echo "<div class=\"box\" title=\"".$date."\"><p>".$bfile[2]."</p></div>"; 
}
?>


Verder: kan ik letterlijk $afile vervangen door bv 3?

  • Cavorka
  • Registratie: April 2003
  • Laatst online: 27-03-2018

Cavorka

Internet Entrepreneur

Wat trouwens als mensen een | in hun bericht plaatsen? Gaat het volgens mij mis...

Maar wat gaat er nu precies mis dan? Foutmeldingen please.

Je kan lijkt me ook het best gewoon een timestamp opslaan naar je text file en deze dan uitlezen > met date opmaken en printen. Dit doe ik ook in mijn forum. Of doe jij het ook? Ik begrijp je code ook niet echt... het datum gedeelte dan.

Bijvoorbeeld:
$date = date('d m Y', $timestamp[$num])

En nee je kan $afile niet vervangen door 3, je kan count($afile) vervangen door 3. :)

Dus het zou er zo uit kunnen zien, zou je een timestamp opslaan:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?

//open bestand 
$data = "berichten.txt" ;
$afile = file($data) ;      
$c_afile = count($afile) ;

// maak een loop die het aantal regels achterstevoren doorloopt 
for($num = count($afile) -1; $num >-1; $num--) 
{     
//splits de regel op in verschillende variablen (andere splitter hier!)
    $bfile = explode("<|>", $afile[$num]) ; 

$date = ("d/m/Y", $bfile[0]);

//laat het geheel zien 
    echo "<div class='box' title='". $date ."'><p>" . $bfile[2] . "</p></div>" ; 
}
?>


offtopic:
Beetje nitpicken, maar een count in de loop is echt killing voor de performence (*mance?).

[ Voor 103% gewijzigd door Cavorka op 25-09-2003 19:44 ]

the-blueprints.com - The largest free blueprint collection on the internet: 50000+ drawings.


Verwijderd

Topicstarter
eigenlijk gewoon een parse error:
Parse error: parse error, unexpected ',' in /home/xxxxx/www/xxxxxxxxxx/xxxxxx.php on line 18

  • Cavorka
  • Registratie: April 2003
  • Laatst online: 27-03-2018

Cavorka

Internet Entrepreneur

offtopic:
*Edit: Dom gezwets. Ik zoek verder.


Wat voor opmaak is je tijd eigenlijk? Save je deze als timestamp? Of al opgemaakt (reeds met date() aan de gang geweest?

Probeer dit eens op regel 18:

$date = ("d/m/Y", $bfile[0]) ;

Werkt dat wel?

[ Voor 196% gewijzigd door Cavorka op 25-09-2003 19:44 ]

the-blueprints.com - The largest free blueprint collection on the internet: 50000+ drawings.


  • ripperke
  • Registratie: Augustus 2003
  • Laatst online: 19-08 16:06

ripperke

w00t!

$dag = date(d);
$maand = date(m);
$jaar = date(Y);

$date = ("$dag/$maand/$jaar", $bfile[0]);


klopt al zeker niet hé, dan zou elke post de huidig datum krijgen :)

en op die error post je code eens met de php tags ervoor

If TCP/IP handshaking was less formal, perhaps SYN/ACK would be YO/WASSUP


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
goed, ik heb nu diverse dingen ideeen van jullie geprobeerd, maar helaas zonder resultaat. krijg nu bv weer een melding bij dat date-gedoe over een T-varibabele.
Daarnaast blijft blijf ik m'n parse error op regel 18... :(
Ter volledigheid zal ik ff heel de gastenboek code hier neer knallen, komt ie:

bestandje teken.php waarmee bezoekers hun berichtje kunnen plaatsen:
PHP:
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
<?

$date = date('d m Y', $timestamp[$num])

$data = "berichten.txt" ;

echo "
<form method='POST' action='gbook/verzenden.php'>
<input type='hidden' name='status' value='verzenden'>
Naam:<BR>
<input type='text' name='naam'>
<br>
<br>
E-mail:<BR>
<input type='text' name='mail'> <font size='2'></font>
<br>
<br>
Bericht:<BR>
<textarea rows='10' name='bericht' cols='48'></textarea>
<br>
<br>
<center><input type='submit' value='Plaats bericht' name='B1'></center>
" ;

?>


het bestand verzenden, controleert bericht en plaatst t in t gastenboek
PHP:
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
32
33
34
35
36
37
38
39
40
<?

$date = date('d m Y', $timestamp[$num])
$data = "berichten.txt";

echo"<br>";
//Controle of alles is ingevuld.
    $leeg = "";
    if ($naam == $leeg OR $bericht == $leeg)
    {
    echo "Je hebt je naam of bericht niet correct ingevuld.
              <br><br>Klik <a href='teken.php'>hier</a> om terug te gaan.";
}
//Einde van de controle
    else
{
  $bericht = nl2br($bericht);
        if ($mail == $leeg)
            {
            $invoeg = "Door: <i>$naam</i>
                                                op: <i>$datum</i><br><br>
                                                Bericht:<i><br>$bericht</i><br><br><hr><br>";
            }
        else
            {
            $invoeg = "Door: <i><a href='mailto:$mail'>$naam</a></i> op: <i>$datum</i>
<br><br>Bericht:<i><br>$bericht</i><br><br><hr><br>";
            }
$inhoud = file($data);
$file = fopen($data,"w");
fwrite ($file, "$invoeg");
fwrite ($file, join('', $inhoud));
fclose($file);

echo " Beste $naam je bericht is geplaatst. ";
}
?>


En dan nog de file welke de laatste 3 posts laat zien:
PHP:
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<? 

//open bestand 
$data = "berichten.txt" ; 
$afile = file($data) ;       
$c_afile = count($afile) ; 

// maak een loop die het aantal regels achterstevoren doorloopt 
for($num = count($afile) -1; $num >-1; $num--) 
{      
//splits de regel op in verschillende variablen (andere splitter hier!) 
    $bfile = explode("<|>", $afile[$num]) ; 

$date = ("d/m/Y", $bfile[0]) ; 
//laat het geheel zien 
    echo "<div class='box' title='". $date ."'><p>" . $bfile[2] . "</p></div>" ; 
} 
?> 

[ Voor 45% gewijzigd door Verwijderd op 26-09-2003 14:05 ]


Acties:
  • 0 Henk 'm!

  • Cavorka
  • Registratie: April 2003
  • Laatst online: 27-03-2018

Cavorka

Internet Entrepreneur

Ik begrijp er nog niet heel erg veel van, maar van wat ik kan zien sla je het gehele bericht op (inclusief door wie en wanneer), dus waarom ga je nog een keer de date proberen te bereken? En waar heb je die splitter voor nodig... van wat ik hier uit haal wordt er niets achter elkaar geplakt, en is dus elke regel een bericht en meer niet (ik mis de <|> splitters). Haal die hele regel gewoon eens weg (die datum regel).

the-blueprints.com - The largest free blueprint collection on the internet: 50000+ drawings.


  • Johnny
  • Registratie: December 2001
  • Laatst online: 17-09 16:59

Johnny

ondergewaardeerde internetguru

Je doet echt veel te ingewikkeld. Je moet niet de HTML code in het tekstbestand opslaan.

Zorg dat iedere entry op 1 regel staat, en dat de velden gescheiden zijn met een scheidingsteken.

Bij het weergeven van het gastenboek kun je de HTML weer toevoegen.

PHP:
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
32
33
34
35
36
37
38
39
40
<?

$date = date('d m Y', $timestamp[$num])
$data = "berichten.txt";

echo"<br>";
//Controle of alles is ingevuld.
    $leeg = "";
    if ($naam == $leeg OR $bericht == $leeg)
    {
    echo "Je hebt je naam of bericht niet correct ingevuld.
              <br><br>Klik <a href='teken.php'>hier</a> om terug te gaan.";
}
//Einde van de controle
    else
{

//filter de | uit de naam/email/bericht
$naam = str_replace("|", "&brvbar;", $naam);
$email = str_replace("|", "&brvbar;", $email);
$bericht = str_replace("|", "&brvbar;", $bericht);

//gebruik geen nl2br, deze zorgt dat er nog een \n achter de <br/> komt!
$bericht = str_replace("\n", "<br/>", $bericht);


//maak dr $invoeg variable, geschijden door |, met \n voor een nieuwe regel!
$invoeg = $naam."|".$email."|".$datum."|".$bericht"\n";

$inhoud = file($data);
$file = fopen($data,"w");
fwrite ($file, "$invoeg");
fclose($file);

echo " Beste "$naam.", je bericht is geplaatst.";
}
?>

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


Verwijderd

Topicstarter
uuh jaha.. het verhaal over de "|" is me nog niet geheel duidelijk. Dat datum probleempje begint te dagen... Nu krijg ik steeds te maken met:
Parse error: parse error, unexpected T_VARIABLE
Wat houdt in godsnaam een t-variable in???
In dit geval verwijst ie naar: line 4 - waar staat: $data = "berichten.txt";

Acties:
  • 0 Henk 'm!

  • Maxonic
  • Registratie: September 2000
  • Laatst online: 05-09 22:23
Misschien enigsinds offtopic maar als je een database wilt gebruiken maar je hebt geen beschikking tot een database dan kan je in de nieuwere PHP versies SQLlite gebruiken.
Dit houd las ik me niet vergis in dat je gewoon querys kan uitvoeren e.d. maar dat 'de database' als tekstbestand wordt opgeslagen.

Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
PHP:
1
$date = date('d m Y', $timestamp[$num])


moet zijn

PHP:
1
$date = date('d m Y', $timestamp[$num]) ;

Acties:
  • 0 Henk 'm!

Verwijderd

Maxonic schreef op 28 September 2003 @ 10:34:
Misschien enigsinds offtopic maar als je een database wilt gebruiken maar je hebt geen beschikking tot een database dan kan je in de nieuwere PHP versies SQLlite gebruiken.
Dit houd las ik me niet vergis in dat je gewoon querys kan uitvoeren e.d. maar dat 'de database' als tekstbestand wordt opgeslagen.
Of een xml-bestand gebruiken :*)

Acties:
  • 0 Henk 'm!

  • We Are Borg
  • Registratie: April 2000
  • Laatst online: 13:26

We Are Borg

Moderator Wonen & Mobiliteit / General Chat
Johnny schreef op 27 September 2003 @ 11:27:
PHP:
4
5
6
7
8
9
10
11
12
13
<?

//Controle of alles is ingevuld.
    $leeg = "";
    if ($naam == $leeg OR $bericht == $leeg)
    {
    echo "Je hebt je naam of bericht niet correct ingevuld.
              <br><br>Klik <a href='teken.php'>hier</a> om terug te gaan.";
}
?>
Er bestaat ook een functie om te checken of een string leeg is ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
t lijkt erop dat ik er nu uit ben gekomen...
Toch kom ik vaak foutmeldingen tegen zogename parse errors..
mijn inziens zijn dit vrij simpele foutmeldingen, is er nergens een lijst of zo met oplossingen voor dit soort errors?

[ Voor 82% gewijzigd door Verwijderd op 29-09-2003 11:57 ]


Acties:
  • 0 Henk 'm!

  • Bever
  • Registratie: Maart 2001
  • Laatst online: 11:35
als je ergens een probleem mee hebt mail ons dan of open desnoods een topic in Lieve Adjes

[ Voor 71% gewijzigd door curry684 op 29-09-2003 12:08 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Beetje jammer Bever!
niet iedereen is zo gevord als je denkt.
Ondanks dat het basiskennis is moet je toch af en toe een steuntje in de rug hebben. En als je eenmaal regelmatig een forum bezoekt is het mijn inziens logisch dat je daar dan ook automatisch terecht komt voor je probleempjes.
En dus niet bij een of ander simpel onbekend forum.

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 08:24

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 29 September 2003 @ 11:37:
t lijkt erop dat ik er nu uit ben gekomen...
Toch kom ik vaak foutmeldingen tegen zogename parse errors..
mijn inziens zijn dit vrij simpele foutmeldingen, is er nergens een lijst of zo met oplossingen voor dit soort errors?
Wat over het algemeen goed werkt is om deze foutmeldingen in Google te stoppen. Wel eventueel in combinatie met woorden als PHP en problem, help.

Anders krijg je namelijk pagina's die die error hadden ten tijde dat een google bot ze bezocht. Door de 'ruiswoorden' toe te voegen, krijg je betere resultaten.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • Bever
  • Registratie: Maart 2001
  • Laatst online: 11:35
check uw mail

[ Voor 94% gewijzigd door curry684 op 29-09-2003 12:42 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Bever schreef op 29 September 2003 @ 12:39:
<span style="color:blue">check uw mail</span>
nog geen mail binnen...

Acties:
  • 0 Henk 'm!

  • Bever
  • Registratie: Maart 2001
  • Laatst online: 11:35
meneer currie heeft mijn bericht gewijzigd, ik denk dat hij nu een mailtje aan het typen is voor mij.

tip! als er een foutmelding staat met regelnummer dan is het vaak de regel erboven waar het fout gaat. Hoe het komt weet ik niet maar dat is mijn ervaring.

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 08:24

gorgi_19

Kruimeltjes zijn weer op :9

Bever schreef op 29 September 2003 @ 12:53:
tip! als er een foutmelding staat met regelnummer dan is het vaak de regel erboven waar het fout gaat. Hoe het komt weet ik niet maar dat is mijn ervaring.
Niet altijd, vooral bij niet afgesloten haakjes of afsluitingstekens of iets in die trant wordt het vaak veroorzaakt.

En het zogenoemde defensief programmeren moet je ook wel een en ander kunnen voorkomen.

Digitaal onderwijsmateriaal, leermateriaal voor hbo

Pagina: 1