Mangeur de cigogne Hébergement du site en PHP et Mysql par WDMédia-hébergement
Vous aussi adpotez les éléPHPants de Vincent Pontier !


Rechercher dans le forum

Mots-clés :

Trouver :
un de ces termes tous les termes

Depuis :
7 j 15 j 30 j


Retour à l'index du forum

Condition pour envoyer un mail

Message original de celine

Le : 23/09/2008 à 16:34:10

Dejà lu 279 fois avant vous

Bonjour à tous,

J'ai un petit problème avec mon code et la super débutante que je suis vous crie "A l'aide"
voici le bout de formulaire qui nous interresse
echo <input type="checkbox" id="A"name="A"> La réponse est A'."\n";
echo <input type="checkbox" id="B"name="B"> La réponse est B'."\n";

Donc on pose une question et plusieurs choix sont possibles
Je voudrai que:
si et seulement si A est coché alors le mail est envoyé (pas les 2 ou aucun ou juste B seulement A)

Mon but est que la personne coche "j'ai lu et accepte blabla" et pas "j'ai lu et refuse blabla"

Re: Condition pour envoyer un mail

Réponse de Maljuna Kris

Le : 23/09/2008 à 16:57:24

Saluton,
On va supposer que le formulaire est en method='POST'
if(isset($_POST['A']) && !isset($_POST['B'])){j'envoie le mail;}

Re: Condition pour envoyer un mail

Réponse de celine

Le : 24/09/2008 à 10:00:25

salut,

Histoire de bien comprendre... c le ! de isset qui dit et pas B?

Voila ce que j'ai deja utilisé

if (isset($_POST['envoi']))
{
// On va vérifier les variables et l'email ...
$email = (IsEmail($email)) ? $email : ''; // soit l'email est vide si erroné, soit il vaut l'email entré
$err_formulaire = (IsEmail($email)) ? false : true;

if (($nom != '') && ($prenom != '') && ($email != ''))
{
// les 3 variables sont remplies, on génère puis envoie le mail
$headers = 'From: '.$nom.' '.$prenom.' <'.$email.'>' . "\r\n";

// envoyer une copie au visiteur ?
if ($copie == 'oui')
{
$cible = $destinataire.','.$email;
}
else
{
$cible = $destinataire;
};

// Remplacement de certains caractères spéciaux
$message = html_entity_decode($message);
$message = str_replace('&#039;',"'",$message);
$message = str_replace('&#8217;',"'",$message);
$message = str_replace('<br>','',$message);
$message = str_replace('<br />','',$message);

// Envoi du mail
if (mail($cible, "OBJET DU MAIL IMPOSE", $msg, $message, $headers))
{
echo '<p>'.$message_envoye.'</p>'."\n";
}
else
{
echo '<p>'.$message_non_envoye.'</p>'."\n";
};
}
else
{
// une des 3 variables (ou plus) est vide ...
echo '<p>'.$message_formulaire_invalide.' <a href="design.php">Retour au formulaire</a></p>'."\n";
$err_formulaire = true;
};
}; // fin du if (!isset($_POST['envoi']))

Une connaissance m'a aidé à faire ca... dc j'ajoute le if suivant a la suite ou il y a une liaison a faire?

Merci

Re: Condition pour envoyer un mail

Réponse de Maljuna Kris

Le : 24/09/2008 à 11:31:13

Demande donc à ta connaissance. ;>)) (ça fait très vieille France, cette expression)

Sans rire, il vaudrait mieux tester avant tout ce bouzin si c'est pour, en définitive, ne pas l'envoyer.

Au passage, d'où récupères-tu $nom, $prenom, $email, copie voire $destinataire ?

Re: Condition pour envoyer un mail

Réponse de celine

Le : 24/09/2008 à 14:55:18

