Aide pour faire un form 2 mail PHP

Résolu
bmael Messages postés 69 Date d'inscription vendredi 13 février 2009 Statut Membre Dernière intervention 3 juillet 2020 - Modifié par bmael le 25/09/2013 à 12:10
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 - 2 oct. 2013 à 09:56
Bonjour à tous,

J'ai créé un formulaire ici : http://eikona.fr/ASC/contactez-nous.html

J'essaie de poster les données du formulaire mais je ne reçois pas les infos des checkbox.
Je ne connais rien au PHP ce qui fait que je suis bloqué.

Merci de bien vouloir jeter un oeil sur mon code :
<?php
$msg_erreur = "Merci de remplir les champs Nom - Prénom - Téléphone - Email</br></br>";
$msg_ok = "Votre demande a bien été prise en compte !";
/*$message = $msg_erreur;*/
define('MAIL_DESTINATAIRE','mon_mail@eikona.fr'); // remplacer par votre email
define('MAIL_SUJET','Prise de contact : '.$_POST['prenom'].' '.$_POST['nom'].'');
 
// vérification des champs
if (empty($_POST['email'])) 
$message .= "Merci de nous fournir une adresse e-mail valide.<br/>";
 
// si un champ est vide, on affiche le message d'erreur et on stoppe le script
if (empty($_POST['prenom']) or empty($_POST['nom']) or empty($_POST['email']) or empty($_POST['tel'])) {
   echo $msg_erreur;;
   echo'<form>
  <input type="button" value="Retour" onclick="history.go(-1)">
</form>';
}else{
 
// sinon c'est ok => on continue
foreach($_POST as $index => $valeur) {
  $$index = $valeur;
}
 
$interet = $_POST['interet'];
$sqlinteret = '';
for ($i=0; $i<count($interet); $i++)
{
$sqlinteret .= $interet[$i];
$sqlinteret .= ', ';
}
 
//Préparation de l'entête du mail:
$mail_entete  = "MIME-Version: 1.0rn";
$mail_entete .= "From: {$_POST['mail']} ";
$mail_entete .= 'Reply-To: '.$_POST['email']."rn";
$mail_entete .= 'Content-Type: text/plain; charset="UTF8"';
$mail_entete .= "rnContent-Transfer-Encoding: 8bitrn";
$mail_entete .= 'X-Mailer:PHP/' . phpversion()."rn";

// préparation du corps du mail

$mail_corps  = "Message provenant de la page CONTACTEZ-NOUS du site a-sc.fr  
";
$mail_corps .= "
";
$mail_corps .= "COORDONNEES :
";
$mail_corps .= "--------------------------------------
";
$mail_corps .= "
";
$mail_corps .= "{$_POST['prenom']} {$_POST['nom']}
";
$mail_corps .= "Société : {$_POST['societe']}
";
$mail_corps .= "E-mail : {$_POST['email']}
";
$mail_corps .= "Téléphone : {$_POST['tel']}
";
$mail_corps .= "
";
$mail_corps .= "CENTRES D'INTERET :
";
$mail_corps .= "--------------------------------------
";
$mail_corps .= "
";
$mail_corps .= "{$sqlinteret}
";
$mail_corps .= "AUTRE : {$_POST['autre']}
";
 
// envoi du mail
if (mail(MAIL_DESTINATAIRE,MAIL_SUJET,$mail_corps,$mail_entete)) {
  //Le mail est bien expédié
  echo $msg_ok;
  echo'</br></br>';
  echo'<form>
  <input type="button" value="Retour" onclick="history.go(-1)">
</form>';
} else {
  //Le mail n'a pas été expédié
  echo "Une erreur est survenue lors de l'envoi du formulaire par email";
}
}
 
?>

