8768 sujets

Développement web côté serveur, CMS

Pages :
Bonjour,
depuis peu, mon formulaire de contact affiche un message d'erreur après avoir cliqué sur "envoi".
IONOS m'a parlé il y a quelques semaines d'un "nouveau" PHP. Que dois-je faire ? (je ne connais pas le PHP).
Merci énormement pour votre aide.
P. upload/1729692441-48192-capturedaeacran2024-10-23aa08.png
Salut salut, on manque cruellement de contexte pour pouvoir t'aider.


IONOS a probablement mis à jour la version de PHP sur ton serveur. Va dans ton panneau de contrôle IONOS et cherche la section qui indique la version PHP active (souvent sous "Sites Web" ou "PHP settings"). Note bien la version, car ça peut être utile pour la suite.

Pour voir ce qui ne va pas exactement, tu peux activer l’affichage des erreurs sur ta page de formulaire. Ajoute ces lignes au début du fichier PHP qui gère ton formulaire :
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);


Si le problème vient d’une incompatibilité avec la nouvelle version de PHP (comme PHP 8.x), il peut y avoir des fonctions obsolètes ou des changements dans la façon dont PHP traite certaines opérations. Si tu me montres ton code, on pourra te guider pour le mettre à jour.
Salut Jencal !
Rapide et sympa Smiley cligne
Voici le code
<?php
// ---------------------------------
// ENVOI du FORMULAIRE - ajax
// ---------------------------------
if( isset($_POST['first_name'], $_POST['last_name'], $_POST['email'], $_POST['comments']) )
{
	// -----------------
	// EDIT THE 2 LINES BELOW AS REQUIRED
	$email_to 			= "dm15517@gmail.com";		// receiver email
	$email_subject 		= "New Message Received";
	// -----------------
	// fonctions utiles
	if( !function_exists('show_msg_error') )
	{
		function show_msg_error($error)
		{
			// your error code can go here
			echo "<div style=\"margin:20px 0;padding:20px;background:#fff;color:red;border:1px solid red;border-radius:3px;\">";
			echo "<p>Sorry, but there were error(s) found:</p>";
			echo "<p>".$error."</p>";
			echo "<p>Please correct them and try again</p>";
			echo "</div>";
			exit;
		}
	}
	// ---------
	if( !function_exists('clean_string') )
	{
		function clean_string($string)
		{
			$bad = array("content-type","bcc:","to:","cc:","href");
			return str_replace($bad,"",$string);
		}
	}
	// -----------------
	// Récupération des champs du formulaire 
	$first_name			= ( !empty($_POST['first_name']) ) ? 	$_POST['first_name'] 	: ''; 	// required	
	$last_name			= ( !empty($_POST['last_name']) ) ? 	$_POST['last_name'] 	: ''; 	// required  
	$email 				= ( !empty($_POST['email']) ) ? 		$_POST['email'] 		: ''; 	// required	
	$comments			= ( !empty($_POST['comments']) ) ? 		$_POST['comments'] 		: ''; 	// required	
	// -----------------
	// Gestion des erreurs
	$error_message 		= '';
	// On vérifie que tous les champs obligatoires sont remplis
	// ---------
	if( empty($first_name) )
	{
		$error_message .= 'Your First Name is mandatory<br />';
	} 
	// ---------
	if( empty($last_name) )
	{
		$error_message .= 'Your Last Name is mandatory<br />';
	} 
	// ---------
	if( empty($email) )
	{
		$error_message .= 'Your Email address is mandatory<br />';
	} 
	elseif( !empty($email) && !filter_var($email, FILTER_VALIDATE_EMAIL) )
	{
		$error_message .= 'A valid Email address is mandatory<br />';
	}
	// ---------
	if( empty($comments) )
	{
		$error_message .= 'A Question or Comment is mandatory<br />';
	} 
	// -----------------
	// ERREUR ?
	if( !empty($error_message) )
	{
		show_msg_error($error_message);
	} 
	// -----------------
	// PAS d erreur : envoi par mail
	else {
		$email_from = $email;  
 
		$email_message = "Form details below.\n\n";	 
		$email_message .= "First Name: ".clean_string($first_name)."\n";
		$email_message .= "Last Name: ".clean_string($last_name)."\n";
		$email_message .= "Email: ".clean_string($email_from)."\n";	
		$email_message .= "Comments: ".clean_string($comments)."\n";
 
		// create email headers
		$headers = 'From: '.$email_from."\r\n".
		'Reply-To: '.$email_from."\r\n" .
		'X-Mailer: PHP/' . phpversion();
		if( mail($email_to, $email_subject, $email_message, $headers) )
		{
			echo "<div style=\"margin:20px 0;padding:20px;background:#fff;color:green;border:1px solid green;border-radius:3px;\">";
			echo "<p><b>Thank you. Your message has been correctly sent.</b></p>";
			echo "</div>";
			exit;
		} else {
			echo "<div style=\"margin:20px 0;padding:20px;background:#fff;color:red;border:1px solid red;border-radius:3px;\">";
			echo "<p>An error occured during sending.</p>";
			echo "<p>Please try again, or send it to: ".$email_to."</p>";
			echo "</div>";
			exit;
		}
	}
	// -----------------
}
// ---------------------------------

