problème avec le module traitement.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 avec le module traitement.php

Re: problème avec le module traitement.php

par Morphi » 02 déc. 2010, 20:49

Ok :D

Pour la correction de mes commentaires
Pour : 1 mégaoctet (Mo) = 1 024 ko = 1 048 576 octets.
Mes photos de 3.5 Mo passent, j'ai vu quelque part que ça allait jusqu'à 8 Mo

Pour le reste je regarde

@ plus :D

Re: problème avec le module traitement.php

par moogli » 01 déc. 2010, 10:12

salut,

c'est franchement le souk dans ton code :)
essai d'indenter clairement le code la y a aucune hiérarchie.
Fait attention à tes commentaires ;)

Il n'y a pas de traitement du cas sans photo, le mail est à envoyer dans le else de validation du formulaire et non après

j'ai un peu commenté ton code et remis en forme
 <?php
 if ($prenom == '')
	$erreurs[] = 'Il faut renseigner votre prenom, merci !';
if (($email == '') || (preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/" , $email) === false))
	$erreurs[] = 'Votre email est vide ou mal orthographié. Verifiez !';
if ($question == '')
	$erreurs[] = 'Il faut renseigner votre question, merci !';
if (!in_array($question_type, array('Sans photo', 'Avec photo')))
	$question_type = 'Sans photo'; //---par defaut s'il triche et que rien n'est envoye, on reste sur "sans photo".							   
if(!empty($_FILES['photo']['name'])) {    //---Triche et met qd meme une photo  
	$erreurs[] = 'Vous avez quand même envoyé une photo, désolé ! Recommencez le formulaire sans photo SVP !.';  
	}  
if (($question_type == 'Avec photo') && (!empty($_FILES['photo']['tmp_name']))){    
	$array_extensions_permises = array('jpg', 'png', 'JPG', 'jpeg', 'JPEG');
	$taille_maxi = 6000000; // taille maximum (en octets) => 5.7Mo
	//---on recupere l'extension de la photo
	$temp = explode('.', basename($_FILES['photo']['name']));
	$extension = $temp[count($temp) -1];

	if (!in_array($extension, $array_extensions_permises)) {
		$erreurs[] = 'Veuillez télécharger une photo au format jpg, jpeg ou png, merci !';
	}
	//---on limite la taille à 5 mo ...
	if( file_exists($_FILES['photo']['tmp_name']) and filesize($_FILES['photo']['tmp_name']) > $taille_maxi){
		$erreurs[] = "Votre fichier envoyé doit faire moins de 5 mo !"; 
		/* 5 mili octet soit 0.001 octet O_o ça existe pas par contre 5Mo oui 
		* (au passage vue le contenu de la variable taille maxi ça fait 5.7Mo, et par défaut php n'accepte pas plus de 2Mo à vérfier sur un phpinfo (upload_max_filesize) ou auprès de ton hébergeur
		*/
	}

	//---on limite la taille à 5 Mo   <= heu c'est pas le bon commentaire l :)
	if (isset($_FILES['photo']) && in_array($_FILES['photo']['type'], array('image/jpg', 'image/png', 'image/JPG', 'image/JPEG', 'image/jpeg'))){
		$erreurs[] = 'Il faut telecharger une image/photo, svp.';
	}        
}
		   
if (count($erreurs) > 0){
	echo '<center><p><strong style="color:#FF0000;">'.join('<br>', $erreurs).'</strong></p></center>';
}
else {//------ formulaire OK{
//--- on recupere la photo uniquement si le choix est sur "avec photo"
	if (($question_type == 'Avec photo') && (!empty($_FILES['photo']['name']))){
		//--- on recupere l'extension de la photo
		$temp = explode('.', basename($_FILES['photo']['name']));//doublon

		//--- on renomme la photo avec l'email et la date
		$nom_photo = date('Ymd_His').'_photo_'.$email.'.'.$temp[count($temp) -1];//non !!!!!
		//opendir($destination_photos);  osef
		if (!move_uploaded_file($_FILES['photo']['tmp_name'], $destination_photos.$nom_photo))
			echo '<center><p><strong style="color:#FF0000;">Erreur au telechargement du fichier - trop gros ou pas le droit d ecriture.</strong></p></center>';
			//message d'erreur à personnaliser en fonction de $_FILES['photo']['error'] et en fonction des restrictions de taille et extension exprimer dans le script
	}
	// ici envoi du mail !
}
?>
globalement ton code doit suivre un raisonnement :
1/ je vérifie mes valeurs une à une et enregistrement des erreurs
2/ - si toutes les variables ok je valide le formulaire
- si non j'affiche un message d'erreur (de préférence dans le formulaire)
3/ j'envoi le mail si et seulement si (comme en math ;)) le formulaire est valider;
donc en gros
<?php
if ( validation des champs ) {
	// les champs sont ok je fait l'upload si besoin
	if ( photo à copier ) {
		if ( upload == ok ) {
			//ok envoi du mail
		}
		else {
			//message d'erreur concernant l'upload de la photo
		}
	}
	else {
		// pas de photo
		//envoi du mail
	}
}
else {
	echo 'echec de validation du formulaire avec la ou les erreur(s) suivante(s) : '; // affichage des erreurs en plus
}
?>
c'est, je sais, syntaxiquement incorrect mais c'est pour le principe de fonctionnement.

@+

Re: problème avec le module traitement.php

par Morphi » 01 déc. 2010, 00:45

Bonjour

Je me suis déjà pas mal avancé.
(Mon code est en gros celui indiqué sur mon 1er post)
J'ai actuellement besoin de votre aide pour résoudre les choses suivantes :

1) Comment faire pour mettre de la couleur (vert) pour tout le texte qui apparait avec le code :
if(isset($_POST['question_type']))
                    {
                      echo 'vous avez choisi question : ',htmlentities($_POST['question_type']); //affichera dans le navigateur le type de question choisie par le client
                    }

2) Sur le formulaire, il y a 2 boutons radio :
-question avec photo
-question sans photo

