Problème formulaire + PHP

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème formulaire + PHP

Re: Problème formulaire + PHP

par moogli » 31 août 2011, 17:32

Re: Problème formulaire + PHP

par c_bou98 » 31 août 2011, 16:51

Tout fonctionne (presque) avec ce code :
<?php
if(!empty($_POST['m1'])){
switch($_POST['m1'])
{
    case('1'): { $choix[1]='Domicile'; break ; }
    case('2'): { $choix[1]='Nul'; break ; }
    case('3'): { $choix[1]='Extérieur'; break ; }
}
$match[1] = 'St Florent des Bois - St Prouant/Monsireigne';
}
if(!empty($_POST['m2'])){
switch($_POST['m2'])
{
    case('1'): { $choix[2]='Domicile'; break ; }
    case('2'): { $choix[2]='Nul'; break ; }
    case('3'): { $choix[2]='Extérieur'; break ; }
}
$match[2] = 'Hermenault Sérigné - Grosbreuil';
}
if(!empty($_POST['m3'])){
switch($_POST['m3'])
{
    case('1'): { $choix[3]='Domicile'; break ; }
    case('2'): { $choix[3]='Nul'; break ; }
    case('3'): { $choix[3]='Extérieur'; break ; }
}
$match[3] = 'Meilleraie-Tillay - St Aubin la Plaine';
}
if(!empty($_POST['m4'])){
switch($_POST['m4'])
{
    case('1'): { $choix[4]='Domicile'; break ; }
    case('2'): { $choix[4]='Nul'; break ; }
    case('3'): { $choix[4]='Extérieur'; break ; }
}
$match[4] = 'Nieul le Dolent - Les Essarts 2';
}
if(!empty($_POST['m5'])){
switch($_POST['m5'])
{
    case('1'): { $choix[5]='Domicile'; break ; }
    case('2'): { $choix[5]='Nul'; break ; }
    case('3'): { $choix[5]='Extérieur'; break ; }
}
$match[5] = 'Talmont St Hilare - Roche/Y Robretières 2';
}
if(!empty($_POST['m6'])){
switch($_POST['m6'])
{
    case('1'): { $choix[6]='Domicile'; break ; }
    case('2'): { $choix[6]='Nul'; break ; }
    case('3'): { $choix[6]='Extérieur'; break ; }
}
$match[6] = 'Roche/Y Généraudière - Nalliers Foot Espoir';
}
$destinataire = '[email protected]';
$sujet = 'Résultats';
$left = 'Pronostics';
$right = '';
$msg =  '';
$i=1;
while(isset($match[$i]))
{
$msg .= "\r\n".'a choisi "'.$choix[$i].'" pour '.$match[$i] ;
$i++; 
}
$var = 'From '. $left.' <'.$right.'>' ."\r\n";
mail($destinataire, $sujet, $msg, $var);
?>
Je reçois donc ce mail :

From Pronostics <>

a choisi "Nul" pour St Florent des Bois - St Prouant/Monsireigne
a choisi "Domicile" pour Hermenault Sérigné - Grosbreuil
a choisi "Nul" pour Meilleraie-Tillay - St Aubin la Plaine
a choisi "Extérieur" pour Nieul le Dolent - Les Essarts 2
a choisi "Nul" pour Talmont St Hilare - Roche/Y Robretières 2
a choisi "Domicile" pour Roche/Y Généraudière - Nalliers Foot Espoir

Il ne me manque plus désormais qu'à comprendre comment rajouter avant chaque phrase : Prénom NOM ([email protected]) a choisi..

Re: Problème formulaire + PHP

par moogli » 31 août 2011, 16:31

Plus concrètement, ça veut dire ? ^^
<?php
$destinataire = '[email protected]';
$sujet = 'Résultats';
$left = 'Pronostics';
$right = ''; // création de la variable $rigth avec l'affectation de la valeur '' (autrement dit rien)
$msg =  '';
$i=1;
while(isset($match[$i]))
{
   $i++;
   $msg .= "\r\n".'a choisi "'.$choix[$i].'" pour '.$match[$i] ;
}
$var = 'From '. $left.' <'.$right.'>' ."\r\n"; // utilisation de la variable $rigth elle est toujours vide vu que pas utilisée avant
mail($destinataire, $sujet, $msg, $var); // l'entête est conforme a ce que tu reçois. 
?>
ça veux dire que ne comprend pas ton propore code (enfin je commence a avoir un doute sur la paternité du coup).

