Page 1 sur 2

Un formulaire PHP qui me renvoie sur un site dont je ne veux pas.

Posté : 18 nov. 2021, 11:24
par herde2
Bonjour,
Je ne débute pas en PHP, je n'y connais rien.
J'ai un site avec un formulaire (HTML/CSS) qui fait appel à un fichier PHP.
Voici le fichier au complet :
<?php
if(isset($_POST['email'])) {
 
    // EDIT THE 2 LINES BELOW AS REQUIRED
    $email_to = "mon adresse email";
    $email_subject = "New Message Received";
 
    function died($error) {
        // your error code can go here
        echo "We are very sorry, but there were error(s) found with the form you submitted. ";
        echo "These errors appear below.<br /><br />";
        echo $error."<br /><br />";
        echo "Please go back and fix these errors.<br /><br />";
        die();
    }
 
    // validation expected data exists
    if( !isset($_POST['email']) ||        
        !isset($_POST['comments'])) {
        died('We are sorry, but there appears to be a problem with the form you submitted.');       
    }
 
    $email_from = $_POST['email']; // required    
    $comments = $_POST['comments']; // required
 
    $error_message = "";
    $email_exp = '/^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/';
  if(!preg_match($email_exp,$email_from)) {
    $error_message .= 'The Email Address you entered does not appear to be valid.<br />';
  }
    $string_exp = "/^[A-Za-z\s.'-]+$/";

  if(strlen($comments) < 2) {
    $error_message .= 'The Comments you entered do not appear to be valid.<br />';
  }
  if(strlen($error_message) > 0) {
    died($error_message);
  }
    $email_message = "Form details below.\n\n";
 
    function clean_string($string) {
      $bad = array("content-type","bcc:","to:","cc:","href");
      return str_replace($bad,"",$string);
    }
 
    $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();
@mail($email_to, $email_subject, $email_message, $headers);
echo "<meta http-equiv='refresh' content=\"0; url=site que je ne désire pas\">";
?>
 
<?php
}
?>
Ci je remplace l'url : "le site dont je ne veux pas" par celle de mon site, je tombe sur une page blanche après validation du formulaire.
L'idéal, serait de ne pas renvoyer la page sur un site mais de rester sur la page sur laquelle on était.
Merci pour votre aide,
rd

Re: Un formulaire PHP qui me renvoie sur un site dont je ne veux pas.

Posté : 18 nov. 2021, 11:57
par finipe
Il date un peu ce code, il y a pas mal de trucs qui seraient sérieusement améliorables, mais bon. Pour ce qui est de la redirection, il serait plus judicieux d'utiliser un header('Location: page.html') plutôt qu'une redirection avec balise meta.

Il faut donc remplacer ça :

Code : Tout sélectionner

echo "<meta http-equiv='refresh' content=\"0; url=site que je ne désire pas\">"
...par ça :

Code : Tout sélectionner

header('Location: mapage.html'); exit;
Le problème c'est que s'il y a une erreur dans la soumission du formulaire, il y a des echo qui envoient du texte, et du coup ça fera planter la redirection header.
En fait, le formulaire en lui-même serait à revoir !

Re: Un formulaire PHP qui me renvoie sur un site dont je ne veux pas.

Posté : 18 nov. 2021, 12:27
par herde2
Merci beaucoup finipe, je tenterai dès ce soir.
Bonne journée,
rd

Re: Un formulaire PHP qui me renvoie sur un site dont je ne veux pas.

Posté : 18 nov. 2021, 12:30
par herde2
comme cela ?
// create email headers
$headers = 'From: '.$email_from."\r\n".
'Reply-To: '.$email_from."\r\n" .
'X-Mailer: PHP/' . phpversion();
@mail($email_to, $email_subject, $email_message, $headers);
header('Location: mapage.html');
exit;
?>

<?php
}
?>

Re: Un formulaire PHP qui me renvoie sur un site dont je ne veux pas.

Posté : 18 nov. 2021, 12:33
par herde2
Et les commentaires (qui arrivent bien à destination) sont placés dans les "spams" ou "promotions".
Y'a t'il une ligne à changer ?
Encore MERCI,
rd

Re: Un formulaire PHP qui me renvoie sur un site dont je ne veux pas.

Posté : 18 nov. 2021, 14:29
par finipe
Pour ne pas finir dans les spams c'est un peu plus délicat. Il faut essayer de respecter un maximum de préconisations, en ajoutant des headers dans le mail, comme par exemple : X-auth-smtp-user, X-abuse-contact, List-Unsubscribe si c'est une newsletter.
On peut aussi ajouter les normes de sécurité DMARC ou DKIM, mais ce n'est pas toujours possible selon l'hébergeur.

Un bon outil de test est le suivant : https://www.mail-tester.com/

Re: Un formulaire PHP qui me renvoie sur un site dont je ne veux pas.

Posté : 18 nov. 2021, 14:56
par herde2
Merci pour ces précisions. Puis-je savoir où et comment placer des headers comme X-auth-smtp-user ou X-abuse-contact.
Ce n'est pas que je débute, simplement que je n'y connais rien. Merci pour ton aide finipe ;)

