[RESOLU] [REGLE] Récupération formulaire par mail.

Eléphant du PHP | 89 Messages

21 févr. 2011, 18:27

Bonjour à tou,

ce sujet a déjà été traité à maintes reprises, mais j'ai beau consulter plusieurs tutos et rien n'y fait.

Ci-dessous, le code de mon formulaire de contact:
<table width="266" height="120" border="0" align="center">
	
    <tr>
      <td><font face="Verdana" size="2">Nom</font></td>

      <td><input name="champ1" type="text" size="20"></td>
    </tr>
    
    <tr>
      <td><font face="Verdana" size="2">Prénom</font></td>
      <td><input name="champ2" type="text" size="20"></td>
    </tr>

....
....
....
....
    
<tr>
      <td valign="top"><input name="nbre_champs_texte" type="hidden" id="nbre_champs_texte" value="10">

        <input name="nbre_zones_texte" type="hidden" value="1">
<input name="nbre_zone_email" type="hidden" value="1">

<input name="titre_champ1" type="hidden" value="Prénom"><input name="titre_champ2" type="hidden" value="Nom"><input name="titre_champ3" type="hidden" value="Rue et Numéro"><input name="titre_champ4" type="hidden" value="Ville"><input name="titre_champ5" type="hidden" value="Code postal"><input name="titre_champ6" type="hidden" value="Pays"><input name="titre_champ7" type="hidden" value="Province ou département"><input name="titre_champ8" type="hidden" value="Téléphone journalier"><input name="titre_champ9" type="hidden" value="Téléphone soir"><input name="titre_champ10" type="hidden" value="Numéro de Fax"><input name="titre_email" type="hidden" value="E-mail"><input name="titre_zone" type="hidden" value="Date de réservation + Vos observation éventuelles"></td>
      <td><div align="center">
<input type="reset" name="Reset" value="Effacer">          
<input type="submit" name="envoi" value="Envoyer">
        </div></td>
    </tr>
    </table>
</form>
le bout de code ci-dessous fonctionne pour afficher les variables à l'écran:
echo 'Votre prénom est '.$_POST['champ1'].' et votre nom est '.$_POST['champ2'];
Par contre, lorsque je souhaite les recevoir par mail avec:
mail("[email protected]", $champ1. $champ2. $champ3. "From: $zone_email\r\n"."Reply-To: $zone_email\r\n");
Je ne reçois pas de mail, malgré la bonne config du serveur smtp chez mon hébergeur.

Merci pour votre aide.
Modifié en dernier par vins1892 le 26 févr. 2011, 10:12, modifié 2 fois.

ViPHP
xTG
ViPHP | 7331 Messages

21 févr. 2011, 18:33

Dans la fonction mail, après $champs3 c'est pas une concaténation qu'il te faut vu que les headers additionnels sont un nouvel argument.
Après, as-tu regardé dans les spams ?

Eléphant du PHP | 89 Messages

21 févr. 2011, 23:07

Merci, j'ai essayé ceci:

mail('[email protected]', $champ1, $champ2, $champ3,"From: $zone_email\r\n"."Reply-To: $zone_email\r\n");

Simple quote pour le mail.

Rien dans mes spams ...

ViPHP
ViPHP | 5462 Messages

21 févr. 2011, 23:10

regarde bien le code de XTG, c'est des points pas des virgules pour séparer les champs, je te conseil de monter ton niveau d'erreur au maximum, parce que la PHP aurai du te dire qu'il y'a un probleme

ViPHP
xTG
ViPHP | 7331 Messages

22 févr. 2011, 10:16

Oui PHP aurait du te hurler dessus. ;)

Voilà pour la fonction :
mail('[email protected]', $champ1 . $champ2 . $champ3,"From: $zone_email\r\n"."Reply-To: $zone_email\r\n");
mail(mail, message, headers);

Eléphant du PHP | 89 Messages

25 févr. 2011, 10:46

Merci.

Je récupère bien un mail avec ce code:
<?php

mail('[email protected]', $champ1 . $champ2 . $champ3,"From: $zone_email\r\n"."Reply-To: $zone_email\r\n");

?>
Mais quand j'essaye de définir les variables:
<?php