comme je suis sympa je vais continuer a t'aider, $rigth doit contenir une adresse email (pour faire bien).

@+

Re: Problème formulaire + PHP

par c_bou98 » 31 août 2011, 13:21

Plus concrètement, ça veut dire ? ^^

Re: Problème formulaire + PHP

par moogli » 31 août 2011, 13:04

normal $right n'est modifiée nulle part et tu la crée vide donc tous va bien .......................

Re: Problème formulaire + PHP

par c_bou98 » 31 août 2011, 11:59

Voici mon nouveau code :
<?php
if(!empty($_POST['m1'])){
switch($_POST['m1'])
{
    case('1'): { $choix[1]='Domicile'; break ; }
    case('2'): { $choix[1]='Nul'; break ; }
    case('3'): { $choix[1]='Extérieur'; break ; }
}
$match[1] = 'St Florent des Bois - St Prouant/Monsireigne';
}
if(!empty($_POST['m2'])){
switch($_POST['m2'])
{
    case('1'): { $choix[2]='Domicile'; break ; }
    case('2'): { $choix[2]='Nul'; break ; }
    case('3'): { $choix[2]='Extérieur'; break ; }
}
$match[2] = 'Hermenault Sérigné - Grosbreuil';
}
if(!empty($_POST['m3'])){
switch($_POST['m3'])
{
    case('1'): { $choix[3]='Domicile'; break ; }
    case('2'): { $choix[3]='Nul'; break ; }
    case('3'): { $choix[3]='Extérieur'; break ; }
}
$match[3] = 'Meilleraie-Tillay - St Aubin la Plaine';
}
if(!empty($_POST['m4'])){
switch($_POST['m4'])
{
    case('1'): { $choix[4]='Domicile'; break ; }
    case('2'): { $choix[4]='Nul'; break ; }
    case('3'): { $choix[4]='Extérieur'; break ; }
}
$match[4] = 'Nieul le Dolent - Les Essarts 2';
}
if(!empty($_POST['m5'])){
switch($_POST['m5'])
{
    case('1'): { $choix[5]='Domicile'; break ; }
    case('2'): { $choix[5]='Nul'; break ; }
    case('3'): { $choix[5]='Extérieur'; break ; }
}
$match[5] = 'Talmont St Hilare - Roche/Y Robretières 2';
}
if(!empty($_POST['m6'])){
switch($_POST['m6'])
{
    case('1'): { $choix[6]='Domicile'; break ; }
    case('2'): { $choix[6]='Nul'; break ; }
    case('3'): { $choix[6]='Extérieur'; break ; }
}
$match[6] = 'Roche/Y Généraudière - Nalliers Foot Espoir';
}
$destinataire = '[email protected]';
$sujet = 'Résultats';
$left = 'Pronostics';
$right = '';
$msg =  '';
$i=1;
while(isset($match[$i]))
{
   $i++;
   $msg .= "\r\n".'a choisi "'.$choix[$i].'" pour '.$match[$i] ;
}
$var = 'From '. $left.' <'.$right.'>' ."\r\n";
mail($destinataire, $sujet, $msg, $var);
?>
Et voici ce que je reçois par mail :

From Pronostics <>

a choisi "Domicile" pour Hermenault Sérigné - Grosbreuil
a choisi "Nul" pour Meilleraie-Tillay - St Aubin la Plaine
a choisi "Domicile" pour Nieul le Dolent - Les Essarts 2
a choisi "Nul" pour Talmont St Hilare - Roche/Y Robretières 2
a choisi "Nul" pour Roche/Y Généraudière - Nalliers Foot Espoir
a choisi "" pour

Comme vous pouvez le voir, mon match m1 ne s'affiche pas. De plus, je souhaitais que le nom de la personne, et son adresse mail entre parenthèse s'affichent avant "a choisi..". Exemple :

Prénom NOM ([email protected]) a choisi "Domicile" pour Hermenault Sérigné - Grosbreuil

Merci de votre aide,

Re: Problème formulaire + PHP

par c_bou98 » 30 août 2011, 13:57

Je reçois maintenant le mail, mais presque vide :

