Pages :
Bonjour à tous,

je suis complètement paumé !!!

Quelqu'un pour m'aider avec un formulaire de contact tout simple mais très compliqué pour moi ?

Merci d'avance pour votre soutien.
Bonsoir,

Commence d’abord par exposer ton problème clairement et montre nous ton code... Smiley smile
Le problème c'est justement que je n'ai pas de code, mis à part celui du formulaire.

<form action="" method="post">
    <div class="g-recaptcha" data-sitekey="6LfZF30UAAAAAEhNtBvNt9bQ0sI4nqe1vCrUHFI5" data-size="invisible"></div>
    <input type="text" name="name" placeholder="Your name" required>
    <input type="email" name="email" placeholder="Your email address" required>
    <textarea name="message" placeholder="Type your message here...." required></textarea>
    <input type="hidden" id="captcha-response" name="captcha-response" />
    <input type="submit" name="submit" value="SUBMIT">
</form>


Je voudrais pouvoir traiter le script tout en utilisant Invisible Recaptcha !

Merci d'avance.
J'ai trouvé le code suivant, mais d'une part j'aimerais avoir le message de remerciement sur la page du formulaire une fois validé (en dessous par exemple) et d'autre part je ne sais absolument pas si c'est sécurisé !

Ne dois-je pas utiliser des vérifications sur ce qui est saisie ?

Et ensuite je suis incapable de faire quoi que ce soit concernant le recaptcha invisible.

<?php
$name = $_POST['name'];
$email = $_POST['email'];
$phone = $_POST['phone'];
$call = $_POST['call'];
$website = $_POST['website'];
$priority = $_POST['priority'];
$type = $_POST['type'];
$message = $_POST['message'];
$formcontent=" From: $name \n Phone: $phone \n Call Back: $call \n Website: $website \n Priority: $priority \n Type: $type \n Message: $message";
$recipient = "contact@6ro.fr";
$subject = "Contact Form";
$mailheader = "From: $email \r\n";
mail($recipient, $subject, $formcontent, $mailheader) or die("Error!");
echo "Thank You!" . " -" . "<a href='form.html' style='text-decoration:none;color:#ff0099;'> Return Home</a>";
?>
Modérateur
Bonjour,

On ne comprend rien à tes questions.

Et en plus, y en a pas mal qui font du ski.

Ceci étant, pour mettre un peu d'ordre dans tout ça, je résume :

1) tu as un formulaire
Jusque là, ça va.
2) lors de la validation du formulaire, il doit se passer quelque chose
Ce quelque chose est en général un script dont on met le nom dans l'attribut action de la balise form. Ceci aura pour effet de remplacer le formulaire par une autre page (dont le contenu sera fabriqué par le script de l'attribut action de la balise form) une fois la validation effectuée par l'utilisateur.

Avant de faire du recaptcha, commence déjà par faire fonctionner ton formulaire de manière simple en faisant afficher ce que tu veux une fois qu'il est validé.

Ensuite, on verra pour le recaptcha.

Amicalement,
Bonjour parsimonhi,

Alors commençons par le formulaire :

<form action="send3.php" method="post">
    <input type="text" name="name" placeholder="Your name" required >
    <input type="email" name="email" placeholder="Your email address" required>
    <textarea name="message" placeholder="Type your message here...." required></textarea>
    
    <div class="recaptcha-holder"></div>
    
    <input type="submit" name="submit" value="SUBMIT">
    
</form>


Puis le script :

<?php
session_start();//on démarre la session
// $errors = [];
//On check les infos transmises lors de la validation
  if(!empty($errors)){ // si erreur on renvoie vers la page précédente
  $_SESSION['errors'] = $errors;//on stocke les erreurs
  $_SESSION['inputs'] = $_POST;
  header('Location: contact.html');
  }else{
  $_SESSION['success'] = 1;
  $headers  = 'MIME-Version: 1.0' . "\r\n";
  $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
  $headers .= 'FROM:' . htmlspecialchars($_POST['email']);
  $to = 'contact@xxxxx.fr'; // Insérer votre adresse email ICI
  $subject = 'Message envoyé par ' . htmlspecialchars($_POST['name']);
  $message_content = '
  <table>
  <tr>
  <td><b>Emetteur du message:</b></td>
  </tr>
  <tr>
  <td>'. $subject . '</td>
  </tr>
  <tr>
  <td><b>Contenu du message:</b></td>
  </tr>
  <tr>
  <td>'. htmlspecialchars($_POST['message']) .'</td>
  </tr>
  </table>
  ';
mail($to, $subject, $message_content, $headers);
  header('Location: contact.html');
  }


