Skip to content
Advertisement

My php Form doesn’t add messages to PhpMyAdmin

So I’ve updated the code below but it still doesn’t work and I don’t understand why… The messages doesn’t appear in my database in PhpMyAdmin and I don’t see the error messages I’ve put when for example a entry in my form is empty.. Thank you in advance for helping me…………………………………………………………………………………………………………………………………………………………………..

<?php

$pdo = new PDO(
    'mysql:host=localhost;dbname=portfolio', 
    'root', 
    '',
    array(
        PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING, 
        PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8' 
    )
);

$message = '';

if (!empty($_POST))
{
   //Contrôle des données :
   if (!isset($_POST['nom']) || strlen($_POST['nom']) < 3 || strlen($_POST['nom']) > 50)
   {
      $message .= '<div>Le champ "nom" doit comporter entre 3 et 20 caractères.</div>';
   }

   if (!isset($_POST['prenom']) || strlen($_POST['prenom']) < 3 || strlen($_POST['prenom']) > 50)
   {
      $message .= '<div>Le champ "prénom" doit comporter entre 2 et 20 caractères.</div>';
   }

   if (!isset($_POST['email']) || strlen($_POST['email'] > 50) || !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) 
    {
        $message .= '<div class="alert alert-danger">L'email n'est pas valide</div>'; 
    }

   if(!isset($_POST) || !preg_match('#^[0-9]{10}$#', $_POST['telephone']) )
    {
        $message .= '<div class="alert alert-danger">Le champ "téléphone" doit comporter 10 chiffres</div>';
    }

    if (!isset($_POST['sujet']) || strlen($_POST['sujet']) < 3 || strlen($_POST['sujet']) > 100)
    {
       $message .= '<div>Le champ "sujet" doit comporter entre 2 et 20 caractères.</div>';
    }

    if(!isset($_POST['message']) || strlen($_POST['message']) < 3 || strlen($_POST['message']) > 500 )
    {
        $message .= '<div class="alert alert-danger">Le message est trop long !</div>';
    }

    if(empty($message))
    {
        foreach ($_POST as $indice => $valeur) {
            $_POST[$indice] = htmlspecialchars($valeur, ENT_QUOTES);  
        }
        
        $resultat = $pdo->prepare("INSERT INTO message(nom, prenom, email, telephone, sujet, message) VALUES(:nom, :prenom, :email, :telephone, :sujet, :message)");
        
        $succes = $resultat->execute(array(
            ':nom' => $_POST['nom'],
            ':prenom' => $_POST['prenom'],
            ':email' => $_POST['email'],
            ':telephone' => $_POST['telephone'],
            ':sujet' => $_POST['sujet'], 
            ':message' => $_POST['message']
        ));

        if ($succes)
        {
            $message .= '<div>Le message a bien été envoyé !</div>';
        }
        else 
        {
            $message .= '<div>Une erreur est survenue...</div>';
        }
    
    }// if (empty($message))

}//if (!empty($_POST))

<form action="" method="post" class="container form-container">
    <div class="row justify-content-center">
        <input id="nom" name="nom" class="form-control" type="text" value="<?= $_POST['nom'] ?? '';?>" placeholder="Nom">
        <input id="prenom" name="prenom" class="form-control" type="text" value="<?= $_POST['prenom'] ?? '';?>" placeholder="Prénom">
        <input id="email" name= "email" class="form-control" type="text" value="<?= $_POST['email'] ?? '';?>"placeholder="Email">
        <input id="telephone" name="telephone" class="form-control" type="text" value="<?= $_POST['telephone'] ?? '';?>"placeholder="Téléphone">
        <input id="sujet" name="sujet" class="form-control" type="text" value="<?= $_POST['sujet'] ?? '';?>"placeholder="Sujet">
        <textarea id="message"  name="message" class="form-control" cols="30" rows="10" value=""placeholder="Votre message"><?= $_POST['message'] ?? '';?></textarea>
        <input class="btn btn-primary" type="submit" value="Envoyer">
    </div>
</form>

Advertisement

Answer

The name attributes are missing in your form – so nothing gests postet.

It should be:

**UPDATED 4.1.2020 19:03 CET textarea was wrong, sujet vs subject! **

<form action="" method="post" class="container form-container">
<div class="row justify-content-center">
    <input id="nom" name="nom" class="form-control" type="text" value="<?= $_POST['nom'] ?? '';?>" placeholder="Nom">
    <input id="prenom" name="prenom" class="form-control" type="text" value="<?= $_POST['prenom'] ?? '';?>" placeholder="Prénom">
    <input id="email" name= "email" class="form-control" type="text" value="<?= $_POST['email'] ?? '';?>"placeholder="Email">
    <input id="telephone" name="telephone" class="form-control" type="text" value="<?= $_POST['telephone'] ?? '';?>"placeholder="Téléphone">   
    <input id="sujet" name="sujet" class="form-control" type="text" value="<?= $_POST['sujet'] ?? '';?>"placeholder="Sujet">     
    <textarea id="message"  name="message" class="form-control" cols="30" rows="10" value=""placeholder="Votre message"><?= $_POST['message'] ?? '';?></textarea>
    <input class="btn btn-primary" type="submit" value="Envoyer">
</div>

Additionally this is wrong

setting a variable first then asking for its content is not very useful 😉 additionally this variable IS NOT SET ANYWHERE ELSE?!?

 $succes = ''; //   delete this line and set the variable above in the script 
     if ($succes) 
     {
     $message .= '<div>Le message a bien été envoyé !</div>';
    }
    else 
  {
  $message .= '<div>Une erreur est survenue...</div>';
 }