"From Pronostics <>" (il n'y a que ça de marquer dans mon mail, alors que je devrais avoir mes 6 résultats..)

Re: Problème formulaire + PHP

par c_bou98 » 26 août 2011, 11:13

C'est bon, mon code fonctionne enfin :
<?php if(!empty($_POST['m1'])){
switch($_POST['m1'])
{
    case('1'): { $choix[1]='Domicile'; break ; }
    case('2'): { $choix[1]='Nul'; break ; }
    case('3'): { $choix[1]='Extérieur'; break ; }
}
$match[1] = 'St Florent des Bois - St Prouant-Monsireigne';
}
if(!empty($_POST['m2'])){
switch($_POST['m2'])
{
    case('1'): { $choix[2]='Domicile'; break ; }
    case('2'): { $choix[2]='Nul'; break ; }
    case('3'): { $choix[2]='Extérieur'; break ; }
}
$match[2] = 'Hermenault Sérigné - Grosbreuil';
}
if(!empty($_POST['m3'])){
switch($_POST['m3'])
{
    case('1'): { $choix[3]='Domicile'; break ; }
    case('2'): { $choix[3]='Nul'; break ; }
    case('3'): { $choix[3]='Extérieur'; break ; }
}
$match[3] = 'Meilleraie-Tillay - St Aubin la Plaine';
}
if(!empty($_POST['m4'])){
switch($_POST['m4'])
{
    case('1'): { $choix[4]='Domicile'; break ; }
    case('2'): { $choix[4]='Nul'; break ; }
    case('3'): { $choix[4]='Extérieur'; break ; }
}
$match[4] = 'Nieul le Dolent - Les Essarts 2';
}
if(!empty($_POST['m5'])){
switch($_POST['m5'])
{
    case('1'): { $choix[5]='Domicile'; break ; }
    case('2'): { $choix[5]='Nul'; break ; }
    case('3'): { $choix[5]='Extérieur'; break ; }
}
$match[5] = 'Talmont St Hilare - Roche/Y Robretières 2';
}
if(!empty($_POST['m6'])){
switch($_POST['m6'])
{
    case('1'): { $choix[6]='Domicile'; break ; }
    case('2'): { $choix[6]='Nul'; break ; }
    case('3'): { $choix[6]='Extérieur'; break ; }
}
$match[6] = 'Roche/Y Généraudière - Nalliers Foot Espoir';
}
$destinataire = '[email protected]';
$sujet = 'Résultats';
$left = 'Pronostics';
$right = '';
$msg =  '';
$i=0;
while(isset($match[$i]))
{
   $i++;
   $msg .= "\r\n".'a choisi "'.$choix[$i].'" pour '.$match[$i] ;
}
$var = 'From '. $left.' <'.$right.'>' ."r/n";
mail($destinataire, $sujet, $msg, $var);
?>
Dernier problème : je ne reçois aucun mail suite à la validation du formulaire. (pour info, j'utilise RoundCube et je suis chez OVH)

Re: Problème formulaire + PHP

par moogli » 25 août 2011, 14:37

En fait, j'en bave tellement avec ce code que j'aimerais juste qu'on me corrige les erreurs (il ne doit plus en rester beaucoup je pense) sur mon code afin que je puisse enfin l'utiliser.. ;)
euh oui mais non, car la prochaine faudra le refaire tu a tout, si tu ne comprend pas comment fonctionne une fonction en php voici un peu de lecture sur le sujet. c'est super simple et très pratique.

dans ton cas tu a un code que tu répète X fois. pour gagner de la place dans le fichier, pour que ton code soit plus lisible et surtout plus maintenable on utilise une fonction (c'est comme empty, preg_match ou ini_set mais c'est toi qui la définie et elle fait ce que tu veux).

maintenable ça veux dire quoi ?
grossièrement ça veux dire que le jour (dans 6mois ou 4 ans) où tu va devoir retoucher ton tu ne va forcément savoir ce que tu a fait lors de la création. La tu devras faire ce que je fait pour te répondre, c'est a dire lire le code et essayer de comprendre ce qu'il avait dans ta tête quand tu a pondu le code ;)
Pire encore si jamais tu modifie la façon de faire pour ajouter ou retirer quelque chose de ce switch tu va devroi le faire X fois alors qu'avec la fonction c'est une seule fois :)

donc plus simple et plus rapide :)

tu définis la fonction en haut et tu l'utilise après ;)

hésite à me dire si tu ne comprend pas quelque chose dans ce que j'ai fait, je veux bien te répondre mais pas tout faire (quoi la tu a tout).

indique aussi les erreurs c'est plus facile, je ne suis pas parfait il m'arrive (trop souvent) de faire des erreurs de syntaxe lorsque je répond rapidement :/