Je n'y comprends rien, désolé Smiley decu
Merci
Bonsoir,
Le problème vient des changements effectués par IONOS en janvier 2024.
Voici le code (image) qu'il faut mettre sur le fichier PHP. Mais que dois-je mettre comme adresse mail après le "FROM" ?
Merci et bon week-end,
P.
upload/1730393776-48192-capturedaeacran.png
Merci beaucoup casper2,
mais (honte à moi) je ne parle pas anglais Smiley ohwell Comment puis-je connaître l'expéditeur ? Je ne fais que recevoir Smiley sweatdrop
Si vous m'envoyer un mail, vous êtes l'expéditeur et moi le destinataire, non ?
Merci beaucoup et bon week-end Smiley smile
>> Je ne fais que recevoir
Pour répondre au mail que vous recevez vous devez connaitre l'adresse mail de la personne qui vous envoie un message.

>> Comment puis-je connaître l'expéditeur ?
L'utilisateur qui remplit le formulaire de contact fourni son adresse mail pour pouvoir recevoir un réponse.
C'est la Ligne suivante dans le code plus haut.
$email 	= ( !empty($_POST['email']) ) ? $_POST['email'] : '';

Soit le contenu de la variable $_POST['email'] fournie par l'utilisateur.
Avez vous lula documentation php.net/mail ?
Merci beaucoup casper2, le guide fournit par IONOS sur ce sujet n'était pas clair. Je file voir votre lien. Merci beaucoup Smiley biggrin
Bonjour,
Je pensais avoir compris le souci, j'ai donc fait ce code pour tester :
if( isset($_POST['first_name'], $_POST['last_name'], $_POST['email'], $_POST['comments']) )
{
	// -----------------
	// EDIT THE 2 LINES BELOW AS REQUIRED
	$headers = 'From : ledavdave@monsite.com' . "\r\n" .
	$email_to 			= "ledavdave@monsite.com";		// receiver email
	$email_subject 		= "New Message Received";
	// -----------------
	// fonctions utiles
	if( !function_exists('show_msg_error') )
	{
		function show_msg_error($error)
		{
			// your error code can go here
			echo "<div style=\"margin:20px 0;padding:20px;background:#fff;color:red;border:1px solid red;border-radius:3px;\">";
			echo "<p>Sorry, but there were error(s) found:</p>";
			echo "<p>".$error."</p>";
			echo "<p>Please correct them and try again</p>";
			echo "</div>";
			exit;

Mais rien ne change, j'ai toujours ce message d'erreur quand je clique sur "send"
Si quelqu'un pouvais m'expliquer...
Merci et bonne soirée.
P.
Bonsoir, en PHP le point sert d'opérateur de concaténation. Le point-virgule sert de délimiteur entre chaque instruction.
En fin de ligne de l'affectation de la variable $headers c'est un point-virgule qu'il faut et non un point.
Pour le nom de l'entête c'est "From:" et non pas "From :" . Pour le coup je ne saurais l'expliquer mais je pense que c'est important qu'il n'y ait pas d'espace entre le nom et les deux point. Les deux point font partie intégrante du nom, dirais-je.
Tu essaies de faire compliquer. Fait un simple mail en texte, et uniquement quand cela fonctionnera tu ajoutes de l'HTML. Procède par étapes. Smiley biggrin
Bonjour casper2,
Merci beaucoup pour tes explications.
Cela ne fonctionne pas, toujours le même message d'erreur Smiley ohwell
Pour ce qui est de l'HTML, il est sur le fichier de base et je n'ose pas y toucher. Je tente juste d'y rajouter un expéditeur comme le demande IONOS depuis janvier 2024 Smiley decu
Merci énormément
Bonne journée,
P.
Tu veux parler de ceci? https://www.ionos.fr/assistance/hebergement/aucun-envoi-de-mails-avec-une-adresse-dexpediteur-differente/#c233572
Si oui je me demande si la fonction mail() est toujours bien active sur ton hébergement.
Faisons un teste simple. Dans un nouveau fichier .php tu vas écrire le code de la documentation https://www.php.net/manual/fr/function.mail.php#example-3141 exemple 2 ou 3 au choix.
tu testes le retour de la fonction comme ceci:

$retourMail = mail($to, $subject, $message, $headers);

if ($retourMail) {
    echo 'mail envoyé'; 
} else {
    echo 'mail pas envoyé'; 
}

tu appelles le script directement en écrivant le chemin dans la barre d'adresse du navigateur et tu nous dit ce qui est affiché.
Tu dois bien vérifier que l'adresse indiquée dans le From " appartient au domaine de votre contrat d'hébergement" comme le demande ton hébergeur, c'est à dire que si ton site est site.fr l'adresse doit être quelquechose@site.fr et pas un autre domaine.
Modifié par casper2 (04 Nov 2024 - 10:51)
Bonjour casper2,
Je n'ai pas compris (désolé) où il faut rajouter au code (exemple 1).
Idem pour le chemin, je sais ce qu'est un chemin mais je ne comprends pas là Smiley decu
Tu veux dire monsite.com/test.php ?
Merci pour tout
Smiley cligne
1) copier/coller dans un nouveau fichier .php le code donner en lien plus haut (Exemple #2 Envoi d'un mail avec des en-têtes supplémentaires) de la documentation php.net/mail
2) Adapter les valeurs avec tes propres données
3) Adapter le code en recopiant l'exemple que je donne plus haut (à ajouter au code précédemment écrit). Cela affichera un texte en fonction de la valeur de retour de la fonction mail. Cette fonction retourne true ou false.
4) upload sur ton espace d'hébergement le fichier écrit (oui cela peut être test.php)
5) si tu as placé le fichier à la racine oui c'est monsite.com/test.php qu'il faut écrire comme URL dans la barre d'adresse de ton navigateur.
Smiley ohwell Avec ce code, je tombe sur une page vierge en mettant le chemin sur Chrome Smiley ohwell
J'ai encore raté quelque chose ? Je n'y comprends rien Smiley decu
<?php
     $to      = 'ledavdave@monsite.com';
     
     $subject = 'le sujet';
     $message = 'Bonjour !';
     $headers = 'From: ledavdave@monsite.com' . "\r\n" .
     'Reply-To: ledavdave@monsite.com' . "\r\n" .
     'X-Mailer: PHP/' . phpversion();

     mail($to, $subject, $message, $headers);
     $retourMail = mail($to, $subject, $message, $headers);