Re: Un formulaire PHP qui me renvoie sur un site dont je ne veux pas.

Posté : 18 nov. 2021, 15:43
par finipe
Juste après le X-mailer c'est bien. Après ça fait pas tout, loin de là ! Il faut aussi que le contenu de ton email soit :

- bien rédigé
- juste syntaxiquement (si tu utilises du html notamment, il faut que tes balises soient bien ordonnées, fermées quand c'est nécessaire, etc.)
- éviter les spam words (genre "gratuit", "cadeau", etc.)
- que ton hébergeur n'ait pas une réputation de daube (donc déjà, évite les hébergeurs gratuits, parce que tous les spammeurs les utilisent)
- ne pas envoyer 200 mails en 1 seconde
- et probablement des tas d'autres trucs que chaque client mail est le seul à savoir

Re: Un formulaire PHP qui me renvoie sur un site dont je ne veux pas.

Posté : 18 nov. 2021, 18:43
par herde2
Merci pour tous ces conseils, mais pouvez-vous me rédiger la ligne à remplacer ainsi que la nouvelle.
Pour le reste, rien de méchant, c'est juste un formulaire de contact pour un site perso que personne n'ira voir. Mais ça me plaît, excepté le PHP ;)
Encore merci et bonne soirée,
rd

Re: Un formulaire PHP qui me renvoie sur un site dont je ne veux pas.

Posté : 18 nov. 2021, 19:25
par @rthur
Merci pour tous ces conseils, mais pouvez-vous me rédiger la ligne à remplacer ainsi que la nouvelle.
Bonjour Herde2,
PHPfrance est un forum d'entraide, mais nous ne sommes pas là pour faire le code à ta place mais pour expliquer comment faire et te guider dans la réalisation de ton projet.
Donc à toi d'essayer de le faire, de tester et si ça ne marche pas de revenir vers le forum. :D

Re: Un formulaire PHP qui me renvoie sur un site dont je ne veux pas.

Posté : 20 nov. 2021, 02:18
par two3d
Merci pour List-Unsubscribe, je ne connaissais pas ;)

Re: Un formulaire PHP qui me renvoie sur un site dont je ne veux pas.

Posté : 20 nov. 2021, 23:43
par finipe
Merci pour List-Unsubscribe, je ne connaissais pas ;)
J'ai codé une newsletter il n'y a pas longtemps, et c'est un entête qui semble prisé par les clients mails !

Re: Un formulaire PHP qui me renvoie sur un site dont je ne veux pas.

Posté : 21 nov. 2021, 00:48
par two3d
[un peu hors sujet, désolé]
Tu veux bien mettre la ligne de code avec cette entête s'il te plaît ? Dire pourquoi tu l'utilise,... J'ai aussi créé un "système de newsletter", je vais peut être la rajouter.
[/hors sujet]

Re: Un formulaire PHP qui me renvoie sur un site dont je ne veux pas.

Posté : 21 nov. 2021, 15:37
par finipe
Alors du coup, ça servira aussi au topic initial, tant qu'à faire :D

Voilà ce que je mets comme entête mails :

Code : Tout sélectionner

MIME-Version: 1.0\r\n Content-type: text/html; charset=UTF-8\r\n To: Jean-Jacques Destinataire <[email protected]>\r\n From: Dieu <[email protected]>\r\n Reply-To: [email protected]\r\n X-Mailer: PHP/".phpversion()."\r\n X-auth-smtp-user: [email protected]\r\n X-abuse-contact: [email protected]\r\n List-Unsubscribe: <mailto: [email protected]?subject=Désinscription newsletter, id client ".$_ID_CLIENT.">, <https://www.monsite.com/desinscription.php?id=".$_ID_CLIENT."&code=".$un_code_unique.">\r\n List-Unsubscribe-Post: List-Unsubscribe=One-Click\r\n
La page desinscription.php est codée de sorte que le simple fait d'aller sur cette page, avec en url l'id du client et une variable unique, permet la désinscription du client (c'est le fameux "one-click").

Pour la variable unique, je me suis pas trop fait chier : j'ai concaténé l'id client et sa date d'inscription, puis md5 le tout, et juste les 6 premiers caractères (c'est pas vraiment une donnée ultra sensible, c'est juste pour éviter une désinscription de quelqu'un qui ne veut pas être désinscrit)

Ça, plus quelques petits détails (email correctement rédigé et syntaxiquement juste, pas de balises craignos genre <script> ou <iframe>, pas de spamwords...), je suis à 8,9/10 sur mail-tester.

Re: Un formulaire PHP qui me renvoie sur un site dont je ne veux pas.

Posté : 21 nov. 2021, 15:43
par finipe
J'ajoute que pour l'envoi de nombreux mails, je le fais par paquets de 50, à intervalles de 2 heures.
Et je n'utilise pas Cron, mais je profite des utilisateurs du site à leur insu : lorsque quelqu'un (quel qu'il soit) charge une page, je vérifie un timestamp, et si le timestamp en question est dépassé, alors boum j'envoie les 50 mails suivants, et je mets le timestamp à jour avec +2h. Comme ça, ce sont les internautes qui bossent pour moi, et j'ai pas besoin de m'embêter avec des taches Cron.