Jusque là tout fonctionne, je reçois le mail traité.
Je voudrais cependant qu'après le “submit” il y ait un message sous le formulaire, j'avais pensé soit à :

 echo '<p>Thank you for your email!</p>';


Mais ça ne fonctionne pas !

Soit à une div que l'on montrerai :

<div data-form-alert="" hidden="">Thanks for filling out the form!</div>


Mais je ne sais pas comment faire !

Merci d'avance.

P.S. : on verra ensuite pour le reCAPTCA.
Modifié par 6ro (31 Dec 2018 - 09:42)
Modérateur
Bonjour,

En ce qui concerne l'affichage d'un message en cas de succès de l'envoi de mail, je pense à quelques-chose de ce ton:

Dans le script:

if(mail($to, $subject, $message_content, $headers)) {
 $_POST['mail_sent'] = 'yes';
}
  header('Location: contact.html');
  exit();


Et dans la page contact.html (qui pour le coup doit-être interprétée en php)

<?php if ($_POST['mail_sent'] === 'yes'):?>
<div>Hourra !!!</div>
<?php endif; unset($_POST['mail_sent'];?>

A placer là où vous souhaitez voir apparaître votre message.

PS :
- Bien sûr contact.html devra commencer par un basique session_start() Smiley cligne
- Pour interpréter la page contact.html en php passez soit par un htaccess ou remplacez-le par contact.php
Modifié par Greg_Lumiere (31 Dec 2018 - 10:25)
Bonjour Greg_Lumiere,

Je pensais plus à quelque chose comme :

$okMessage = 'Contact form successfully submitted. Thank you, I will get back to you soon!';

et
mail($sendTo, $subject, $emailText, implode("\n", $headers));

        $responseArray = array('type' => 'success', 'message' => $okMessage);
}


Mais ça ne fonctionne pas.

J'aimerai garder la page contact en hmtl !

Merci d'avance.
Modérateur
Entendez que quoi que vous fassiez afficher via votre page de script cela n'apparaîtra pas aux yeux de votre visiteur du fait de la redirection vers contact.html.

Vous voici donc dans une impasse car il vous est impossible de traiter une donnée dynamique en html.

Dans votre exemple vous définissez une variable $responseArray via votre script mais après la redirection cette variable n'existe plus.


De fait deux options s'offrent à vous. Soit vous vous faites violence et permettez de traiter du php depuis votre page contact ; soit vous abandonnez l'idée d'un retour vers l'utilisateur.

Smiley smile

Nota : j'y pense, sinon temporisez votre redirection le temps d'afficher votre message. Même si en terme d'ergonomie je ne trouve pas cela top, ça reste une éventualité.

if (mail(...)) {
echo '<div>Hourra !</div>';
usleep(Xms);
header(location:...);
}
Modérateur
En ce cas la problématique disparaît:

if (mail(...)) {
$msg = 'Hourraaa !';
} else {
$msg = 'Houuuuuu !';
}
echo "<div>$msg</div>";


Tout simplement !
En fait je ne connais absolument pas le php est suis bien incapable de supprimier la redirection vers contact.html

J'ai trouvé ce script mais je ne le comprends pas !

Vous pouvez m'aider ?

Merci.
Modérateur
6ro a écrit :
En fait je ne connais absolument pas le php est suis bien incapable de supprimier la redirection vers contact.html

J'ai trouvé ce script mais je ne le comprends pas !

Vous pouvez m'aider ?

Merci.
Ha oui, alors sans connaissance je reconnais que c'est une belle galère.

Aller pour la nouvelle année, je reprends votre script de départ, y intègre un message à l'attention du visiteur et vire la redirection.