so it should be you have to assign a value to succes – for example if you want to check the insert:

    $succes= $resultat->execute(array(
        ':nom' => $_POST['nom'],
        ':prenom' => $_POST['prenom'],
        ':email' => $_POST['email'],
        ':telephone' => $_POST['telephone'],
        ':sujet' => $_POST['sujet'], 
        ':message' => $_POST['message']
    ));



    //$succes = '';   // NO!  
    //do not  just **write $var='';** when you get a variable is undefined error
    if ($succes) 
    {
        $message .= '<div>Le message a bien été envoyé !</div>';
    }
    else 
    {
        $message .= '<div>Une erreur est survenue...</div>';
    }

I also think that the last if condition is wrong and should be like this:
It cannot be EMPTY AND larger than 500 chars 😉 and the [‘message’] was missing in the first condition

if(empty($_POST['message']) || strlen($_POST['message']) < 3 || strlen($_POST['message']) > 500 )
    {
        $message .= '<div class="alert alert-danger">Le message est trop long !</div>';
    }

############################################################################### FINAL UPATE: here is the complete fixed code with some debug additions

<?php


$pdo = new PDO(
    'mysql:host=localhost;dbname=portfolio', 
    'root', 
    '',
    array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8' 
    )
);

$message = '';

if (!empty($_POST))
{
    
   //Contrôle des données :
   if (!isset($_POST['nom']) || strlen($_POST['nom']) < 3 || strlen($_POST['nom']) > 50)
   {
      $message .= '<div>Le champ "nom" doit comporter entre 3 et 20 caractères.</div>';
   }

   if (!isset($_POST['prenom']) || strlen($_POST['prenom']) < 3 || strlen($_POST['prenom']) > 50)
   {
      $message .= '<div>Le champ "prénom" doit comporter entre 2 et 20 caractères.</div>';
   }

   if (!isset($_POST['email']) || strlen($_POST['email'] > 50) || !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) 
    {
        $message .= '<div class="alert alert-danger">L'email n'est pas valide</div>'; 
    }

   if(!isset($_POST) || !preg_match('#^[0-9]{10}$#', $_POST['telephone']) )
    {
        $message .= '<div class="alert alert-danger">Le champ "téléphone" doit comporter 10 chiffres</div>';
    }

    if (!isset($_POST['sujet']) || strlen($_POST['sujet']) < 3 || strlen($_POST['sujet']) > 100)
    {
       $message .= '<div>Le champ "sujet" doit comporter entre 2 et 20 caractères.</div>';
    }

    if(!isset($_POST['message']) || strlen($_POST['message']) < 3 || strlen($_POST['message']) > 500 )
    {
        $message .= '<div class="alert alert-danger">Le message est trop long !</div>';
    }

    
    if(empty($message))
    { //echo"<br>message empty<br>";
     
        foreach ($_POST as $indice => $valeur) {
            $_POST[$indice] = htmlspecialchars($valeur, ENT_QUOTES);  
        }
        
        $resultat = $pdo->prepare("INSERT INTO messages(nom, prenom, email, telephone, sujet, message) VALUES(:nom, :prenom, :email, :telephone, :sujet, :message)");
        
        
        if (!$resultat)
        { $message .= var_dump($resultat->errorInfo());}
     else{ $message .= "PDO prepare sucessful";}
        
     //var_dump($_POST);
              
        $succes = $resultat->execute(array(
            ':nom' => $_POST['nom'],
            ':prenom' => $_POST['prenom'],
            ':email' => $_POST['email'],
            ':telephone' => $_POST['telephone'],
            ':sujet' => $_POST['sujet'], 
            ':message' => $_POST['message']
        ));
        
        

        
     
        //changed for debug 
        if ($succes)
        {
        $message .='<div>Le message a bien été envoyé !</div>';
        $message .= "PDO execute sucessful<br>";}
        
        else 
        {
        $message .= '<div>Une erreur est survenue...</div>';
        $message .= var_dump($resultat->errorInfo()); //for debug only 
        }
        
     
    echo "MESSAGE saved!<br>". $message;
    }
    else     
    { echo "ERROR: ". $message;
    }
}


if (empty($_POST))
{
?>
<form action="" method="post" class="container form-container">
    <div class="row justify-content-center">
        <input id="nom" name="nom" class="form-control" type="text" value="<?php echo $_POST['nom'] ?? '';?>" placeholder="Nom">
        <input id="prenom" name="prenom" class="form-control" type="text" value="<?php echo $_POST['prenom'] ?? '';?>" placeholder="Prénom">
        <input id="email" name="email" class="form-control" type="text" value="<?php echo $_POST['email'] ?? '';?>"placeholder="Email">
        <input id="telephone" name="telephone" class="form-control" type="text" value="<?php echo $_POST['telephone'] ?? '';?>"placeholder="Téléphone">
        <input id="sujet" name="sujet" class="form-control" type="text" value="<?php echo $_POST['sujet'] ?? '';?>" placeholder="Sujet">
        <textarea id="message" name="message" class="form-control" cols="30" rows="10" value=""placeholder="Votre message"><?php echo $_POST['message'] ?? '';?></textarea>
        <input class="btn btn-primary" type="submit" value="Envoyer">
    </div>
</form>
<?php } ?>
User contributions licensed under: CC BY-SA
10 People found this is helpful
Advertisement