Dans l'option question sans photo", la personne peut tricher et y joindre une photo
C'est pourquoi je voudrais que lorsqu'elle envoie le formulaire, en "trichant" qu'elle soit prévenue.

J'ai essayé ce bout de code :
if(!empty($_FILES['photo']['name'])) {    //---Triche et met quand même une photo    
                    $erreurs[] = 'Vous avez choisi question sans photo et avez quand même envoyé une photo, désolé ! Recommencez le formulaire sans photo SVP !.';    
                  }  
Placé ici :
 if ($prenom == '')
        $erreurs[] = 'Il faut renseigner votre prenom, merci !';

		    if (($email == '') || (preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/" , $email) == false))
            $erreurs[] = 'Votre email est vide ou mal orthographié. Verifiez !';

			if ($question == '')
                $erreurs[] = 'Il faut renseigner votre question, merci !';
			
                if (!in_array($question_type, array('Sans photo', 'Avec photo')))
                    $question_type = 'Sans photo'; //---par defaut s'il triche et que rien n'est envoye, on reste sur "sans photo".
					
				if(!empty($_FILES['photo']['name'])) {    //---Triche et met qd meme une photo   
                    $erreurs[] = 'Vous avez quand même envoyé une photo, désolé ! Recommencez le formulaire sans photo SVP !.';   
                  }  
             if (($question_type == 'Avec photo') && (!empty($_FILES['photo']['tmp_name'])))
			  {    
				   
                   $array_extensions_permises = array('jpg', 'png', 'JPG', 'jpeg', 'JPEG');
                    $taille_maxi = 6000000; // taille maximum (en octets)
 
                    //---on recupere l'extension de la photo
                    $temp = explode('.', basename($_FILES['photo']['name']));
                    $extension = $temp[count($temp) -1];
   
                   if (!in_array($extension, $array_extensions_permises)) {
                        $erreurs[] = 'Veuillez télécharger une photo au format jpg, jpeg ou png, merci !';
                     }
                        //---on limite la taille à 5 mo
                    if( file_exists($_FILES['photo']['tmp_name'])
                        and filesize($_FILES['photo']['tmp_name']) > $taille_maxi)
                    {
                        $erreurs[] = "Votre fichier envoyé doit faire moins de 5 mo !";
                  }
                    
                        //---on limite la taille à 5 Mo
                    if (isset($_FILES['photo']) && in_array($_FILES['photo']['type'], array('image/jpg', 'image/png', 'image/JPG', 'image/JPEG', 'image/jpeg')))
					
                  {
                        $erreurs[] = 'Il faut telecharger une image/photo, svp.';
                    }         
              }
               
                if (count($erreurs) > 0)
                {
                echo '<center><p><strong style="color:#FF0000;">'.join('<br>', $erreurs).'</strong></p></center>';
                }
                else //------ formulaire OK
            {
                //--- on recupere la photo uniquement si le choix est sur "avec photo"
                if (($question_type == 'Avec photo') && (!empty($_FILES['photo']['name'])))
                {
                    //--- on recupere l'extension de la photo
                    $temp = explode('.', basename($_FILES['photo']['name']));

                    //--- on renomme la photo avec l'email et la date
                    $nom_photo = date('Ymd_His').'_photo_'.$email.'.'.$temp[count($temp) -1];

                    opendir($destination_photos);

                    if (!move_uploaded_file($_FILES['photo']['tmp_name'], $destination_photos.$nom_photo))
                    echo '<center><p><strong style="color:#FF0000;">Erreur au telechargement du fichier - trop gros ou pas le droit d ecriture.</strong></p></center>';
               };
			      
                    //-----------------------------------------------------------------on envoie le mail final

ça fonctionne, et en plus le formulaire "faussé" ne m'est pas envoyé.
Par contre je ne reçois plus le mail lorsque l'option "question avec photo" est choisie, je reçois alors le message qui se trouve dans le bout de code rajouté (le 1er ci dessus).

Quelqu'un peut il me dire si ce code est valable et ou le placer ?

Bien cordialement

Re: problème avec le module traitement.php

par Morphi » 29 nov. 2010, 18:19

Bonjour

1) Je n'ai aps encore trouvé pour le else :
else {  
                   $erreurs[] = 'Vous avez choisi avec photo mais n\'avez pas soumis de photo.';
}

2) D'un autre coté j'ai ajouté ce bout de code qui affiche dans le navigateur, après envoi du formulaire,
le type de question choisie (via les bouton radio)
Par contre je n'arrive pas à centrer le message et a y mettre des couleurs (vert par ex)
Un pti coup de pouce SVP :)
if(isset($_POST['question_type']))
                    {
                      echo 'vous avez choisi question : ',htmlentities($_POST['question_type']); //affichera dans le navigateur le type de question choisie par le client
                    } 
