login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Probleem met Gastenboek

Offline Pixl - 08/06/2009 19:50 (laatste wijziging 08/06/2009 19:52)
Avatar van PixlNieuw lid Ik heb een probleempje met mijn gastenboek.. opzich werkt ie goed, maar.. nieuwe posts komen onderaan in plaats van bovenaan.. hier m'n scripts:

verwerk.php:
  1. <?php
  2. $Naam = $_POST[Naam];
  3. $Email = $_POST[Email];
  4. $url = $_POST[url];
  5. $Bericht = $_POST[bericht];
  6.  
  7. $data = "reacties.txt";
  8. $file = fopen($data, "a");
  9. $tijd = time();
  10. $datum = strftime("%d-%m-%y %H:%M", $tijd);
  11.  
  12.  
  13. fputs($file, "<h5>Geschreven door: <a href=\"mailto:$Email\">$Naam</a> - Tijd: <i>$datum</i></h5>
  14. <br><hr>
  15. <i>$Bericht</i>
  16. <br><br><hr><br>");
  17. fclose($file);
  18. ?>
  19.  
  20. <?php include("view.php"); ?>



view.php:


  1. <p align="center"><?php include("reacties.txt"); ?></p>
  2. <p align="center">
  3. <b><em>Plaats een reactie: </em></b>
  4. </p>
  5.  
  6. <form name="form1" method="post" action="verwerk.php">
  7. <p align="center">
  8. <em>Naam:</em>
  9. <input name="Naam" type="text" value"">
  10. </p>
  11. <p align="center">
  12. <em>E-mail (Niet verplicht):</em>
  13. <input name="Email" type="text" value="">
  14. </p>
  15. <p>
  16. <p align="center">
  17. <em>Bericht:</em>
  18. </p>
  19. <p align="center">
  20. <textarea name="bericht" rows="7" cols="45"></textarea>
  21. </p>
  22. <p align="center">
  23. <input type="submit" name="Submit" value="Verzenden">
  24. <input type="reset" name="Reset" value="Gegevens wissen" />
  25. </p>
  26. </form>

7 antwoorden

Gesponsorde links
Offline Wim - 08/06/2009 19:52 (laatste wijziging 08/06/2009 19:53)
Avatar van Wim Crew algemeen Dan moet je mode r+ ipv a gebruiken....

PHP.net: fopen

Waarom gebruik je trouwens geen database?
Offline Pixl - 08/06/2009 19:56
Avatar van Pixl Nieuw lid Met r+ werkt 't ook niet helemaal zoals het hoort, dan wordt gewoon de tekst van de vorige reactie vervangen in reacties.txt.

Ik gebruik geen database omdat ik nog niet zo thuis ben in het php gebeuren, en helemaal niet in de databases (A) ik wil hier mee beginnen 
Offline Koen - 08/06/2009 19:58
Avatar van Koen PHP expert PHP.net: file_get_contents & PHP.net: file_put_contents

Daarmee moet het lukken 
Offline Pixl - 08/06/2009 20:10 (laatste wijziging 11/06/2009 19:06)
Avatar van Pixl Nieuw lid iemand die nog een mogelijkheid weet?  
Offline henver - 11/06/2009 20:32
Avatar van henver HTML gevorderde Met de links die Koen gaf zou het toch moeten lukken denk ik 
Offline Pixl - 11/06/2009 22:43
Avatar van Pixl Nieuw lid Hmm, ik ben sinds 3 dagen bezig met php, ik zie nog niet echt in hoe dat zou moeten werken 
Offline Koen - 11/06/2009 23:23
Avatar van Koen PHP expert Als het zo zit... 

Ten eerste heb ik een opmerking over hoe je de POST-waarden uit je formulier aanroept. Jij doet namelijk dit:
  1. $Naam = $_POST[Naam];

In principe is er in deze context niets mis met deze schrijfwijze. Maar toch is het niet helemaal correct: PHP kent namelijk "constanten", deze kan je zien als variabelen die eens ze een waarde hebben gekregen, die waarde niet meer kan veranderd worden.
Nu, omdat je in je code géén aanhalingstekens (single quotes) hebt gebruikt rond "Naam", om aan te tonen dat het een string is, gaat PHP eerst kijken of er een constante "Naam" bestaat, indien deze niet bestaat gaat PHP het hier pas als een string interpreteren. Daarom: gebruik dus altijd quotes rond je strings! Je code wordt dan:
  1. $Naam = $_POST['Naam'];

Idem dito voor je andere POST waarden.

Vervolgens, de manier en de functie die jij gebruikt om een bestand te openen is verouderd. Indien er PHP5 draait op je server kan je genieten van de mogelijkheden van de kant en klare functies van PHP, namelijk file_get_contents() en file_put_contents(), die ik al eens eerder heb vermeld. Jouw probleem is dat de nieuwe berichten onderaan erbij komen, dit kunnen we makkelijk oplossen door eerst de inhoud van dat bestand op te halen met file_get_contents(), vervolgens voegen we deze inhoud toe aan de tekst die we uit het bericht-veld van je formulier hebben gehaald. Uiteindelijk zetten we dit geheel weer terug in je bestand met de functie file_put_contents();. Je script wordt dan:
  1. <?php
  2. $Naam = $_POST['Naam'];
  3. $Email = $_POST['Email'];
  4. $url = $_POST['url'];
  5. $Bericht = $_POST['bericht'];
  6.  
  7. $data = 'reacties.txt';
  8. $inhoudBestand = file_get_contents($data);
  9. $tijd = time();
  10. $datum = strftime('%d-%m-%y %H:%M', $tijd);
  11.  
  12.  
  13. file_put_contents($data, '<h5>Geschreven door: <a href="mailto:' . $Email . '">' . $Naam . '</a> - Tijd: <i>' . $datum . '</i></h5>
  14. <br><hr>
  15. <i>' . $Bericht . '</i>
  16. <br><br><hr><br>' . $inhoudBestand);
  17. ?>
  18.  
  19. <?php include('view.php'); ?>

Zoals je ziet heb ik ook een paar wijzigingen aangebracht in het gebruik van aanhalingstekens rond je strings. Ik gebruik altijd enkele aanhalingstekens ('), omdat je code hiermee gemakkelijker en sneller wordt geïnterpreteerd door de PHP parser omdat alles letterlijk wordt geïnterpreteerd (echo '$variabele'; zal $variabele printen, en niet de verwachtte waarde van die variabele). Om diezelfde reden heb ik ook je variabelen buiten de quotes gehaald, dit gebeurt op de volgende manier:
  1. echo '<a href="mailto:' . $Email . '">' . $Naam . '</a>';
Omwille van snelheid en overzichtelijkheid is dit een must 

Tenslotte heb ik nog een opmerking over het zomaar klakkeloos includen van een text bestandje in je pagina (<?php include("reacties.txt"); ?>). Zoals je code nu is, kan elke kwaadwillende PHP code in zijn bericht zetten en deze zal dan ook worden uitgevoerd, evenals HTML code. Om dit te voorkomen zou ik allereerst het bestand niet includen, maar de inhoud ervan ophalen met file_get_contents(), en daarna er bijvoorbeeld de functie htmlspecialchars() doorhalen, deze functie zorgt ervoor dat ingevoerde HTML code onschadelijk wordt gemaakt. (< wordt bijvoorbeeld &lt;)
Dus:
  1. <?php include("reacties.txt"); ?>
  2. // vervangen we door deze code:
  3. <?php echo htmlspecialchars(file_get_contents('reacties.txt')); ?>


Dit was het dan, ik zou zeggen lees mijn post eens rustig door en dan kom je er wel!

Veel succes 
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.23s