if ($retourMail) {
    echo 'mail envoyé'; 
} else {
    echo 'mail pas envoyé'; 
}
 ?>

Bonne soirée,
P.
Pas nécessaire de faire un double appel à la fonction mail.
Garde uniquement le deuxième appel. Le script doit planté au premier appel de mail() ce qui n'est pas normal.
Tu peux ajouter en tout début le code donner par JENCAL sur ce sujet:

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

Ce qui devrait t'afficher un message d'erreur.
Autre solution, ouvrir l'inspecteur des éléments (F12) onglet réseau et voir quelle est le code de retour du serveur. Si c'est une erreur 500 il faut aller voir les log du serveur dans panel d'administration de ton hébergeur.
Bonsoir casper2,
je n'ai le choix que de regarder ça demain, mais à 21H04 précise... plein de mails reçus :
voir image.
Merci pour tout,
P. upload/1730756222-48192-mailcopie.jpg
Ha bien c'est une bonne nouvelle, la fonction mail() fonctionne bien, c'est ce que je souhaitais savoir en premier lieu.
Maintenant je pense que tu sais paramétrer le champ From: pour ton formulaire de contact.
Si oui passe le sujet en résolu, si non on regarde ce qui ne fonctionne pas.
A+
Bonjour casper2,
Merci pour tout mais je n'arrive pas à "conjuguer" les deux fichiers.
Mon code est actuellement :
if( isset($_POST['first_name'], $_POST['last_name'], $_POST['email'], $_POST['comments']) )
{
	// -----------------
	// EDIT THE 2 LINES BELOW AS REQUIRED
     $to      = 'ledavdave@monsite.com';
     
     $subject = 'le sujet';
     $message = 'Bonjour !';
     $headers = 'From: ledavdave@monsite.com' . "\r\n" .
     'Reply-To: ledavdave@monsite.com' . "\r\n" .
     'X-Mailer: PHP/' . phpversion();
	// -----------------
	// fonctions utiles
	if( !function_exists('show_msg_error') )
	{
		function show_msg_error($error)
		{
			// your error code can go here
			echo "<div style=\"margin:20px 0;padding:20px;background:#fff;color:red;border:1px solid red;border-radius:3px;\">";
			echo "<p>Sorry, but there were error(s) found:</p>";
			echo "<p>".$error."</p>";
			echo "<p>Please correct them and try again</p>";
			echo "</div>";
			exit;
		}
	}
	// ---------
	if( !function_exists('clean_string') )
	{
		function clean_string($string)
		{
			$bad = array("content-type","bcc:","to:","cc:","href");
			return str_replace($bad,"",$string);
		}
	}

et j'ai un message d'erreur lors du "send". J'ai bien évidemment essayé plusieurs fois de combiner les deux, mais sans succès Smiley hum
Merci encore et bonne journée,
P.