C'est partit !

<?php
$name = $_POST['name'];
$email = $_POST['email'];
$phone = $_POST['phone'];
$call = $_POST['call'];
$website = $_POST['website'];
$priority = $_POST['priority'];
$type = $_POST['type'];
$message = $_POST['message'];
$formcontent=" From: $name \n Phone: $phone \n Call Back: $call \n Website: $website \n Priority: $priority \n Type: $type \n Message: $message";
$recipient = "contact@6ro.fr";
$subject = "Contact Form";
$mailheader = "From: $email \r\n";
/** jusqu'ici rien de changé **/

/** reset des données envoyées **/
unset($_POST);

/** envoi du courriel **/
if (mail($recipient, $subject, $formcontent, $mailheader)) {
$frontMsg = 'You mail was correctly sent, thank you!';
$frontLink = '<a href="home.html">Return Home</a>';
} else {
$frontMsg = 'An error has occurs. Your message doesn\'t have been sent!';
$frontLink = '<a href="contact.html">Return Form</a>';
}

/** Affichage du message pour l'utilisateur **/
echo '<div>', $frontMsg, '</div>';
echo '<p>', $frontLink, '</p>';
?

Ça fait le job ! Smiley biggrin
Modifié par Greg_Lumiere (31 Dec 2018 - 13:48)
Modérateur
En passant quelques trucs me chiffonnent:
* côté script, vous ne sécurisez aucune donnée de saisie ; voyez comme nombre de sujet traite de ceci à travers le forum.
* votre formulaire ne contient qu'un nombre minime de champs alors que côté script vous en traitez bien plus. Vous devriez avoir un champs pour chaque donnée $_POST récupérée côté script sinon il vous faut les virer.
* vous dites ne rien connaître au Php mais pourtant vous vous lancez dans le traitement de données dynamiques. Sans un apprentissage des fondements du langage votre quêtes risque fort de ressembler aux travaux d'Hercules.
* malgré vos maigres compétences vous souhaitez utiliser une API (reCaptcha)... j'en reste dubitatif.

En somme, vous n'avez pas finis de mâcher du code, bonne digestion ! Smiley cligne

Et bonne année bien sûr ! Smiley biggrin
Oui c'est bien pourquoi je suis sur ce forum j'aimerais juste un formulaire de contact avec 3 champs, en sécurisant les données saisies, un envoie par mail et la possibilité d'utiliser reCAPTCHA invisible.

Vous vous êtes basé sur le script du premier post, depuis j'utilise celui-ci :

<?php
session_start();//on démarre la session
// $errors = [];
//On check les infos transmises lors de la validation
  if(!empty($errors)){ // si erreur on renvoie vers la page précédente
  $_SESSION['errors'] = $errors;//on stocke les erreurs
  $_SESSION['inputs'] = $_POST;
  header('Location: contact.html');
  }else{
  $_SESSION['success'] = 1;
  $headers  = 'MIME-Version: 1.0' . "\r\n";
  $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
  $headers .= 'FROM:' . htmlspecialchars($_POST['email']);
  $to = 'contact@xxxxx.fr'; // Insérer votre adresse email ICI
  $subject = 'Message envoyé par ' . htmlspecialchars($_POST['name']);
  $message_content = '
  <table>
  <tr>
  <td><b>Emetteur du message:</b></td>
  </tr>
  <tr>
  <td>'. $subject . '</td>
  </tr>
  <tr>
  <td><b>Contenu du message:</b></td>
  </tr>
  <tr>
  <td>'. htmlspecialchars($_POST['message']) .'</td>
  </tr>
  </table>
  ';
mail($to, $subject, $message_content, $headers);
  header('Location: contact.html');
  }
Modérateur
Oui, je n'ai pas pensé à parcourir l'intégralité du sujet, meaculpa.

L'adaptation reste facile (même pour vous).

Il vous suffit de virer tout ce qu'il y après </table>';
et d'y apposer tout ce que j'ai mis à partir de unset en y remplaçant les variables contenues dans la fonction mail() par leurs homologues.
Modifié par Greg_Lumiere (31 Dec 2018 - 13:22)
Pages :