Tips till gästboken: Undvika notice, hantera felmeddelanden, lägga in värden i formulär och lite annat

Här är ett exempel med några tips:

<?php
 
// Ha gärna logiken längst upp och utskrifterna längst ner.
 
// Skapar en tom array för felmeddelanden.
$errors = []; 
 
// Skapar en tom sträng för meddelanden för att inte riskera att få 
// notice om att variabeln inte finns när meddelandet ska skrivas ut.
$message = '';  
 
// isset() kollar om $_POST['namn'] finns för att inte få
// felmeddelande och utskrift när sidan laddas första gången.
if (isset($_POST['namn'], $_POST['alder'])) {
 
  $ok = true;  // Variabeln håller reda på om något är fel.
 
  if(empty($_POST['namn'])){ // empty() kollar om inget är inmatat.
    $errors[] = 'Du har inte angett namn.';  // Lägger till ett felmeddelande.
    $ok = false;  // Nu har ett fel hittats.
  }
 
  if($_POST['namn'] == 'Daniel'){
    $errors[] = 'Du får inte ange detta namn.'; // Lägger till ett felmeddelande.
    $ok = false;  // Nu har ett fel hittats.
  }
 
  if(empty($_POST['alder'])){ // empty() kollar om inget är inmatat.
    $errors[] = 'Du har inte angett ålder.'; // Lägger till ett felmeddelande.
    $ok = false;  // Nu har ett fel hittats.
  } else {
    if(!is_numeric($_POST['alder'])){ // Kollar om inmatningen INTE består av siffror.
      $errors[] = 'Angiven ålder måste bestå av siffror.'; // Lägger till ett felmeddelande.
      $ok = false;  // Nu har ett fel hittats.
    }
  }
 
  if ($ok){  // Utförs om inga fel hittats. Samma som att skriva $ok == true
    $message = 'Namnet är ' . $_POST['namn'] . '<br>';
    if($_POST['namn'] == $_POST['namn2']){
      $message = $message.'SAMMA IGEN <br>';
    }
  }
 
} else {
 
  // $_POST['namn'] skapas om det inte finns för att undvika 
  // fel i formuläret där det används.
  $_POST['namn'] = ''; 
}
 
include 'head.php';
echo $message . '<br>'; // Skriver ut eventuellt meddelande eller tom sträng.
 
// Skriver ut felmeddelanden. 
$i = 0;
while ($i < count($errors)){
  echo '<div class="error">' . $errors[$i] . '</div>';
  $i++;
}
/*
.error {
  border: black 1px solid;
  color: red;
  padding: 10px;
  margin: 10px 0px;
}
*/
 
// Skickar med ett "gömt" värde i formuläret för att kunna jämföra
// med nästa inmatning som görs.
echo '
<form method="post">
    <input type="text" placeholder="Namn" name="namn"><br>
    <input type="text" placeholder="Ålder" name="alder"><br>
    <input type="hidden" name="namn2" value="' . $_POST['namn'] . '">
    <input type="submit" name="submit" value="Skicka">
</form>
';  // Hela formuläret ligger i en "php-rad".
 
include 'foot.php';

Alternativt kan man hantera formuläret så här där php startas och stängs mitt i HTML-koden:

<?php
 
// Alla kontroller här som ovan.
 
include('head.php');
 
// Alla utskrifter här som ovan.
 
?>
 
<form method="post">
   <input type="text" placeholder="Namn" name="namn"><br>
   <input type="text" placeholder="Ålder" name="alder"><br>
   <input type="hidden" name="namn2" value="<?php echo $_POST['namn'] ?>">
   <input type="submit" name="submit" value="Skicka">
</form>
 
<?php
include('foot.php');

Kolla upp strängfunktionerna för att hantera html-taggar i saker som matas in i formulär.