Bonjour,
Voila je rencontre un petit problème avec mon code.
Ce que je fais
J'ai créé un formulaire de contact, qui enregistre les messages envoyés dans une table sur phpmyadmin.
Le code du formulaire :
<div class="row" id="Contact">
<div class="container">
<h2 class="center">Contact :</h2>
<?php
if(isset($_POST['submit'])){
$name = htmlspecialchars(trim($_POST['name']));
$email = htmlspecialchars(trim($_POST['email']));
$email_again = htmlspecialchars(trim($_POST['email_again']));
$object = htmlspecialchars(trim($_POST['object']));
$message = htmlspecialchars(trim($_POST['message']));
$errors = [];
$success = [];
if(empty($name) || empty($email) || empty($object) || empty($message)){
$errors['empty'] = "Veuillez remplir tous les champs.";
}else{
if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
$errors['email'] = "L'adresse email n'est pas valide.";
}
}
if($email != $email_again){
$errors['different'] = "Les adresses email ne correspondent pas.";
}
if(!empty($errors)){
?>
<div class="card red">
<div class="card-content white-text">
<?php
foreach($errors as $error){
echo $error."<br/>";
}
?>
</div>
</div>
<?php
}else{
message($name,$email,$object,$message);
?>
<div class="card green">
<div class="card-content white-text">
<p>Votre message a bien été envoyé, nous vous répondrons d'ici 48h.</p>
</div>
</div>
<?php
}
}
?>
<form method="post">
<div class="row">
<div class="input-field col s12">
<input type="text" name="name" id="name"/>
<label for="name">Nom</label>
</div>
<div class="input-field col s12 m6">
<input type="email" name="email" id="email"/>
<label for="email">Adresse email</label>
</div>
<div class="input-field col s12 m6">
<input type="email" name="email_again" id="email_again"/>
<label for="email_again">Répéter l'adresse email</label>
</div>
<div class="input-field col s12">
<input type="text" name="object" id="object"/>
<label for="object">Objet</label>
</div>
<div class="input-field col s12">
<textarea name="message" id="message" class="materialize-textarea"></textarea>
<label for="message">Message</label>
</div>
<div class="col s12">
<button type="submit" name="submit" class="btn waves-effect">
Envoyer
</button>
</div>
</div>
</form>
</div>
</div>
Code regroupant la fonction nécessaire au fonctionnement du formulaire :
<?php
function message($name,$email,$message){
global $db;
$object = htmlspecialchars(trim($_POST['object']));
$message = htmlspecialchars(trim($_POST['message']));
$c = array(
'name' => $name,
'email' => $email,
'object' => $object,
'message' => $message,
'message_id' => isset($_GET['id']) ? $_GET['id'] : ''
);
$sql = "INSERT INTO messages(name,email,object,message,message_id) VALUES(:name, :email, :object, :message, :message_id)";
$req = $db->prepare($sql);
$req->execute($c);
$subject = 'Nouveau message de "'.$name.'" ';
$message_user = '
<html lang="en" style="font-family: sans-serif;">
<head>
<meta charset="UTF-8">
</head>
<body>
Vous avez un nouveau message de "'.$name.'"</a>:
<br/><br/>Objet: '.$object.'
<br/><br/>Message: '.$message.'
<br/><br/>Si vous souhaitez répondre à ce message de "'.$name.'", répondez à '.$email.'.
</body>
</html>
';
$header = "MIME-Version: 1.0\r\n";
$header .= "Content-type: text/html; charset=UTF-8\r\n";
$header .= 'From: no_reply@test.fr ' . "\r\n" . 'Reply-To: '.$email.' ' . "\r\n" . 'X-Mailer: PHP/' . phpversion();
mail('test@test.fr',$subject,$message_user,$header);
}
Table sur PhpMyAdmin :
https://image.noelshack.com/fichiers/2017/46/2/1510682724-phpmyadmin-bug-message-id.png
Ce que j'obtiens
Avec le code que j'ai fait au dessus, je reçois bien le mail, mais la table dans phpmyadmin ne se rempli pas même si un message est envoyé, et j'obtiens cette avertissement que je souhaiterais régler sur le site :
Warning: PDOStatement::execute(): SQLSTATE[HY000]: General error: 1364 Field 'message_id' doesn't have a default value in C:\wamp64\www\Test\functions\home.func.php on line 19
Ce que je veux
Je voudrais régler l'avertissement, et que la table sur phpmyadmin se remplisse à chaque envoi d'un message, mais je n'y arrive pas :/ Qui peut m'aider à comprendre et à régler l'erreur ? :)