Petit bête PHP

Fermé
gmatg - 10 juin 2020 à 12:16
 gmatg - 10 juin 2020 à 12:38
Salut à tous,
Je reviens vers vous car vous m'aviez bine aider la dernière fois.
Aujourd'hui, je rencontre un dernier problème Quand je teste mon formulaire de contact sur Xampp, je rempli tous les champs et "j'envoi" mon formulaire. Et là, il me dit : "Vous devez d'abord envoyer et remplir le formulaire", qui est donc ; $message_erreur_formulaire
Que faut-il faire ? Merci beaucoup beaucoup de m'aider

<?php

$destinataire = '***@***';
 
$copie = 'oui';
 
$message_envoye = "Votre message nous est bien parvenu, l'équipe vous répondera le plus vite possible !";
$retour_accueil = "Pour revenir à <a href=\"Accueil.html\">l'accueil</a>";
$message_non_envoye = "L'envoi du mail a échoué, veuillez réessayer SVP.";
 

$message_erreur_formulaire = "Vous devez d'abord <a href=\"contact.html\">envoyer et remplir le formulaire</a>.";
$message_formulaire_invalide = "Vérifiez que tous les champs soient bien remplis et que l'email soit sans erreur.";


if (!isset($_POST['envoi']))
{

	echo '<p>'.$message_erreur_formulaire.'</p>'."\n";
}
else
{

	function Rec($text)
	{
		$text = htmlspecialchars(trim($text), ENT_QUOTES);
		if (1 === get_magic_quotes_gpc())
		{
			$text = stripslashes($text);
		}
 
		$text = nl2br($text);
		return $text;
	};

	function IsEmail($email)
	{
		$value = preg_match('/^(?:[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+\.)*[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+@(?:(?:(?:[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!\.)){0,61}[a-zA-Z0-9_-]?\.)+[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!$)){0,61}[a-zA-Z0-9_]?)|(?:\[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$/', $email);
		return (($value === 0) || ($value === false)) ? false : true;
	}
 
	$nom     = (isset($_POST['nom']))     ? Rec($_POST['nom'])     : '';
	$mail   = (isset($_POST['mail']))   ? Rec($_POST['mail'])   : '';
	$objet   = (isset($_POST['objet']))   ? Rec($_POST['objet'])   : '';
	$message = (isset($_POST['message'])) ? Rec($_POST['message']) : '';
 

	$mail = (IsEmail($mail)) ? $mail : '';
 
	if (($nom != '') && ($mail != '') && ($objet != '') && ($message != ''))
	{

		$headers  = 'MIME-Version: 1.0' . "\r\n";
		$headers .= 'From:'.$nom.' <'.$mail.'>' . "\r\n" .
				'Reply-To:'.$mail. "\r\n" .
				'Content-Type: text/plain; charset="utf-8"; DelSp="Yes"; format=flowed '."\r\n" .
				'Content-Disposition: inline'. "\r\n" .
				'Content-Transfer-Encoding: 7bit'." \r\n" .
				'X-Mailer:PHP/'.phpversion();
 

		if ($copie == 'oui')
		{
			$cible = $destinataire.';'.$mail;
		}
		else
		{
			$cible = $destinataire;
		};
 
		$caracteres_speciaux     = array(''', '’', '"', '<br>', '<br />', '<', '>', '&', '…',   '’', '‘');
		$caracteres_remplacement = array("'",      "'",        '"',      '',    '',       '<',    '>',    '&',     '...', '>>',      '<<'     );

		$objet = str_replace($caracteres_speciaux, $caracteres_remplacement, $objet);
 
		$message = str_replace($caracteres_speciaux, $caracteres_remplacement, $message);
 
		$num_emails = 0;
		$tmp = explode(';', $cible);
		foreach($tmp as $mail_destinataire)
		{
			if (mail($mail_destinataire, $objet, $message, $headers))
				$num_emails++;
		}
 
		if ((($copie == 'oui') && ($num_emails == 2)) || (($copie == 'non') && ($num_emails == 1)))
		{
			echo '<p>'.$message_envoye.'</p>';
			echo '<p>'.$retour_accueil.'</p>'."\n";
		}
		else
		{
			echo '<p>'.$message_non_envoye.'</p>';
		};
	}
	else
	{

		echo '<p>'.$message_formulaire_invalide.' <a href="contact.html">Retour au formulaire</a></p>'."\n";
	};
};
?>
A voir également:

2 réponses

jordane45 Messages postés 38288 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 15 novembre 2024 4 703
10 juin 2020 à 12:32
Bonjour,

Avant tout, il faut correctement écrire ton code...
Les fonctions ne se placent pas dans le IF .. mais en dehors ( au début du code par exemple )
Il faut également activer l'affichage des erreurs PHP ( ce qui aurait montrer une erreur à la ligne 71 )
De plus, la norme veut que les IF / ELSE .. s'écrivent de cette façon ( l'accoloade en bout de ligne )
if (condition ) {
  // si condition vraie
} else {
  // si condition fausse
} 

et même pour un if avec une seule ligne de code à exécuter... utiliser les accolades évite d'éventuelles futures erreurs.

Bref, ton code corrigé devrait ressembler à ça
<?php

// Affichage des erreurs PHP
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

// Fonctions
function Rec($text)
{
  $text = htmlspecialchars(trim($text), ENT_QUOTES);
  if (1 === get_magic_quotes_gpc()) {
    $text = stripslashes($text);
  }
  $text = nl2br($text);
  return $text;
};

function IsEmail($email)
{
  $value = preg_match('/^(?:[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+\.)*[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+@(?:(?:(?:[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!\.)){0,61}[a-zA-Z0-9_-]?\.)+[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!$)){0,61}[a-zA-Z0-9_]?)|(?:\[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$/', $email);
  return (($value === 0) || ($value === false)) ? false : true;
}

$destinataire = '***@***';
 
$copie = 'oui';
 
$message_envoye = "Votre message nous est bien parvenu, l'équipe vous répondera le plus vite possible !";
$retour_accueil = "Pour revenir à <a href=\"Accueil.html\">l'accueil</a>";
$message_non_envoye = "L'envoi du mail a échoué, veuillez réessayer SVP.";
 

$message_erreur_formulaire = "Vous devez d'abord <a href=\"contact.html\">envoyer et remplir le formulaire</a>.";
$message_formulaire_invalide = "Vérifiez que tous les champs soient bien remplis et que l'email soit sans erreur.";


if (!isset($_POST['envoi'])) {
	echo '<p>'.$message_erreur_formulaire.'</p>'."\n"; // si tu arrives là... c'est que la variable POST envoi n'existe pas ! // 
}else {
 
	$nom     = (isset($_POST['nom']))     ? Rec($_POST['nom'])     : '';
	$mail   = (isset($_POST['mail']))   ? Rec($_POST['mail'])   : '';
	$objet   = (isset($_POST['objet']))   ? Rec($_POST['objet'])   : '';
	$message = (isset($_POST['message'])) ? Rec($_POST['message']) : '';
 

	$mail = (IsEmail($mail)) ? $mail : '';
 
	if (($nom != '') && ($mail != '') && ($objet != '') && ($message != ''))
	{

		$headers  = 'MIME-Version: 1.0' . "\r\n";
		$headers .= 'From:'.$nom.' <'.$mail.'>' . "\r\n" .
				'Reply-To:'.$mail. "\r\n" .
				'Content-Type: text/plain; charset="utf-8"; DelSp="Yes"; format=flowed '."\r\n" .
				'Content-Disposition: inline'. "\r\n" .
				'Content-Transfer-Encoding: 7bit'." \r\n" .
				'X-Mailer:PHP/'.phpversion();
 
		if ($copie == 'oui'){
			$cible = $destinataire.';'.$mail;
		}	else{
			$cible = $destinataire;
		}
 
		$caracteres_speciaux     = array("'", "’", '"', '<br>', '<br />', '<', '>', '&','…',"’", "‘");
		$caracteres_remplacement = array("'","'",'"','','', '<', '>','&','...', '>>','<<');

		$objet = str_replace($caracteres_speciaux, $caracteres_remplacement, $objet);
 
		$message = str_replace($caracteres_speciaux, $caracteres_remplacement, $message);
 
		$num_emails = 0;
		$tmp = explode(';', $cible);
		foreach($tmp as $mail_destinataire)
		{
			if (mail($mail_destinataire, $objet, $message, $headers)) {
				$num_emails++;
      }
		}
 
		if ((($copie == 'oui') && ($num_emails == 2)) || (($copie == 'non') && ($num_emails == 1))){
			echo '<p>'.$message_envoye.'</p>';
			echo '<p>'.$retour_accueil.'</p>'."\n";
		}	else {
			echo '<p>'.$message_non_envoye.'</p>';
		}
	}	else	{
		echo '<p>'.$message_formulaire_invalide.' <a href="contact.html">Retour au formulaire</a></p>'."\n";
	};
};
?>


Et pour en revenir à ton message d'erreur... et bien c'est qu'il entre dans le IF ....
Donc, ta variable $_POST['envoi'] n'existe pas.
L'as tu bien mis dans ton formulaire ?
As tu bien précisé la méthode POST ?

Il serait bien de nous montrer le code de ton formulaire.


0
Salut,
Je te remercie tout d'abord de m'avoir corriger mon code, j'aurai pu la faire mais tu me l'a fait, merci beacoup pour ca
Concernant l'erreur, tu as raison j'ai oublié d'indiquer la method "get" ou "POST", ici se sera POST. Merci à toi

Merci à vous de m'aider
0