Bien cordialement

Re: problème avec le module traitement.php

par Morphi » 29 nov. 2010, 02:53

Bonjour :) J'ai donc refais des essais
et placé le bout de code else :
else {  
                   $erreurs[] = 'Vous avez choisi avec photo mais n\'avez pas soumis de photo.';
}
Voir ci dessous, juste au dessus de la partie "envoi du mail final", ça ne fonctionne pas :cry: help please
            // on limite la taille à 5 Mo
                    if (isset($_FILES['photo']) && in_array($_FILES['photo']['type'], array('image/jpg', 'image/png', 'image/JPG', 'image/JPEG', 'image/jpeg')))
					
                  {
                        $erreurs[] = 'Il faut telecharger une image, svp.';
                    }         
              }
               
                if (count($erreurs) > 0)
                {
                echo '<center><p><strong style="color:#FF0000;">'.join('<br>', $erreurs).'</strong></p></center>';
                }
                else // formulaire OK
            {
                // on recupere la photo uniquement si le choix est sur "avec photo"
                if (($question_type == 'Avec photo') && (!empty($_FILES['photo']['name'])))
                {
                    // on recupere l'extension de la photo
                    $temp = explode('.', basename($_FILES['photo']['name']));

                    // on renomme la photo avec l'email et la date
                    $nom_photo = date('Ymd_His').'_photo_'.$email.'.'.$temp[count($temp) -1];

                    opendir($destination_photos);

                    if (!move_uploaded_file($_FILES['photo']['tmp_name'], $destination_photos.$nom_photo))
                    echo '<center><p><strong style="color:#FF0000;">Erreur au telechargement du fichier - trop gros ou pas le droit d ecriture.</strong></p></center>';
               };
		else {  
                   $erreurs[] = 'Vous avez choisi avec photo mais n\'avez pas soumis de photo.';
}	      
                    // on envoie le mail final
                    $headers .= 'From: '.$prenom.' <'.$email.'>' . "\r\n";
                    $headers .= 'Reply-To: '.$email. "\r\n";
Bien cordialement

Re: problème avec le module traitement.php

par moogli » 28 nov. 2010, 19:19

heu y a comme un soucis dans ta syntaxe

tu fait
if ( ...)
else {
}

cela veut dire que tu ne fera jamais rien if et pire tu execute le else quand la condition du if est valide .... (a vérifier si pas erreur de syntaxe plutot :)).

