Jelles Jelles - 13 days ago 5
PHP Question

PHP Enter In textbox

I have a problem I am gonna try my best to explain it. So I have a code where you have 2 links the first link is where you can put your name address and email in a textbox and you can leave a message. The second link will recover this information into a nice page but after 6 lines the next page will generate so if you put more than 1 line of words in the message box it will put everything into a mess it is really hard to explain hope this is enough information. If there is anything you don't understand about my question let me know thanks for the help. There are 4 codes.
here are all the codes:

First file called "opdracht32.php":

<!DOCTYPE html>
<html lang="nl">
<head>
<meta charset="utf-8">
<title>Gastenboek</title>
</head>
<body>
<h2>Gastenboek met PHP</h2>
<hr>
<?php echo date("d-m-Y, G:i");?>
<hr>
<br>
Wat wil je gaan doen?
<ul>
<li><a href="gastenboekschrijven.php">
Schrijf in het gastenboek</a></li>
<br>
<li><a href="gastenboeklezen.php">
Lees het gastenboek</a></li>
</ul>
</body>
</html>


Second file called "gastenboekschrijven.php":

<!DOCTYPE html>
<html lang="nl">
<head>
<meta charset="utf-8">
<title>In het gastenboek schrijven</title>
</head>
<body>
<form action="opslaan.php" method="post">
<p>
De gegevens die u via het volgende
formulier invult, worden op het
gastenboek geplaatst en zullen voor
iedereen zichtbaar zijn.
</p>
<p>
Naam: <br>
<input name="naam" type="text" size="40" tabindex="1">
</p>
<p>
E-mail: (optioneel)<br>
<input name="email" type="text" size="40" tabindex="2">
</p>
<p>
Woonplaats: (optioneel)<br>
<input name="woonplaats" type="text" size="40" tabindex="3">
</p>
<p>
Uw bericht: <br>
<textarea name="bericht" rows="8" cols="40" tabindex="4">
</textarea>
</p>
<p>
<input type="submit" name="submit" value="Verstuur" title="Verstuur dit formulier" tabindex="5">
</p>
</form>
</body>
</html>


Third file called "gastenboeklezen.php":

<!DOCTYPE html>
<html lang="nl">
<head>
<meta charset="utf-8">
<title>Het gastenboek lezen</title>
</head>
<body>
<?php
$bestandsnaam = "gastenboek.txt";
// aantal regels per bijdrage om in te lezen
// elke bijdrage bestaat uit 5 regels
$aantal_regels = 6;
// teller om bij te houden hoeveel regels
// zijn gelezen
$teller = 0;
// Aantal bijdragen wordt bijgehouden.
$aantal_bijdragen = 0;
// gastenboek openen om te lezen
if (file_exists($bestandsnaam)){
$fp = fopen($bestandsnaam, "r");
}
else{
echo "<h2>Het gastenboek is nog leeg!</h2>
<a href= 'gastenboekschrijven.php'>
Wees de eerste die erin schrijft!</a> ";
exit;
}
while (!feof($fp)){
$regel = fgets($fp);
if (!feof($fp)){
if ($teller % $aantal_regels == 0){
// kop afdrukken
$aantal_bijdragen++;
// echo "<hr>";

echo "<h3>Bijdrage: $aantal_bijdragen</h3>";

}
}
// regel afdrukken
echo "$regel <br>";
// echo "<hr>";
$teller++;

}

echo "<a href='opdracht32.php'>Terug naar de
homepage</a>";
?>
</body>
</html>


The last file called "opslaan.php":