$champ1 = 'prénom:\t$champ1\n';
$champ2 = 'nom\t$champ2\n';
$zone_email = 'mail de contact:\t$zone_email\';

mail('[email protected]', $champ1 . $champ2 . $champ3,"From: $zone_email\r\n"."Reply-To: $zone_email\r\n");

?>
Je ne reçois pas de mail.

Je viens d'activer l'affichage des erreurs php chez mon hébergeur, mais non encore effectif pour le moment ...

Merci pour votre aide.

ViPHP
xTG
ViPHP | 7331 Messages

25 févr. 2011, 11:42

Les simples quotes ne permettent pas d'interpréter les variables !
$var = "test";
echo 'Ceci est un $var !'; // Ceci est un $var!
echo "Ceci est un $var !"; // Ceci est un test !

Eléphant du PHP | 89 Messages

25 févr. 2011, 13:32

J'ai modifié les simples quotes et modifié le code:
[php]$msg = "Nom:\t$champ1\n";
$msg .= "Prénom:\t$champ2\n";
$msg .= "Adresse:\t$champ3\n";
$msg .= "Ville:\t$champ4\n";
$msg .= "CP:\t$champ5\n";
$msg .= "Pays:\t$champ6\n";
$msg .= "Province:\t$champ7\n";
$msg .= "Téléphone:\t$champ8\n";
$msg .= "E-Mail de contact:\t$zone_email\n";
$msg .= "Commentaires:\t$champ10\n";

$recipient = "[email protected]";
$subject = "Formulaire de contact";

$mailheaders = "From: $zone_email";
$mailheaders .= "Reply-To: $zone_email";

mail($recipient, $subject, $msg, $mailheaders);
?>

Cela fonctionne chez OVh, mais pas chez mon hébergeur one.com.
Si je mets le fichier.php chez mon hébergeur ovh, je reçois bien les variables par mail:

Nom: Dupont
Prénom: Jean
Adresse: route de Milan
Ville: Bruxelles
CP: 1050
Pays: Belgique

et si je passe par ONE.com, les variables ne sont pas interprétées:

Nom:
Prénom:
Adresse:
Ville:
CP:
Pays:

Sur leur site, ils disent ceci:

Pour faire fonctionner le script de FormMail, vous devez utiliser la partie de code suivante (qui n'est qu'un exemple - vous devez donc effectuer des corrections dans plusieurs champs) :

<FORM method="post" action="http://www.your-domain.com/cgi-bin/FormMail.pl">
<input type="hidden" name="recipient" value="[email protected]">
<input type="hidden" name="subject" value="You can write in here the subject text">
<input type="hidden" name="redirect" value="http://www.domain.com/newpage.html">
</FORM>

Merci pour vos éclaircissements.

ViPHP
xTG
ViPHP | 7331 Messages

25 févr. 2011, 17:56

Configuration du php.ini
Il fut un temps où était activé par défaut un système (dont je me souviens jamais du nom) qui permettait de récupérer les variables super-globales directement.

Une variable nom envoyée par POST devenait donc $nom
Une variable nom envoyée par GET devenait $nom
C'était un problème si on y faisait pas attention...

Depuis il faut passer par les tableaux super-globaux : $_POST, $_GET, $_SESSION, $_COOKIE

Donc dans ton cas ce n'est pas $champs1 mais $_POST['champs1'] par exemple.
Je te conseille vivement d'utiliser cette syntaxe à l'avenir. ;)
Car il est facile à un utilisateur d'appeler ton script par l'adresse : script.php?champs1=oulala
Et là ton champs1 n'aurait pas été égal à ce qui provenait du formulaire mais de l'adresse !

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

26 févr. 2011, 01:59

un s'agit du paramètre register globals, qui , s'il est a on induit le conportement que tu indique.

l'orde des variables (dans le sens ordre où elles "s'écrasent" est indiqué par variables_order = "GPCS" par défaut EGPCS
les lettres indiquent :
- GET
- POST
- COOKIE
- ENV
- SERVER

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 89 Messages

26 févr. 2011, 09:57

Le register global est sur off ....

Tout fonctionne nickel avec le $POST.

Un tout grand merci pour votre aide.