donc il faut faire
if ( ..) {
le traitement avec photo, il faut mettre ici la validation de l'upload de l'image ici et non après le else
]
else {
//erreur avec photo mais pas de photo
}


@+

Re: problème avec le module traitement.php

par Morphi » 28 nov. 2010, 17:23

Encore besoin d'aide :?
j'ai essayé avec le else placé ici (voir ma capture) :
http://img413.imageshack.us/my.php?imag ... leelse.jpg

ça ne fonctionne pas, sans doute pas au bon endroit ou une erreur de syntaxe

Bien Cordialement

Re: problème avec le module traitement.php

par Morphi » 28 nov. 2010, 16:07

Salut damaskinos

Euh !
non c'est pas résolu
Je vais chercher mais si tu peux continuer à m'aider,
ça sera pas de refus

Merci
@ plus

Re: problème avec le module traitement.php

par damaskinos » 26 nov. 2010, 20:23

oups j'avais pas vu que c'etais résolu.

Re: problème avec le module traitement.php

par damaskinos » 26 nov. 2010, 20:20

Salut,
Désolé, j'étais absent. Vérifie ou tu mets ton else. il doit correspondre au if qui fait ton test.

Re: problème avec le module traitement.php

par Morphi » 20 nov. 2010, 22:59

IL y a quelque chose qui ne va pas car si je rajoute cette ligne de code, ça me désactive le choix
" question sans photo " je ne reçois plus le formulaire par mail

Code : Tout sélectionner

else $erreurs[] = 'Vous avez choisi avec photo mais n\'avez pas soumis de photo.';
Cordialement :)

Re: problème avec le module traitement.php

par Morphi » 19 nov. 2010, 19:54

Bonjour damaskinos

Merci de me répondre c'est sympa

J'ai un problème pour la première
Peux tu me donner le code plus bas que je vois les accolades et autres
because :
Pour question sans photo que je mette ou pas la photo en upload ça me donne :
" Vous avez choisi avec photo mais n\'avez pas soumis de photo. "

cordialement

Re: problème avec le module traitement.php

par Invité » 19 nov. 2010, 19:40

Bonjour damaskinos

Merci de me répondre c'est sympa

J'ai un problème pour la première
Peux tu me donner le code plus bas que je vois les accolades et autres
because :
Pour question sans photo que je mette ou pas la photo en upload ça me donne :
" Vous avez choisi avec photo mais n\'avez pas soumis de photo. "

cordialement

Re: problème avec le module traitement.php

par damaskinos » 19 nov. 2010, 00:22