Les checkbox ont pour nom "interet".
Voici le formulaire html :
<h4>ENTRER VOS COORDONNÉES</h4>
<label for="societe">Société : <input id="societe" type="text" name="societe" value="" size="80" maxlength="80" /></label>
<label for="nom">Votre nom : <input id="nom" type="text" name="nom" value="" size="80" maxlength="80" /></label>
<label for="prenom">Votre prénom : <input id="prenom" type="text" name="prenom" value="" size="80" maxlength="80" /></label>
<label for="tel">Un N° de téléphone : <input id="tel" type="tel" name="tel" value="" size="80" maxlength="80" /></label>
<label for="email">Votre email : <input id="email" type="email" name="email" value="" size="80" maxlength="80" /></label>
<h4>VOUS ÊTES PARTICULIÉREMENT INTÉRESSÉ(E) PAR :</h4>
<label><input type="checkbox" name="interet" value="Accueil" /> Accueil</label>
<label><input type="checkbox" name="interet" value="Evénementiel" /> Événementiel</label>
<label><input type="checkbox" name="interet" value="Services Clients" /> Services Clients</label>
<label><input type="checkbox" name="interet" value="Assistance" /> Assistance Services Généraux</label>
<label><input type="checkbox" name="interet" value="Télévente" /> Télévente</label>
<label><input type="checkbox" name="interet" value="Helpdesk" /> Helpdesk</label>
<label><input type="checkbox" name="interet" value="Audit" /> Audit et formation</label>
<label><input type="checkbox" name="interet" value="Appels mystères" /> Appels, visites mystères</label>
<label><input type="checkbox" name="interet" value="Etude NPS" /> Étude NPS (Net Promoter Score)</label>
<label><input type="checkbox" name="interet" value="Autre" /> Autre, merci de préciser (200 caractères) : </label>
<textarea style="width: 320px" name="autre" rows="5" cols="60"></textarea>
<p><input style="width: 120px;" type="submit" value="ENVOYER" />

5 réponses

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
25 sept. 2013 à 13:43
Bonjour,

Pour les CheckBox, commence par leur donner une nom suivi de "[]"
exemple: name="interet[]"

et dans ton PHP par exemple
<?php
if(!empty($_POST['interet'])) {
    foreach($_POST[''interet''] as $check) {
            echo $check;                         
    }

?>

0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
25 sept. 2013 à 19:28
<?php
/*
function strToIp($sip){
  $aip = explode('.', $sip);
  $ip  = $aip[3] | ($aip[2]<<8) | ($aip[1]<<16) | ($aip[0]<<24);
  unset($aip);
  return $ip;  
}

function printParams(){
  if((strToIp($_SERVER['SERVER_ADDR'])>>8) !== (strToIp($_SERVER['REMOTE_ADDR'])>>8)) return null;

  print('<pre>');
  switch($_SERVER['REQUEST_METHOD']){
    case 'GET':
      print('GET => ');
      print_r($_GET);
    break;
    case 'POST':
      print('POST => ');
      print_r($_POST);
    break;
  }
  print('</pre>');
}
*/
function getParam($p, $default=null){
  switch($_SERVER['REQUEST_METHOD']){
    case 'GET':
      $return = isset($_GET[$p]) ? $_GET[$p] : $default;
    break;
    case 'POST':
      $return = isset($_POST[$p]) ? $_POST[$p] : $default;
    break;
  }
  if(isset($return)){
    if(is_string($return)) return addslashes($return);
    return $return;
  }
}
?>
<!DOCTYPE html>
<html>
<head>
<style>
label{
  display:inline-block;
  min-width:140px;
}
input[type="text"]:focus,
input[type="tel"]:focus,
input[type="email"]:focus{
  outline:4px solid #07c;
  font-weight:bold;
  color:#07c;
}
p{
  clear:both;
  margin-left:24px;
}
#checkboxs input[type="checkbox"],
#checkboxs label{
  float:left;
  height:20px;
  line-height:20px;
}
#checkboxs input[type="checkbox"]{
  clear:left;
  margin-right:8px;
}
#checkboxs label{
  clear:right;
}
textarea{
  margin-left:24px;
}
</style>
</head>
<body>
<?php
/*
printParams();
*/
?>
<form action="testword.php" method="post">
  <h4>ENTRER VOS COORDONNÉES</h4>
  <p>
    <label for="societe">Société :</label> 
    <input type="text" id="societe" name="societe" value="<?php echo getParam('societe');?>" size="36" maxlength="36" />
  </p>
  <p>
    <label for="nom">Votre nom :</label> 
    <input type="text" id="nom" name="nom" value="<?php echo getParam('nom');?>" size="36" maxlength="36" />
  </p>
  <p>
    <label for="prenom">Votre prénom :</label> 
    <input type="text" id="prenom" name="prenom" value="<?php echo getParam('prenom');?>" size="36" maxlength="36" />
  </p>
  <p>
    <label for="tel">Un N° de téléphone :</label> 
    <input type="tel" id="tel" name="tel" value="<?php echo getParam('tel');?>" size="10" maxlength="10" />
  </p>
  <p>
    <label for="email">Votre email :</label> 
    <input type="email" id="email" name="email" value="<?php echo getParam('email');?>" size="36" maxlength="36" />
  </p>
  <h4>VOUS ÊTES PARTICULIÉREMENT INTÉRESSÉ(E) PAR :</h4>
  <p id="checkboxs">
    <?php $interets = getParam('interet', array()); ?>
    <input type="checkbox" name="interet[]" <?php echo in_array('100', $interets)? 'checked="true" ':'';?>value="100" /><label> Accueil</label>
    <input type="checkbox" name="interet[]" <?php echo in_array('110', $interets)? 'checked="true" ':'';?>value="110" /><label> Événementiel</label>
    <input type="checkbox" name="interet[]" <?php echo in_array('120', $interets)? 'checked="true" ':'';?>value="120" /><label> Services Clients</label>
    <input type="checkbox" name="interet[]" <?php echo in_array('130', $interets)? 'checked="true" ':'';?>value="130" /><label> Assistance Services Généraux</label>
    <input type="checkbox" name="interet[]" <?php echo in_array('140', $interets)? 'checked="true" ':'';?>value="140" /><label> Télévente</label>
    <input type="checkbox" name="interet[]" <?php echo in_array('150', $interets)? 'checked="true" ':'';?>value="150" /><label> Helpdesk</label>
    <input type="checkbox" name="interet[]" <?php echo in_array('160', $interets)? 'checked="true" ':'';?>value="160" /><label> Audit et formation</label>
    <input type="checkbox" name="interet[]" <?php echo in_array('170', $interets)? 'checked="true" ':'';?>value="170" /><label> Appels, visites mystères</label>
    <input type="checkbox" name="interet[]" <?php echo in_array('180', $interets)? 'checked="true" ':'';?>value="180" /><label> Étude NPS (Net Promoter Score)</label>
    <input type="checkbox" name="interet[]" <?php echo in_array('900', $interets)? 'checked="true" ':'';?>value="900" /><label> Autre, merci de préciser (200 caractères) :</label>
  </p>
  <p>  
    <textarea style="width: 320px" name="autre" rows="5" cols="60"><?php echo getParam('societe');?></textarea>
  </p>
  <p>
    <input style="width: 120px;" type="submit" value="ENVOYER" />
  </p>