@+

Re: Problème formulaire + PHP

par c_bou98 » 25 août 2011, 11:06

En fait, j'en bave tellement avec ce code que j'aimerais juste qu'on me corrige les erreurs (il ne doit plus en rester beaucoup je pense) sur mon code afin que je puisse enfin l'utiliser.. ;)

Re: Problème formulaire + PHP

par moogli » 24 août 2011, 21:48

oui il le peut avec une fonction plutôt que 4000 switch à la suite ^^
comme j'ai mis dans mon dernier message :)
function choix($c) {
switch($c){
case 1 : $choix='Domicile';break;
case 2 : $choix='Nul';break;
case 3 : $choix='Extérieur';break;
default : $choix='Nul';break; // choix par défaut si il y a d'autre valeurs que l'une des 3 premières (ça peux arriver faut prévoir <img src="./images/smilies/icon_wink.gif" alt=";)" title="Wink" /> )
}
return $choix
}

@+

Re: Problème formulaire + PHP

par c_bou98 » 24 août 2011, 17:37

Actuellement, j'ai ça :
<?php if(!empty($_POST['m1'])){
switch($_POST['m1'])
{
    case('1'): { $choix[1]='Domicile'; break ; }
    case('2'): { $choix[1]='Nul'; break ; }
    case('3'): { $choix[1]='Extérieur'; break ; }
}
$match[1] = 'St Florent des Bois - St Prouant-Monsireigne'
if(!empty($_POST['m2'])){
switch($_POST['m2'])
{
    case('1'): { $choix[2]='Domicile'; break ; }
    case('2'): { $choix[2]='Nul'; break ; }
    case('3'): { $choix[2]='Extérieur'; break ; }
}
$match[2] = 'Hermenault Sérigné - Grosbreuil'
if(!empty($_POST['m3'])){
switch($_POST['m3'])
{
    case('1'): { $choix[3]='Domicile'; break ; }
    case('2'): { $choix[3]='Nul'; break ; }
    case('3'): { $choix[3]='Extérieur'; break ; }
}
$match[3] = 'Meilleraie-Tillay - St Aubin la Plaine'
if(!empty($_POST['m4'])){
switch($_POST['m4'])
{
    case('1'): { $choix[4]='Domicile'; break ; }
    case('2'): { $choix[4]='Nul'; break ; }
    case('3'): { $choix[4]='Extérieur'; break ; }
}
$match[4] = 'Nieul le Dolent - Les Essarts 2'
if(!empty($_POST['m5'])){
switch($_POST['m5'])
{
    case('1'): { $choix[5]='Domicile'; break ; }
    case('2'): { $choix[5]='Nul'; break ; }
    case('3'): { $choix[5]='Extérieur'; break ; }
}
$match[5] = 'Talmont St Hilare - Roche/Y Robretières 2'
if(!empty($_POST['m6'])){
switch($_POST['m6'])
{
    case('1'): { $choix[6]='Domicile'; break ; }
    case('2'): { $choix[6]='Nul'; break ; }
    case('3'): { $choix[6]='Extérieur'; break ; }
}
$match[6] = 'Roche/Y Généraudière - Nalliers Foot Espoir'
$destinataire = '[email protected]';
$sujet = 'Résultats';
$left = 'Pronostics';
$right = '';
$msg =  '';
$i=0;
while(isset($match[$i]))
{
   $i++;
   $msg = "\r\n".'a choisi "'.$choix[$i].'" pour '.$match[$i] ;
}
$var = 'From '. $left.' <'.$right.'>' ."r/n";
mail($destinataire, $sujet, $msg, $var);
?>
Il me reste une petite erreur qui me dérange mais sinon, avec l'aide de tout le monde, je dois approcher de la fin.

Mon code peut-il être vraiment simplifié ou ce que j'ai est correct ?

Re: Problème formulaire + PHP

par moogli » 24 août 2011, 17:21

dans ton exemple tu utilise deux fois la fonction mail,

vu tes switch je suppose que le mec choisis toujours extérieur ?
correction du code pour une seul utilisation
<?php 
$destinataire = '[email protected]';
$sujet = 'Résultats';
$left = 'Pronostics';
$right = '';
$var = 'From '. $left.' <'.$right.'>' ."r/n";
$msg =  $_POST['nom'].' ('.$_POST['mail'].') a choisi '."\r\n";
function choix($c) {
	switch($c){
		case 1 : $choix='Domicile';break;
		case 2 : $choix='Nul';break;
		case 3 : $choix='Extérieur';break;
		default : $choix='Nul';break; // choix par défaut si il y a d'autre valeurs que l'une des 3 premières (ça peux arriver faut prévoir ;) )
	}
	return $choix
}
if(!empty($_POST['m1'])){
	$msg .= choix($_POST['m1']) .'pour St Florent des Bois - St Prouant-Monsireigne';
}
if(!empty($_POST['m2'])){
	$msg .= choix($_POST['m2']) . ' pour Hermenault Sérigné - Grosbreuil' ;
}

mail($destinataire, $sujet, $msg, $var);
?>
maintenant si tu veux rendre tous sa super dynamique (pour les jour ou y a moins de pronostique tous ça) tu peux utiliser un foreach pour traiter le tous en une boucle
par exemple
<?php
foreach ($_POST as $key => $value) {
	if (preg_match('/^m(\d)*$/i',$value) {//on vérifie que la clef soit m(un chiffre)
		$msg .= choix($value) .'pour la faut gerer dynamiquement le nom de la rencontre et ça roule ;à)'."\r\n";
	}
}
?>
avec les 5 lignes si dessus tu remplace les 3x nombres de rencontre (48 dans ton cas d'exemple, ce qui est extrémement mieux que les 15x16= 240 lignes de traitement de ton 1er formulaire :)

Le principe c'est de généraliser au maximum et de condenser ton code.
tu test à chaquefois la valeur du bouton pour savoir si domicile nul ou extérieur, pas de soucis on fait un fonction le code devient plus condensé et surtout plus clair (car moins lourd a lire ;) ).

ensuite le but c'est de faire un truc qui va fonctionner quelque soit le nb de rencontre (et quelque soit leur intitulé tu va pas te farcir les modif tous le temps ;) ).
donc le foreach parcourt tous le tableau $_POST et regarde s'il n'y a pas un index qui est du style (m1, m2) il ne va pas tenir compte du reste car y a pas de else ;) (au pire on pourrait mettre un else { continue) la c'est franchement inutile.

après la difficulté c'est de retrouver la rencontre associé pour cela le mieux c'est de passer une info permettant d'identifier cette rencontre sans problème (par exemple tu passe l'id de la rencontre comme chiffre dans le nom du champs et tu le retrouve avec une requete sql, si tu utilise une base de données, mais le principe est bon si tu utilise autre chose (fichier plat ou autre ;) )

@+

Re: Problème formulaire + PHP

par c_bou98 » 24 août 2011, 16:36

Oula ! Tu parles là à un novice du PHP :)

Peux-tu me ré-expliquer ta thèse s'il te plaît (je te laisse un fragment de code pour que tu me montres comment tu réduis ça)
<?php if(!empty($_POST['m1'])){
switch($_POST['m1'])
{
    case('1'): $choix='Domicile';
    case('2'): $choix='Nul';
    case('3'): $choix='Extérieur';
}
$destinataire = '[email protected]';
$sujet = 'Résultats';
$left = 'Pronostics';
$right = '';
$msg =  ''.$_POST['nom'].' ('.$_POST['mail'].') a choisi "'.$choix.'" pour St Florent des Bois - St Prouant-Monsireigne' ;
$var = 'From '. $left.' <'.$right.'>' ."r/n";
mail($destinataire, $sujet, $msg, $var);
}
if(!empty($_POST['m2'])){
switch($_POST['m2'])
{
    case('1'): $choix='Domicile';
    case('2'): $choix='Nul';
    case('3'): $choix='Extérieur';
}
$destinataire = '[email protected]';
$sujet = 'Résultats';
$left = 'Pronostics';
$right = '';
$msg =  ''.$_POST['nom'].' ('.$_POST['mail'].') a choisi "'.$choix.'" pour Hermenault Sérigné - Grosbreuil' ;
$var = 'From '. $left.' <'.$right.'>' ."r/n";
mail($destinataire, $sujet, $msg, $var);
}
Merci de ton aide,

Re: Problème formulaire + PHP

par moogli » 24 août 2011, 16:16

1/ tu a 16 fois la fonction mail donc 6 mails tout va bien ...
tu ne devrais avoir qu'une seul utilisation de la fonction mail !

tu fait tes test et tu utilise la concaténation pour ajouter chaque infos à une seule variable qui sera le corps du message qui sera envoyé

@+