Salut pour la premiere question :
 if (($question_type == 'Avec photo') && (!empty($_FILES['photo']['tmp_name'])))
             {
                   $array_extensions_permises = array('gif', 'jpg', 'png');
                    $taille_maxi = 2300000; // taille maximum (en octets)

                    // on recupere l'extension de la photo
                    $temp = explode('.', basename($_FILES['photo']['name']));
                    $extension = $temp[count($temp) -1];
   
                   if (!in_array($extension, $array_extensions_permises))
                        $erreurs[] = 'Veuillez télécharger une photo en gif, jpg ou png, merci.';
      
                        // on limite la taille à 2 mo
                    if( file_exists($_FILES['photo']['tmp_name'])
                        and filesize($_FILES['photo']['tmp_name']) > $taille_maxi)
                    {
                        $erreurs[] = "Votre fichier doit faire moins de 2 mo !";
                  }
   
                        // on limite la taille à 2 Mo
                    if (isset($_FILES['photo']) && in_array($_FILES['photo']['type'], array('image/gif', 'image/jpg', 'image/png')))
                  {
                        $erreurs[] = 'Il faut telecharger une image, svp.';
                    }         
              }
             else
                   $erreurs[] = 'Vous avez choisi avec photo mais n\'avez pas soumis de photo.';
Juste Rajouté un else pour compléter ton if.

Pour la deuxième , c'est que tes magic quotes sont à on.
if (get_magic_quotes_gpc()) {
    $variable = stripslashes($_POST['nom_input']);
}
else {
    $variable = $_POST['nom_input'];
}

Voilà bonne chance 

problème avec le module traitement.php

par Morphi » 17 nov. 2010, 22:51

Bonjour à tous

J'ai crée un petit site de coaching personnel.
il y a un formulaire à remplir et une photo à envoyer, mais j'ai quelques petit problèmes
avec le module traitement.php.
bon je n'y connais pour ainsi dire rien au php, j'ai donc été aidé au départ pour la partie php.

Quelqu'un pourrait il m'aider à corriger les problèmes restant :
Dans le formulaire il y a 2 boutons radio, 1 pour "envoi du formulaire avec photo" et un avec
"envoi du formulaire sans photo.
-le hic c'est que la vérification du champ de l'upload ne se fait pas, et donc il n'y a pas de message d'alerte en cas de non envoi
de la photo si l'option avec photo est coché.
-Il y a aussi un problème lorsque je reçois le texte que rempli la personne : un anti slash se place avant le signe apostrophe ou guillemet

Merci d'avance pour votre aide et compréhension.

Je vous donne le formulaire et son traitement :

Code : Tout sélectionner

<form action="traitementbabyl222.php" method="post" enctype="multipart/form-data"> <p>Cochez votre choix (tous les champs sont obligatoires) :</p> <ul> <li><input type="radio" id="sans_photo" name="question_type" value="Sans photo" checked="checked"><label for="sans_photo">Question sans photo / xx euros</label></li> <li><input type="radio" id="avec_photo" name="question_type" value="Avec photo" checked="checked"><label for="avec_photo">Question avec photo / yy euros</label></li> </ul> <p><label for="prenom">Votre prénom :</label><br/><input type="text" id="prenom" name="prenom"></p> <p><label for="email">Votre adresse e-mail :</label><br/><input type="text" id="email" name="email"></p> <p><label for="question">Votre question :</label><br/><textarea id="question" name="question" cols="48" rows="8"></textarea></p> <p><label for="photo">Votre photo :</label><br/><input type="file" id="photo" name="photo"></p> <p>Si vous souhaitez une copie de ce formulaire par mail, cochez cette case :<input type="checkbox" name="copie" value="1"/></p> <p><input type="submit" name="envoi" value="Envoyer"> </form>


Le traitement.php :

Code : Tout sélectionner