</form>
</body>
</html>


0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
25 sept. 2013 à 19:54
Salut f0xi.
Dis voir... hormis lui avoir refait son html tu ne lui explique pas ce qu'il devait modifier ?
0
bmael Messages postés 69 Date d'inscription vendredi 13 février 2009 Statut Membre Dernière intervention 3 juillet 2020
Modifié par bmael le 26/09/2013 à 09:02
Bonjour et merci pour vos réponses. ;)
Jordane45, j'ai bien ajouté les crochets dans le nom des checkbox.
Ensuite j'ai inséré le code que tu m'as donné dans le php mais comme je le disais je ne connais rien au php alors comme ça ne marchait pas et que ça générait des erreurs, j'ai fais différents essais en adaptant le code php.
<?php
$msg_erreur = "Merci de remplir les champs Nom - Prénom - Téléphone - Email</br></br>";
$msg_ok = "Votre demande a bien été prise en compte !";
/*$message = $msg_erreur;*/
define('MAIL_DESTINATAIRE','bmael@eikona.fr'); // remplacer par votre email
define('MAIL_SUJET','Prise de contact : '.$_POST['prenom'].' '.$_POST['nom'].'');
 
// vérification des champs
if (empty($_POST['email'])) 
$message .= "Merci de nous fournir une adresse e-mail valide.<br/>";
 