<?php
$bestandsnaam = "gastenboek.txt";
$datum = date("d-m-Y, G:i");
// gastenboek openen of maken
if (!$fp = fopen($bestandsnaam, "a+")){
echo "<h2>Het lukt niet om het gastenboek te openen</h2>";
exit;
}
// het wegschrijven van de gegevens
fputs($fp, "Datum: ".$datum);
fputs($fp, "\r\n");
fputs($fp, "Naam: ".$_POST["naam"]);
fputs($fp, "\r\n");
fputs($fp, "Email: ".$_POST["email"]);
fputs($fp, "\r\n");
fputs($fp, "Woonplaats: ".$_POST["woonplaats"]);
fputs($fp, "\r\n");
fputs($fp, "Bericht: ".$_POST["bericht"]);
fputs($fp, "\r\n"."\r\n");
fclose($fp);
echo "<h2>Klaar</h2>";
echo "<p>De bijdrage is opgeslagen</p>";
echo "<a href = 'opdracht32.php'>Terug naar het
beginscherm</a>";
?>

Answer

The problem is that you restrict your self to a fixed number of lines for each comment, so when a comment exceed the maximum number of lines, the code will split it as more than one comment.

I prefer to use database to store the comments, but if you need to use files, here is my approach.

  1. Before save comment to the file append a special token to define the comment like [start-of-comment]
  2. When display the comments, use that token to split each comment regardless of number of lines.

The comments in file will look like:

[start-of-comment]
Datum: 23-11-2016, 14:23
Naam: name
Email: email
Woonplaats: ***
Bericht:      -***-*/*-/-* 


[start-of-comment]
Datum: 23-11-2016, 14:23
Naam: fgh
Email: fghf
Woonplaats: dfgh
Bericht:     dfhfghgfh  

To test it, i made changes in the following files: opslaan.php and gastenboeklezen.php replace them with your files and clear gastenboek.txt file and try it

opslaan.php

<?php
$bestandsnaam = "gastenboek.txt";
$datum = date("d-m-Y, G:i");
// gastenboek openen of maken
if (!$fp = fopen($bestandsnaam, "a+")){
echo "<h2>Het lukt niet om het gastenboek te openen</h2>";
exit;
}
// het wegschrijven van de gegevens
fputs($fp, "[start-of-comment]\r\n");
fputs($fp, "Datum: ".$datum);
fputs($fp, "\r\n");
fputs($fp, "Naam: ".$_POST["naam"]);
fputs($fp, "\r\n");
fputs($fp, "Email: ".$_POST["email"]);
fputs($fp, "\r\n");
fputs($fp, "Woonplaats: ".$_POST["woonplaats"]);
fputs($fp, "\r\n");
fputs($fp, "Bericht: ".$_POST["bericht"]);
fputs($fp, "\r\n"."\r\n");

fclose($fp);
echo "<h2>Klaar</h2>";
echo "<p>De bijdrage is opgeslagen</p>";
echo "<a href = 'opdracht32.php'>Terug naar het
beginscherm</a>";
?>

gastenboeklezen.php

<!DOCTYPE html>
<html lang="nl">
    <head>
        <meta charset="utf-8">
        <title>Het gastenboek lezen</title>
    </head>
    <body>
        <?php
            $bestandsnaam = "gastenboek.txt";
            // aantal regels per bijdrage om in te lezen
            // elke bijdrage bestaat uit 5 regels
            $aantal_regels = 6;
            // teller om bij te houden hoeveel regels
            // zijn gelezen
            $teller = 0;
            // Aantal bijdragen wordt bijgehouden.
            $aantal_bijdragen = 0;
            // gastenboek openen om te lezen
            if (file_exists($bestandsnaam)){
            $fp = fopen($bestandsnaam, "r");
            }
            else{
            echo "<h2>Het gastenboek is nog leeg!</h2>
            <a href= 'gastenboekschrijven.php'>
            Wees de eerste die erin schrijft!</a> ";
            exit;
            }
            while (!feof($fp)){
            $regel = fgets($fp);
            if (!feof($fp)){
                if($regel !== "[start-of-comment]\r\n"){
                    echo "$regel <br>";
                }else{
                    $aantal_bijdragen++;
                    echo "<h3>Bijdrage: $aantal_bijdragen</h3>";

                }
            }

            $teller++;

            }

            echo "<a href='opdracht32.php'>Terug naar de
            homepage</a>";
        ?>
    </body>
</html>