<?php // definitions $adresse_ton_site = 'http://www.xxxxxxxxxxx.com/'; $destination_photos = 'photosclients/'; $destination_email = '[email protected]'; $objet = "Réception du formulaire :"; // recuperation des variables $question_type = (isset($_POST['question_type'])) ? $_POST['question_type'] : ''; $prenom = (isset($_POST['prenom'])) ? sprintf("%s", trim($_POST['prenom'])) : ''; $email = (isset($_POST['email'])) ? sprintf("%s", trim($_POST['email'])) : ''; $question = (isset($_POST['question'])) ? sprintf("%s", trim($_POST['question'])) : ''; $taille = filesize($_FILES['photo']['tmp_name']); //Taille du fichier // verification des variables $erreurs = array(); // par defaut, vide if ($prenom == '') $erreurs[] = 'Il faut renseigner votre prenom.'; if (($email == '') || (preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/" , $email) == false)) $erreurs[] = 'Votre email est vide ou mal orthographie. Verifiez.'; if ($question == '') $erreurs[] = 'Il faut renseigner votre question.'; if (!in_array($question_type, array('Sans photo', 'Avec photo'))) $question_type = 'Sans photo'; // par defaut s'il triche et que rien n'est envoye, on reste sur "sans photo". if (($question_type == 'Avec photo') && (!empty($_FILES['photo']['tmp_name']))) { $array_extensions_permises = array('gif', 'jpg', 'png'); $taille_maxi = 2300000; // taille maximum (en octets) // on recupere l'extension de la photo $temp = explode('.', basename($_FILES['photo']['name'])); $extension = $temp[count($temp) -1]; if (!in_array($extension, $array_extensions_permises)) $erreurs[] = 'Veuillez télécharger une photo en gif, jpg ou png, merci.'; // on limite la taille à 2 mo if( file_exists($_FILES['photo']['tmp_name']) and filesize($_FILES['photo']['tmp_name']) > $taille_maxi) { $erreurs[] = "Votre fichier doit faire moins de 2 mo !"; } // on limite la taille à 2 Mo if (isset($_FILES['photo']) && in_array($_FILES['photo']['type'], array('image/gif', 'image/jpg', 'image/png'))) { $erreurs[] = 'Il faut telecharger une image, svp.'; } } if (count($erreurs) > 0) { echo '<center><p><strong style="color:#FF0000;">'.join('<br>', $erreurs).'</strong></p></center>'; } else // formulaire OK { // on recupere la photo uniquement si le choix est sur "avec photo" if (($question_type == 'Avec photo') && (!empty($_FILES['photo']['name']))) { // on recupere l'extension de la photo $temp = explode('.', basename($_FILES['photo']['name'])); // on renomme la photo avec l'email et la date $nom_photo = date('Ymd_His').'_photo_'.$email.'.'.$temp[count($temp) -1]; opendir($destination_photos); if (!move_uploaded_file($_FILES['photo']['tmp_name'], $destination_photos.$nom_photo)) echo '<center><p><strong style="color:#FF0000;">Erreur au telechargement du fichier - trop gros ou pas le droit d ecriture.</strong></p></center>'; }; // on envoie le mail final $headers = 'From: '.$prenom.' <'.$email.'>' . "\r\n"; $headers = 'Reply-To: '.$email. "rn"; $message = "Vous avez rempli le formulaire avec les informations suivantes, Lucile vous répondra au plus vite :\n\n"; if (($question_type == 'Avec photo') && (!empty($_FILES['photo']['name']))) { $message .= "Photo : ".$adresse_ton_site.$destination_photos.$nom_photo."\n\n"; } $message .= "Prenom : ".$prenom."\n\n"; $message .= "Email : ".$email."\n\n"; $message .= "Question : ".$question."\n\n"; if (mail($destination_email, $objet, $message, $headers)) echo '<center><p><strong style="color:#009900;">Votre email m&#146est bien parvenu, merci !</strong></p></center>'; else echo '<center><p><strong style="color:#FF0000;">Votre email n&#146est pas encore parti, veuillez reessayer SVP.</strong></p></center>'; //Envoi du double : if (isset($_POST["copie"])){mail($email, $objet, $message, $headers);} }; ?>