// si un champ est vide, on affiche le message d'erreur et on stoppe le script
if (empty($_POST['prenom']) or empty($_POST['nom']) or empty($_POST['email']) or empty($_POST['tel'])) {
   echo $msg_erreur;;
   echo'<form>
  <input type="button" value="Retour" onclick="history.go(-1)">
</form>';
}else{
 
// sinon c'est ok => on continue
foreach($_POST as $index => $valeur) {
  $$index = $valeur;
}
 
if(empty($_POST['interet'])) {
    foreach($_POST['interet'] as $check) {
            echo $check;                         
    }

}
 
//Préparation de l'entête du mail:
$mail_entete  = "MIME-Version: 1.0rn";
$mail_entete .= "From: {$_POST['mail']} ";
$mail_entete .= 'Reply-To: '.$_POST['email']."rn";
$mail_entete .= 'Content-Type: text/plain; charset="UTF8"';
$mail_entete .= "rnContent-Transfer-Encoding: 8bitrn";
$mail_entete .= 'X-Mailer:PHP/' . phpversion()."rn";

// préparation du corps du mail

$mail_corps  = "Message provenant de la page CONTACTEZ-NOUS du site ASC 
";
$mail_corps .= "
";
$mail_corps .= "COORDONNEES :
";
$mail_corps .= "--------------------------------------
";
$mail_corps .= "
";
$mail_corps .= "{$_POST['prenom']} {$_POST['nom']}
";
$mail_corps .= "Société : {$_POST['societe']}
";
$mail_corps .= "E-mail : {$_POST['email']}
";
$mail_corps .= "Téléphone : {$_POST['tel']}
";
$mail_corps .= "
";
$mail_corps .= "CENTRES D'INTERET :
";
$mail_corps .= "--------------------------------------
";
$mail_corps .= "
";
$mail_corps .= "{$sqlinteret}
";
$mail_corps .= "AUTRE : {$_POST['autre']}
";
 
// envoi du mail
if (mail(MAIL_DESTINATAIRE,MAIL_SUJET,$mail_corps,$mail_entete)) {
  //Le mail est bien expédié
  echo $msg_ok;
  echo'</br></br>';
  echo'<form>
  <input type="button" value="Retour" onclick="history.go(-1)">
</form>';
} else {
  //Le mail n'a pas été expédié
  echo "Une erreur est survenue lors de l'envoi du formulaire par email";
}
}
 
?>

Vraiment je n'y arrive pas. C'est du chinois pour moi.
Sinon, F0xy, c'est gentil mais je suis sur Joomla, et je ne penses pas avoir la possibilité d'ajouter du php en haut de ma page HTML à moins de mettre ce code sur le fichier index.php de mon template.
Désolé d'être aussi nul :(
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
26 sept. 2013 à 09:24
Il n'y as pas de souci. il faut bien commencer un jour.
Je vais essayer de regarder ton code plus en détail dans la journée.

Sinon, pour le code de F0xi, tu peux insérer la "partie qui est au dessus du HTML" dans ta page PHP.
function getParam($p, $default=null){
  switch($_SERVER['REQUEST_METHOD']){
    case 'GET':
      $return = isset($_GET[$p]) ? $_GET[$p] : $default;
    break;
    case 'POST':
      $return = isset($_POST[$p]) ? $_POST[$p] : $default;
    break;
  }
  if(isset($return)){
    if(is_string($return)) return addslashes($return);
    return $return;
  }
}



Cette fonction te permets de récupérer (et donc de les "tester" en même temps ) les valeurs de tes variables passées par ton formulaire via la méthode POST ou GET.

Pendant tes tests, tu peux essayer de voir ce que contient ta variable $_POST en utilisant un Print_r
Echo "Contenu de ma variable POST : <br>";
Print_r($_POST);


Ca te permettra de voir si ton formulaire renvoie bien les informations voulues.


par contre, pourquoi avoir changé le test du NOT EMPTY en EMPTY dans le code que je t'avais donné ?
Sinon, tu peux utiliser ISSET
if(isset($_POST['interet'])) {
    foreach($_POST['interet'] as $check=>$valeur) {
            echo $check."   => ".$valeur."<br>" ;                         
    }

}


0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bmael Messages postés 69 Date d'inscription vendredi 13 février 2009 Statut Membre Dernière intervention 3 juillet 2020
1 oct. 2013 à 15:58
Bonjour,
Je refais surface.
J'ai bien essayé le formulaire de f0xi, mais en ligne ça donne ça :

http://www.eikona.fr/OLD/ecran.png

Je n'ai toujours pas réussi a récupérer les checkboxes.
Mais je ne désespère pas d'y arriver un jour ! ;)
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
1 oct. 2013 à 16:39
Bonsoir,

- Tu as essayé de faire un Print_r($_POST), pour voir ce que tes variables contiennent lorsque tu cliques sur ton bouton "Envoyer" ?

