Verif code php, à l'aide svp !

Résolu/Fermé
siegfrield Messages postés 4 Date d'inscription samedi 7 février 2009 Statut Membre Dernière intervention 9 septembre 2011 - 9 sept. 2011 à 07:10
curumo_leblanc Messages postés 266 Date d'inscription samedi 10 septembre 2011 Statut Membre Dernière intervention 7 juillet 2014 - 10 sept. 2011 à 20:59
Bonjour,

Je reviens une fois de plus vers vous avant de finir de m'arracher les cheveux car depuis que je conçois mon site il ne m'en reste plus beaucoup.

J'aurais besoin de vos lumières car je rencontre des problèmes dans mon code php pour un formulaire :

- l'image du captcha n'apparaît pas toujours.
- si le captcha n'est pas valide je reçois quand même le mail avec les données du formulaire.

- pour vérifier le format de mail j avais la fonction if(!ereg..., j'ai tenté de la changer par preg_match et depuis je reçois un message d'erreur me disant que le format du fichier transféré n est pas valide ou que le transfert du document a échoué alors que je ne tente pas de me servir du champ upload.

Un grand merci à ceux qui voudront bien m'aider.

Ps j'en demande un peu beaucoup mais si vous aviez un code php pour recevoir les fichiers joints a mon formulaire sur ma boite mail en pièce jointe ce serait génial car je ne trouve rien à ce sujet. Je dois probablement mal chercher mais je ne connais pas les mots clé.

Crldt,

Voici mon code :

contact.php


<div id="contactform">
<form action="traitement.php" method="post" enctype="multipart/form-data" name="form1" id="form1">
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<tr>
<td width="24%">Civilité :</td>
<td width="76%"><select name="civilite" size="1" id="civilite" tabindex="1">
<option>Sélectionner</option>
<option>Mlle</option>
<option>Mme</option>
<option>M.</option>
</select></td>
</tr>
<tr>
<td>Nom :</td>
<td><span id="sp_nom">
<input name="nom" type="text" id="nom" tabindex="1" size="32" maxlength="100" />
<span class="textfieldRequiredMsg">Champ obligatoire.</span></span></td>
</tr>
<tr>
<td>Mél. :</td>
<td><span id="sp_mail">
<input name="mail" type="text" id="mail" tabindex="1" size="32" maxlength="100" />
<span class="textfieldRequiredMsg">Champ obligatoire.</span><span class="textfieldInvalidFormatMsg">Format non valide.</span></span></td>
</tr>
<tr>
<td>Message :</td>
<td rowspan="2"><span id="sp_message">
<textarea name="message" id="message" cols="45" rows="4" tabindex="1"></textarea>
<span class="textareaRequiredMsg"><br />
Champ obligatoire.</span><span class="textareaMaxCharsMsg">Le nombre maximum de caractères a été dépassé.</span></span></td>
</tr>
<tr>
<td> </td>
</tr>
<tr>
<td>Pièce jointe :<input type="hidden" name="MAX_FILE_SIZE" value="26214400" /></td>
<td><input name="parcourir" type="file" id="parcourir"/></td>
</tr>
<tr>
<td>Comment avez-vous connu ... ?</td>
<td><select name="decouverte" size="1" id="decouverte" tabindex="1">
<option selected="selected">Sélectionner</option>
<option>Ami(e)</option>
<option>Contact professionnel</option>
<option>Publicité</option>
<option>Démarchage</option>
<option>Par hasard</option>
<option>Autre</option>
</select></td>
</tr>
<tr>
<td>Code de sécurité :</td>
<td> <input name="verif" type="text" id="sprytrigger1" tabindex="1" size="10" maxlength="6"/>
 <img src="captcha.php" alt="Image code de sécurité" align="absmiddle" /></td>
</tr>
<tr>
<td colspan="2"><div align="center">
<input type="submit" name="envoyer" id="envoyer" value="Envoyer" tabindex="1" />
<input type="reset" name="effacer" id="effacer" value="Réinitialiser" tabindex="1" />
</div></td>
</tr>
</table>
</form>
</div>

Captcha.php

<?php
session_start();
$liste="123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$code='';
while(strlen($code)!=6){
$code.=$liste[rand(0,36)];
}
$_SESSION['code']=$code;
$img=imagecreate(70,20) or die ("Problème de création GD");
$background_color=imagecolorallocate($img,238,238,238);
$ecriture_color=imagecolorallocate($img,0,0,0);
$code_police=5;
header('Expires: Mon, 26 Jul 1997 05h00 GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header("Content-type: image/jpeg");
imageString($img,$code_police,(70-imageFontWidth($code_police)*strlen($code))/2,0,$code,$ecriture_color);
imagejpeg($img,'',30);
imageDestroy($img);
?>

traitement.php

<?php
$msg_erreur = "<span style='color:red'>Erreur. Les champs suivants doivent être obligatoirement remplis :</span><br/><br/>";
$msg_ok = "Votre demande a bien été prise en compte. Nous vous répondrons dans les meilleurs délais.";
$message=$msg_erreur;
define('MAIL_DESTINATAIRE','monemail');
define('MAIL_SUJET','Information');
if(empty($_POST['nom']))
$message.="<span style='color:red'>Vous devez saisir un nom</span><br/>";
if(empty($_POST['mail']))
$message.="<span style='color:red'>Vous devez saisir une adresse électronique</span><br/>";
if(empty($_POST['message']))
$message.="<span style='color:red'>Vous devez saisir un message</span><br/>";
if(!isset($_SESSION['code']) || strlen($_SESSION['code']) != 6) die("Erreur !");
if($_SESSION['code'] !=$_POST['verif']) //die("Erreur : le code de sécurité est invalide !");
echo "<span style='color:red'>le code est invalide !</span><br>";
if(!preg_match("$[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]{2,}[.][a-zA-Z]{2,4}$",
$_POST["mail"]))
{
$message.="<span style='color:red'>Votre adresse électronique n'est pas valide</span><br/>";
}
if(strlen($message)> strlen($msg_erreur)) {
echo $message;
} else {
foreach($_POST as $index => $valeur) {
$$index=stripslashes(trim($valeur));
}
$mail_entete = "MIME-Version: 1.0\r\n";
$mail_entete .= "From: {$_POST['nom']} "
."<{$_POST['mail']}>\r\n";
$mail_entete .= 'Reply-To: '.$_POST['mail']."\r\n";
$mail_entete .= 'Content-Type: text/plain; charset="iso-8859-1"';
$mail_entete .= "\r\nContent-Transfer-Encoding: 8bit\r\n";
$mail_entete .= 'X-Mailer:PHP/' . phpversion()."\r\n";
// préparation du corps du mail
$mail_corps = "Civilite : $civilite\n";
$mail_corps .= "Message de : $nom\n";
$mail_corps .= "Email : $mail\n";
$mail_corps .= "Decouverte : $decouverte\n";
$mail_corps .= "Contenu : $message";
// envoi du mail
if (mail(MAIL_DESTINATAIRE,MAIL_SUJET,$mail_corps,$mail_entete)) {
//Le mail est bien expédié
echo $msg_ok;
} else {
//Le mail n'a pas été expédié
echo '<span style="color:red">Une erreur est survenue lors de l\'envoi du formulaire par email</span>';
}
}
$dossier = 'upload/';
$fichier = basename($_FILES['parcourir']['name']);
$taille_maxi = 26214400;
$taille = filesize($_FILES['parcourir']['tmp_name']);
$extensions = array('.png', '.gif', '.jpg', '.jpeg', '.txt', '.doc', '.docx', '.xls', '.xlsx', '.pdf');
$extension = strrchr($_FILES['parcourir']['name'], '.');
//Début des vérifications de sécurité...
if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
{
$erreur = 'Le type de fichier que vous souhaitez nous envoyer n\'est pas autorisé.';
}
if($taille>$taille_maxi)
{
$erreur = 'Le fichier est trop volumineux.';
}
if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
{
//On formate le nom du fichier ici...
$fichier = strtr($fichier,
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
$fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
if(move_uploaded_file($_FILES['parcourir']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
{
echo 'Votre document nous a bien été envoyé.';
}
else //Sinon (la fonction renvoie FALSE).
{
echo 'Le transfert de votre document a échoué';
}
}
else
{
echo $erreur;
}
?>



A voir également:

6 réponses

Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
9 sept. 2011 à 10:44
Bonjour,

Par pitié, utilisez les balises < code > du forum, sinon un long code avec de nombreuses indentations comme celui-ci n'est pas lisible...

Merci,

Xavier
0
Natio78 Messages postés 719 Date d'inscription vendredi 9 novembre 2007 Statut Membre Dernière intervention 27 mai 2013 96
9 sept. 2011 à 11:46
pourquoi ça =>
if(strlen($message)> strlen($msg_erreur)) {
echo $message;
}
? je ne vois pas trop à quoi ça te sert.

Sinon c'est normal que le mail parte tout le temps, vu que tu effectues tous tes tests (nom,prénom,mail etc...) qui affiche un message (si ça ne correspond pas à ce que tu souhaites) cependant l'envoi de mail n'est pas "compris" dans tous tes if donc quoiqu'il arrive (même si une condition n'est pas remplit avant) le mail partira...
faudrait un truc du genre
 
if(prenom = verifprenom)
{
    if(nom = verifnom)
    {
        if(mail = verifmail)
        {
           $mail_entete = blabla
           mail($destinataire,......)
        }
         else
             $message = "mail pas bon";
    }
    else
         $message = "nom pas bon";
}
else
   $message = "prenom pas bon";
0
oxymore64 Messages postés 34 Date d'inscription samedi 23 avril 2011 Statut Membre Dernière intervention 16 juin 2012
9 sept. 2011 à 14:44
Bonjour,

Désolé, je ne connaissais pas l'existence de telles balises. J'y aurai recours à l'avenir.
Crdlt,
Sieg
0
oxymore64 Messages postés 34 Date d'inscription samedi 23 avril 2011 Statut Membre Dernière intervention 16 juin 2012
9 sept. 2011 à 15:12
Bonjour Natio78 et merci de ta réponse.

Je dois avouer que je ne sais pas à quoi sert :
if(strlen($message)> strlen($msg_erreur)) {
echo $message;
}

Je suis un grand novice en html/php et c'est mon premier site alors je tente d'adapter à mes besoins des codes existants piochés à droite à gauche pour apprendre.

Je n'ai pas bien saisi ta réponse mais je vais tenter de l'adapter à mes besoins.

Je remets le code entre balises pour plus de clarté :

contact.php

<div id="contactform">
      <form action="traitement.php" method="post" enctype="multipart/form-data" name="form1" id="form1">
        <table width="100%" border="0" cellspacing="2" cellpadding="2">
          <tr>
            <td width="24%">Civilité :</td>
            <td width="76%"><select name="civilite" size="1" id="civilite" tabindex="1">
              <option>Sélectionner</option>
              <option>Mlle</option>
              <option>Mme</option>
              <option>M.</option>
            </select></td>
          </tr>
          <tr>
            <td>Nom :</td>
            <td><span id="sp_nom">
              <input name="nom" type="text" id="nom" tabindex="1" size="32" maxlength="100" />
              <span class="textfieldRequiredMsg">Champ obligatoire.</span></span></td>
          </tr>
          <tr>
            <td>Mél. :</td>
            <td><span id="sp_mail">
            <input name="mail" type="text" id="mail" tabindex="1" size="32" maxlength="100" />
            <span class="textfieldRequiredMsg">Champ obligatoire.</span><span class="textfieldInvalidFormatMsg">Format non valide.</span></span></td>
          </tr>
          <tr>
            <td>Message :</td>
            <td rowspan="2"><span id="sp_message">
            <textarea name="message" id="message" cols="45" rows="4" tabindex="1"></textarea>
            <span class="textareaRequiredMsg"><br />
            Champ obligatoire.</span><span class="textareaMaxCharsMsg">Le nombre maximum de caractères a été dépassé.</span></span></td>
          </tr>
          <tr>
            <td>&nbsp;</td>
            </tr>
          <tr>
            <td>Pièce jointe :<input type="hidden" name="MAX_FILE_SIZE" value="26214400" /></td>
            <td><input name="parcourir" type="file" id="parcourir"/></td>
          </tr>
          <tr>
            <td>Comment avez-vous connu... ?</td>
            <td><select name="decouverte" size="1" id="decouverte" tabindex="1">
              <option selected="selected">Sélectionner</option>
              <option>Ami(e)</option>
              <option>Contact professionnel</option>
              <option>Publicité</option>
              <option>Démarchage</option>
              <option>Par hasard</option>
              <option>Autre</option>
            </select></td>
          </tr>
          <tr>
            <td>Code de sécurité :</td>
            <td> <input name="verif" type="text" id="sprytrigger1" tabindex="1" size="10" maxlength="6"/> 
            &nbsp;<img src="captcha.php" alt="Image code de sécurité" align="absmiddle" /></td>
          </tr>
          <tr>
            <td colspan="2"><div align="center">
              <input type="submit" name="envoyer" id="envoyer" value="Envoyer" tabindex="1" />
              <input type="reset" name="effacer" id="effacer" value="Réinitialiser" tabindex="1" />
            </div></td>
            </tr>
        </table>
      </form>
    </div>


captcha.php

<?php 
session_start(); 
$liste="123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
$code=''; 
while(strlen($code)!=6){ 
$code.=$liste[rand(0,36)]; 
} 
$_SESSION['code']=$code; 
$img=imagecreate(70,20) or die ("Problème de création GD"); 
$background_color=imagecolorallocate($img,238,238,238); 
$ecriture_color=imagecolorallocate($img,0,0,0); 
$code_police=5; 
header('Expires: Mon, 26 Jul 1997 05h00 GMT'); 
header('Cache-Control: no-store, no-cache, must-revalidate'); 
header('Cache-Control: post-check=0, pre-check=0', false); 
header("Content-type: image/jpeg"); 
imageString($img,$code_police,(70-imageFontWidth($code_police)*strlen($code))/2,0,$code,$ecriture_color); 
imagejpeg($img,'',30); 
imageDestroy($img); 
?> 


traitement.php

<div class="leftcontent">
  <?php 
  $msg_erreur = "<span style='color:red'>Erreur. Les champs suivants doivent être obligatoirement remplis :</span><br/><br/>";
  $msg_ok = "Votre demande a bien été prise en compte. Nous vous répondrons dans les meilleurs délais.";
  $message=$msg_erreur;
  define('MAIL_DESTINATAIRE','mon mail');
  define('MAIL_SUJET','Information');
  if(empty($_POST['nom']))
  $message.="<span style='color:red'>Vous devez saisir un nom</span><br/>";
  if(empty($_POST['mail']))
  $message.="<span style='color:red'>Vous devez saisir une adresse électronique</span><br/>";
  if(empty($_POST['message']))
  $message.="<span style='color:red'>Vous devez saisir un message</span><br/>";
  if(!isset($_SESSION['code']) || strlen($_SESSION['code']) != 6) die("Erreur !");
if($_SESSION['code'] !=$_POST['verif']) //die("Erreur : le code de sécurité est invalide !");
echo "<span style='color:red'>le code est invalide !</span><br>";
if(!preg_match("$[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]{2,}[.][a-zA-Z]{2,4}$",
$_POST["mail"]))
{
	$message.="<span style='color:red'>Votre adresse électronique n'est pas valide</span><br/>";
}
if(strlen($message)> strlen($msg_erreur)) {
	echo $message;
} else {
	foreach($_POST as $index => $valeur) {
		$$index=stripslashes(trim($valeur));
	}
$mail_entete = "MIME-Version: 1.0\r\n";
$mail_entete .= "From: {$_POST['nom']} "
."<{$_POST['mail']}>\r\n";
$mail_entete .= 'Reply-To: '.$_POST['mail']."\r\n";
$mail_entete .= 'Content-Type: text/plain; charset="iso-8859-1"';
$mail_entete .= "\r\nContent-Transfer-Encoding: 8bit\r\n";
$mail_entete .= 'X-Mailer:PHP/' . phpversion()."\r\n";
// préparation du corps du mail
$mail_corps = "Civilite : $civilite\n";
$mail_corps .= "Message de : $nom\n";
$mail_corps .= "Email : $mail\n";
$mail_corps .= "Decouverte : $decouverte\n";
$mail_corps .= "Contenu : $message";
// envoi du mail
if (mail(MAIL_DESTINATAIRE,MAIL_SUJET,$mail_corps,$mail_entete)) {
//Le mail est bien expédié
echo $msg_ok;
} else {
//Le mail n'a pas été expédié
echo '<span style="color:red">Une erreur est survenue lors de l\'envoi du formulaire par email</span>';
}
}
$dossier = 'upload/';
$fichier = basename($_FILES['parcourir']['name']);
$taille_maxi = 26214400;
$taille = filesize($_FILES['parcourir']['tmp_name']);
$extensions = array('.png', '.gif', '.jpg', '.jpeg', '.txt', '.doc', '.docx', '.xls', '.xlsx', '.pdf');
$extension = strrchr($_FILES['parcourir']['name'], '.'); 
//Début des vérifications de sécurité...
if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
{
     $erreur = 'Le type de fichier que vous souhaitez nous envoyer n\'est pas autorisé.';
}
if($taille>$taille_maxi)
{
     $erreur = 'Le fichier est trop volumineux.';
}
if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
{
     //On formate le nom du fichier ici...
     $fichier = strtr($fichier, 
          'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 
          'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
     $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
     if(move_uploaded_file($_FILES['parcourir']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
     {
          echo 'Votre document nous a bien été envoyé.';
     }
     else //Sinon (la fonction renvoie FALSE).
     {
          echo 'Le transfert de votre document a échoué';
     }
}
else
{
     echo $erreur;
}
?>
</div>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Ton code est en fait un assemblage de morceaux glanés sur le net.

Tu utilises des styles d'un coté, des doubles définitions des tests parfois erronés... Bref c'est pas "propre" du tout et ce côté brouillon explique les résultats inattendus.

De plus, pour le fichier joint, tu utilises l'upload par formulaire sur un serveur. Or ton but est de nous le faire parvenir... pas besoin de le stocker donc sauf temporairement !

Par ailleurs, le captcha sous cette forme est totalement inefficace. J'ai donc mis dans le code ci-dessous deux cases "input checkbox" dont une invisible. Un robot coche tout ou rien... et donc les robots ne passent pas cette protection ultra simple pourtant !

J'ai aussi regroupé tes 3 pages en une seule pour une lecture simplifiée et un regroupement du code redondant. Car tu ne gérais pas les erreurs de remplissage de formulaire contrairement à ce que ton code pouvait de prime abord laisser croire.

Les rares paramètres changeant au besoin ont été regroupé en haut de page pour une lisibilité simple des variables modifiables.

Si tu veux des explications ou un code plus commenté dis le moi
0
Ne pouvant coller le code ici :

http://www.aratars.org/hebergement/test/formulaire.txt
0
oxymore64 Messages postés 34 Date d'inscription samedi 23 avril 2011 Statut Membre Dernière intervention 16 juin 2012
10 sept. 2011 à 18:24
Un grand merci Curumo. J'ai effectivemment pioché des bouts de code à droite à gauche, j'ai essayé"de ne pas me compliquer la vie pour la partie php et en fait je vois que, selon tes commentaires, c'est un peu du grand n'importe quoi. Je vais essayé de comprendre le code et de me "l'auto commenter" au lieu de cette fois ci le copier bêtement.

Encore merci pour ton travail.
0
curumo_leblanc Messages postés 266 Date d'inscription samedi 10 septembre 2011 Statut Membre Dernière intervention 7 juillet 2014 74
Modifié par curumo_leblanc le 10/09/2011 à 21:00
Non pas totalement n'importe quoi mais disons que c'est au niveau des vérifications et du traitement que ca se sentait ce "collage". Maintenant on a tous commencé par là :p

Saches que pour la suite si tu as besoin d'aide, mail moi directement : aratar@wanadoo.fr (précises dans le sujet qui tu es sinon c'est spam ou poubelle :p)

Je ne suis pas un grand codeur mais je commence à me débrouiller.

P.S.: j'ai gardé les styles que tu avais copier coller mais n'ayant pas vu tes feuilles de styles j'espère juste que le résultat est "visible" ^^ sinon tu devras générer une feuille de style, définir tes propriétés CSS et surtout changer les class ;)

Changement de pseudo après inscription...
0
Natio78 Messages postés 719 Date d'inscription vendredi 9 novembre 2007 Statut Membre Dernière intervention 27 mai 2013 96
9 sept. 2011 à 17:34
alors on je vais essayer de clarifier,
1) pour l'envoi de mails:
dans ta page traitement.php tu fais tout un tas de tests (je ne les ai pas tous vérifié ) mais tu les fais 1 par 1, c'est à dire que tu ne imbriques pas (si tu as une erreur à un moment effectivement ça t'affichera un message mais le script continuera de s'exécuter sur le serveur) donc ton mail partira. Inspire toi de ce que j'ai écrit précédemment pour imbriquer tes if successivement.

Sinon pour
if(strlen($message)> strlen($msg_erreur)) {
echo $message;
}
tu peux l'enlever, c'est inutile tu compares juste la longueur des chaines de caractère....
-1
oxymore64 Messages postés 34 Date d'inscription samedi 23 avril 2011 Statut Membre Dernière intervention 16 juin 2012
9 sept. 2011 à 18:19
Génial. Merci pour l'explication, je teste ça dans le week end !
0
Oula lisez bien le code... tu définis un message de base puis tu dis que le messqge d'erreur est égal à ton message de base. Après chaque erreur concatène un morceau de texte à la suite "$message .=" notez bien le point pour l'ajout.

Du coup tu test la longeur de ton code erreur avec ton code de base. SI tu as le code erreur plus long alors tu affiches sinon tu executes... Bref je regarde plus en détails mais l'imbrication n'est pas vitale dans le cas présent (et rends le code moins lisible)
0