Bah il est en voyage pour le boulot j en ai pour au moins un moi a attendre:( bah c souvent utilise chez moi en tout cas

je les récupère d'un formulaire
tous les tests que j ai tente me font tout plante en fait... :((

Re: Condition pour envoyer un mail

Réponse de Maljuna Kris

Le : 24/09/2008 à 15:12:38

je les récupère d'un formulaire

Je m'en doute, mais que fais-tu entre leur arrivée via $_POST et leur utilisation dans ce script ?

Re: Condition pour envoyer un mail

Réponse de celine

Le : 24/09/2008 à 20:11:16

Je pose quelques questions comme l adresse leur site etc
et les données sont reprise dans le mail
je rassure pas de but malveillant c pour créer une carte de visite... et les personnes qui en veulent une doivent lire le contrat qui dit que les données sont confidentielle etc

et en plus je voudrai ajouter tout a la fin...
je suis un humain
je suis un robot...
j'ai lu que les robots cochaient tout ou rien dc ca m évitera aussi des mauvaises surprises

pour résumer...

Le mail est envoyé si et seulement si
la case "j'ai lu le contrat" est cochée et pas "je n'ai pas lu le contrat"
et
la case "je suis un humain" est cochée et pas "je suis un robot"

Je me complique peut être la vie?

Re: Condition pour envoyer un mail

Réponse de Maljuna Kris

Le : 24/09/2008 à 21:58:28

Ce n'est pas mon propos, je veux juste savoir par quel biais de programmation les valeurs contenues dans l'array $_POST se retrouvent dans tes variables de script.

Re: Condition pour envoyer un mail

Réponse de celine

Le : 25/09/2008 à 10:13:25

c'est la que je me rend compte à quel point je suis nule en php :((

alors... pour recuperer ce qu il y a dans le formulaire

$nom = (isset($_POST['nom'])) ? Rec($_POST['nom']) : '';
$prenom = (isset($_POST['prenom'])) ? Rec($_POST['prenom']) : '';
$email = (isset($_POST['email'])) ? Rec($_POST['email']) : '';

etc pour ttes les données

$msg=."\nNom : ".$nom."\nPrenom : ".$prenom."\nEmail : ".$email."\nSite Web: ".$site."\n"; etc pour toutes les données

partie que je comprend pas beaucoup lol

if (isset($_POST['envoi']))
{
// On va vérifier les variables et l'email ...
$email = (IsEmail($email)) ? $email : ''; // soit l'email est vide si erroné, soit il vaut l'email entré
$err_formulaire = (IsEmail($email)) ? false : true;

if (($nom != '') && ($prenom != '') && ($email != ''))
{
// les 3 variables sont remplies, on génère puis envoie le mail
$headers = 'From: '.$nom.' '.$prenom.' <'.$email.'>' . "\r\n";

// envoyer une copie au visiteur ?
if ($copie == 'oui')
{
$cible = $destinataire.','.$email;
}
else
{
$cible = $destinataire;
};

// Remplacement de certains caractères spéciaux
$message = html_entity_decode($message);
$message = str_replace('&#039;',"'",$message);
$message = str_replace('&#8217;',"'",$message);
$message = str_replace('<br>','',$message);
$message = str_replace('<br />','',$message);

// Envoi du mail
if (mail($cible, "carte de visite est6", $msg, $message, $headers))
{
echo '<p>'.$message_envoye.'</p>'."\n";
}
else
{
echo '<p>'.$message_non_envoye.'</p>'."\n";
};
}
else
{
// une des 3 variables (ou plus) est vide ...
echo '<p>'.$message_formulaire_invalide.' <a href="design.php">Retour au formulaire</a></p>'."\n";
$err_formulaire = true;
};
}; // fin du if (!isset($_POST['envoi']))

if (($err_formulaire) || (!isset($_POST['envoi'])))



et le formulaire

echo ' <p>'."\n";
echo ' <label for="nom">* Nom :</label>'."\n";
echo ' <input type="text" id="nom" name="nom" value="'.stripslashes($nom).'" tabindex="8" />'."\n";
echo ' </p>'."\n";
echo ' <p>'."\n";
echo ' <label for="prenom">* Prénom :</label>'."\n";
echo ' <input type="text" id="prenom" name="prenom" value="'.stripslashes($prenom).'" tabindex="9" />'."\n";
echo ' </p>'."\n";
echo ' </fieldset>'."\n";

et le bouton envoyer
echo ' <div style="text-align:center;"><input type="submit" name="envoi" value="Envoyer" /></div>'."\n";


j'espere que ca repond a ta question....

Re: Condition pour envoyer un mail

Réponse de Maljuna Kris

Le : 25/09/2008 à 10:38:51

Mon sentiment profond c'est que nous avons là une usine à gaz, apparemment sécurisée (il faudrait voir de plus près ce que fait la fonction utilisateur Rec(), par exemple), mais pas optimisée le double appel à la fonction IsEmail() autre exemple.
A quel endroit de l'ordinogramme de tout ce processus serait-il pertinent de tester A et B ?
Juste après le test de $_POST['envoi'] m'apparaît intuitivement un bon choix puisque si ce test avorte, il ne sert à rien de tester le reste puisqu'on n'enverra pas.
Mais sans use vision d'ensemble du script difficile de me prononcer plus avant.
De grâce ne nous mets pas ton code ici, utilise le wall.
Dankon.

Re: Condition pour envoyer un mail

Réponse de celine

Le : 25/09/2008 à 13:47:24

Désolée pour le wall j'avais pas fait attention :s

Tout le script est présent il manque juste les questions qui seront présentes juste avant le bouton envoyer

http://phpdebutant.org/wall772.php


Je me disais qu'en plus d'être sure que le contrat soit lu ça pouvait être un anti spam du même coup
J'ai vu des captcha pour l anti spam mais c'est super compliqué (enfin pour moi)


Re: Condition pour envoyer un mail

Réponse de celine

Le : 25/09/2008 à 14:00:18

Désolée pour le wall j'avais pas fait attention :s

Voila le script en entier il manque juste les questions juste avant le bouton envoyer

http://phpdebutant.org/wall772.php

Je m'était dit qu'en plus d'être sure qu'ils sont d'accord avec le contrat ça pouvait devenir un antispam
J'ai essayé de regarder au captcha mais c'est super compliqué

Re: Condition pour envoyer un mail

Réponse de celine

Le : 25/09/2008 à 14:01:05

Désolée pour le wall j'avais pas fait attention :s

Voila le script en entier il manque juste les questions juste avant le bouton envoyer

http://phpdebutant.org/wall772.php

Je m'était dit qu'en plus d'être sure qu'ils sont d'accord avec le contrat ça pouvait devenir un antispam
J'ai essayé de regarder au captcha mais c'est super compliqué

Re: Condition pour envoyer un mail

Réponse de celine

Le : 25/09/2008 à 14:05:59

Désolée pour le Wall j'avais pas vu

Voila le script en entier il manque juste les questions juste avant le bouton envoyé
http://phpdebutant.org/wall772.php

je voulais être sure qu'ils soient d'accord avec le contrat et dans le même temps être sure que s'ils soient pas un robot
Il existe des captcha je sais mais je trouve ça super compliqué

Re: Condition pour envoyer un mail

Réponse de luce

Le : 25/09/2008 à 20:58:35

Salut,

Tu ne parles pas de la version php, donc, je vais supposer que tu es en php5.
Et du coups, je ne comprends pas pourquoi tu te fais chier avec ton eregi() alors que php5 possède des filtres bien utile !
http://www.php.net/manual/fr/function.filter-var.php
Plus particulièrement :

filter_var('bob@example.com', FILTER_VALIDATE_EMAIL)



Mais tu as aussi des filtres pour les input (GET, POST...)

Ensuite, avec manico, on en parlait par mail hier, et j'ai trouvé une petite astuce assez sympa.
Avant la fonction mail(), tu parles les 4 variables dans un str_replace(), que tu montes comme ceci :

<?php
        $patterns
[0] = '/cc:/';
        
$replacements[0] = '**cc**:';
        
$destinataire preg_replace($patterns$replacements$destinataire);
        
$sujet preg_replace($patterns$replacements$sujet);
        
$texte preg_replace($patterns$replacements$texte);
        
$entete preg_replace($patterns$replacements$entete);
?>



Manico utilisait un preg_match() pour trouver cc: et ensuite, l'enchainer par un die(), mais voila, si tu as un anglophone qui t'envoi un mail, sujet : "my acc: luce"
et bien, son message passer à la trappe.
Avec mon astuce, c'est bien plus marrant, le message est bien envoyé, mais si il y a un cc: dans l'entete, il est remplacé par un **cc**:
donc, en cas d'ajout d'un bcc ou un cc, et bien il se retrouve bien dans l'entete mais n'est pas considere comme copie carbone.
De l'autre, ca ne bloque pas les messages !

Re: Condition pour envoyer un mail

Réponse de celine

Le : 26/09/2008 à 10:07:45

OUPS j'avais un bug ... je ne pouvais plus rien poster mais ca n a pas l air d être le cas

desoleeee desoleee pour les post

Sinon bonjour tout le monde

Je suis toute embrouillée la.. Oui c'est du php5 mais c'est pas bon ce que j'ai?
Le sujet du mail est imposé, le mail contient les valeurs récupérées dans le formulaire, et éventuellement un commentaire.

Re: Condition pour envoyer un mail

Réponse de luce

Le : 27/09/2008 à 14:49:25

Salut,

Dissons que dans php5, tu as des fonctions qui servent à faire exactement (voir en mieux) tes fonctions ismail et rec, donc, pourquoi ne pas les exploiter, plutot que de faire du lourd avec ton eregi().

Tu as d'ailleurs pas mal d'option de filtrage, tu les as ici : http://www.php.net/manual/fr/filter.constants.php

Ensuite si je ne me trompe pas, tu as une erreur dans l'envoi de ton mail :


if (mail($cible, "carte de visite clavier", $msg, $message, $headers))


Le $message est à la place du $headers, et le headers, à la place des options.

Je crois que tu voulais faire ceci :


if (mail($cible, "carte de visite clavier", $msg.$message, $headers))



Ensuite, je te recommande de faire ça :

<?php
        $patterns
[0] = '/cc:/'
        
$replacements[0] = '**cc**:'
        
$cible preg_replace($patterns$replacements$cible); 
        
$msg preg_replace($patterns$replacements$msg); 
        
$message preg_replace($patterns$replacements$message); 
        
$headers preg_replace($patterns$replacements$headers); 
 if (
mail($cible"carte de visite clavier"$msg.$message,  $headers))
?>


Pour être sur qu'une mechante personne ajoute un cc: ou bcc:, et comme je dis dans mon message, à la lecture si c'est legitime le cc:, et bien c'est pas trop grave, par contre, il ne faut pas que ton script utilise les copies carbones.

Re: Condition pour envoyer un mail

Réponse de celine

Le : 29/09/2008 à 10:40:04

salut

CC c'est copie carbone ok je n'en utilise pas

J'ai teste et il me met "Parse error: syntax error, unexpected $end in /var/www/vhosts/capimatique.be/httpdocs/contact/voy1.php on line 212"

mais au début çà fonctionnait bien je voulais juste ajouter des conditions avant que le mail soit envoyé


Re: Condition pour envoyer un mail

Réponse de luce

Le : 29/09/2008 à 10:45:59

Salut,

Oui mais bon, il faudrait savoir ce que tu as modifié !

Re: Condition pour envoyer un mail

Réponse de celine

Le : 29/09/2008 à 19:11:04

l erreur est arrivée quand j'ai ajouté le code que tu as donné
"Avant la fonction mail(), tu parles les 4 variables dans un str_replace(), que tu montes comme ceci :"

j'avais pas encore teste le "filter_var('bob@example.com', FILTER_VALIDATE_EMAIL) " je fais une chose à la fois
Retour à l'index du forum


Ajouter une réponse

Nom :

Email :

Titre :

Message :

Combien font 3 + 2 ?

Mise en forme : gras = [b]...[/b], italic = [i]...[/i], souligné = [u]...[/u], citation = [quote]...[/quote], lien = [url]liens_externe[/url] ou [url nom=texte]liens_externe[/url], code source : [code]...[/code]

Recevoir les réponses par mail :
Oui Non

Mémoriser mon nom et mon email :
Oui Non

 

Charte des forums PHPDébutant

Bienvenue à vous,

Vous voici donc prêt à poster sur les forums de PHPDébutant. Avant toute chose, merci de prendre le temps de lire les quelques lignes qui suivent.

Attention, à partir du moment ou vous postez dans les forums, vous acceptez la présente charte. Si votre message est modéré ou supprimé, vous ne pourrez pas dire que vous n'étiez pas au courant des règles !

Pourquoi une charte

Le but de cette charte est simple : que ces forums restent cordiaux et que les personnes aidant les autres ne se sentent pas lésées, insultées, critiquées. Pour que ces forums fonctionnent, il faut des personnes qui répondent aux questions. Pour que celles ci restent sur le forum, il faut les traiter avec respect, et ne pas les confondre avec des bonnes poires, esclaves, etc...

Mesures de régulation

  • Un nouveau message ne disant pas bonjour, ou insultant, dont le titre est tout en majuscules, pourra être supprimé sans justification (raisons non limitatives).
  • Prenez le temps de vérifier que la question que vous allez poser n'a pas déjà été posée, à l'aide du formulaire de recherche.
  • Prenez également le temps de vérifier que la réponse à votre question ne se trouve pas dans les tutoriaux. Nous ne pouvons pas répeter pour chaque visiteur tous les cours, il sont écrits, profitez-en (dans l'ordre tant qu'à faire) !
  • Nous ne faisons pas de scripts tout prêts. Nous aidons et vous guidons pour que vous puissiez trouver vous même la réponse, ce qui est beaucoup plus formateur.
  • Si vous comptez poster un message publicitaire, abstenez-vous. Au mieux le message sera supprimé, au pire les habitués descendront votre service en flamme.
  • Pour tout message de recrutement, précisez bien votre demande. Inutile de poster pour trouver un développeur pour faire gratuitement votre site de webmastering qui vous rapportera plein de sous. Les seuls coups de mains donnés en développement sont pour des associations ou des sujets passionnant un développeur.
  • Toute personne tenant des propos racistes ou illicites sera bannie et pourra faire l'objet de poursuites.
  • L'humour étant très présent sur ces forums, ne réagissez pas violemment à des propos qui pourraient être à prendre au second degré et avec de l'humour.
  • Attention aux trolls ! Leur multiplication peut entraîner la mort des forums, et sans forum, plus d'aide !
  • Respectez les thèmes des forums. Pensez aussi à vérifier que votre message n'a pas été déplacé si vous le croyez effacé.

Conseils

  • N'oubliez pas que les personnes à qui vous vous adressez sont des bénévoles qui donnent de leur temps pour vous. Si vous êtes méchants avec eux, il n'aideront plus et vous n'aurez plus d'aide !
  • Ne soyez pas pressé. Nous avons une vie aussi, et nous ne sommes par forcément tout le temps disponibles.
  • N'oubliez pas que les smileys sont la pour faire comprendre l'humeur dans laquelle vous rédigez un message. Il est indispensable de mettre des smileys quand vous faites de l'humour, sinon le message pourrait être mal perçu (ca serait quand même idiot de plomber l'ambiance en faisant de l'humour !).
  • Surveillez votre orthographe, nous ne vous demandons pas d'être littéraire, mais que votre message soit au moins compréhensible. Evitez à tout prix le style SMS.
  • Expliquez clairement le problème, ce n'est pas toujours facile, mais mieux vaut essayer de le faire le plus possible.
  • Ne postez pas de questions trop vagues du genre "comment faire un forum". Cela ne sert à rien, cela ne s'explique pas sur un coin de forum.
  • Mettez un titre clair, correspondant au sujet que vous allez poster. A l'aide, au secours, etc... ne sont pas d'une grande utilité pour ceux qui vont vous aider. Parfois nous passons en coup de vent, et si nous ne savons pas ce que va contenir le message, nous ne le regarderons même pas.
  • Ne mettez par [URGENT] ou autre joyeuseté du genre dans vos titres de messages. Cela irrite les gens (il y'a plus urgent dans la vie, pensez aux gens qui meurent de faim ou ayant besoin des pompiers, ça c'est urgent), et vous n'aurez pas votre réponse plus vite pour autant.
  • Si vous connaissez déjà à quel domaine votre question d'adresse (par exemple mysql, html, php, javascript), n'hésitez pas à le marquer au début de votre message, avec un [html] par exemple (notez les minuscules).
  • Ne dites pas "ça marche pas". Il y a toujours des raisons. Je vous invite à consulter le tutorial "ça marche pas" qui vous aidera à mieux expliquer votre problème.
  • Ne postez pas 36000 lignes de code. Sur le forum, le code apparaît non coloré et sans indentation, ce qui est illisible. Au dessus de 5 lignes, plus personne ne lit et vous n'aurez pas de réponse. Utilisez le wall
  • En règle générale restez courtois et clair, n'oubliez pas que la politesse fait partie de la vie courante. Il est de bon ton de dire bonjour même pour une réponse, même plusieurs fois dans la journée (ceux qui vous lisent n'ont pas forcément lu vos autres messsages)

La Fin

Avec tout ces conseils vous augmenterez les chances de réponse, leur pertinence et leur rapidité

Voilà, ça sera tout, bonne écriture :)

Fermer les règles et poster un message


www.phpdebutant.org © 2008 - L'équipe de phpDebutant - Hébergement : WDMédia-hébergement