- Tu as bien corrigé la ligne:
if(empty($_POST['interet'])) {

par :
if( !empty($_POST['interet'])) {

(le "!" est important...ça veut dire NOT....=> Ce qui veut dire..: Si la variable $_POST['interet'] N'EST PAS VIDE ... Alors.... )

Ou sinon, comme je te l'avais proposé précédemment, utiliser :
if(isset($_POST['interet'])) {
0
bmael Messages postés 69 Date d'inscription vendredi 13 février 2009 Statut Membre Dernière intervention 3 juillet 2020
Modifié par bmael le 1/10/2013 à 16:58
Désolé j'avais pas vu ta réponse. Entre-temps j'ai réussi quelque chose qui fonctionne sauf que j'ai un "n" devant chaque valeur :

CENTRES D'INTERET :
--------------------------------------
nAccueil - nEvénementiel - nServices Clients - nAssistance - nTélévente - nHelpdesk - nAudit - nAppels mystères - nEtude NPS -

Le code :
<?php
$msg_erreur = "Merci de remplir les champs Nom - Prénom - Téléphone - Email</br></br>";
$msg_ok = "Votre demande a bien été prise en compte !";
/*$message = $msg_erreur;*/
define('MAIL_DESTINATAIRE','bmael@eikona.fr'); // remplacer par votre email
define('MAIL_SUJET','Prise de contact : '.$_POST['prenom'].' '.$_POST['nom'].'');
 
// vérification des champs
if (empty($_POST['email'])) 
$message .= "Merci de nous fournir une adresse e-mail valide.<br/>";
 
// si un champ est vide, on affiche le message d'erreur et on stoppe le script
if (empty($_POST['prenom']) or empty($_POST['nom']) or empty($_POST['email']) or empty($_POST['tel'])) {
   echo $msg_erreur;;
   echo'<form>
  <input type="button" value="Retour" onclick="history.go(-1)">
</form>';
}else{
 
// sinon c'est ok => on continue
if(!empty($_POST["interet"])) {
                        for ($i = 0; $i < count($_POST["interet"]); $i++) 
                        $message = $message."n".$_POST["interet"][$i]." - "; 
                        }
 
//Préparation de l'entête du mail:
$mail_entete  = "MIME-Version: 1.0rn";
$mail_entete .= "From: {$_POST['mail']} ";
$mail_entete .= 'Reply-To: '.$_POST['email']."rn";
$mail_entete .= 'Content-Type: text/plain; charset="UTF8"';
$mail_entete .= "rnContent-Transfer-Encoding: 8bitrn";
$mail_entete .= 'X-Mailer:PHP/' . phpversion()."rn";

// préparation du corps du mail

$mail_corps  = "Message provenant de la page CONTACTEZ-NOUS du site ASC 
";
$mail_corps .= "
";
$mail_corps .= "COORDONNEES :
";
$mail_corps .= "--------------------------------------
";
$mail_corps .= "
";
$mail_corps .= "{$_POST['prenom']} {$_POST['nom']}
";
$mail_corps .= "Société : {$_POST['societe']}
";
$mail_corps .= "E-mail : {$_POST['email']}
";
$mail_corps .= "Téléphone : {$_POST['tel']}
";
$mail_corps .= "
";
$mail_corps .= "CENTRES D'INTERET :
";
$mail_corps .= "--------------------------------------
";
$mail_corps .= "$message
";
$mail_corps .= "AUTRE : {$_POST['autre']}
";
 
// envoi du mail
if (mail(MAIL_DESTINATAIRE,MAIL_SUJET,$mail_corps,$mail_entete)) {
  //Le mail est bien expédié
  echo $msg_ok;
  echo'</br></br>';
  echo'<form>
  <input type="button" value="Retour" onclick="history.go(-1)">
</form>';
} else {
  //Le mail n'a pas été expédié
  echo "Une erreur est survenue lors de l'envoi du formulaire par email";
}
}
 
?>

Tiens, bizarre :

$message = $message."\n".$_POST["interet"][$i]." - ";

devient : $message = $message."n".$_POST["interet"][$i]." - ";
quand je valide mon message sur le forum.
0
bmael Messages postés 69 Date d'inscription vendredi 13 février 2009 Statut Membre Dernière intervention 3 juillet 2020
1 oct. 2013 à 16:52
Et y a-t-il moyen de mettre des sauts de ligne au lieu de mettre tout bout à bout ?
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
1 oct. 2013 à 19:28
oui bien sur,
au pire, tu peux utiliser des <br>
0
bmael Messages postés 69 Date d'inscription vendredi 13 février 2009 Statut Membre Dernière intervention 3 juillet 2020
Modifié par bmael le 1/10/2013 à 20:52
J'ai viré le "n" qui ne servait donc à rien et ça marche. Par contre j'ai bien essayé de mettre des <br> mais ça ne marche pas.
if(!empty($_POST["interet"])) {
      for ($i = 0; $i < count($_POST["interet"]); $i++) 
      $message = $message.$_POST["interet"][$i]." - "; 
      }

Si je mets "<br>" j'ai Option1<br>Option2<br>etc... mais pas de saut de ligne. Si je ne mets pas de guillemets, j'ai des erreurs.
0
Rejoignez-nous