*
Bienvenue, Invité. Veuillez vous connecter ou vous inscrire.
Avez-vous perdu votre courriel d'activation?
25 Mai 2012 à 11:05:34

Connexion avec identifiant, mot de passe et durée de la session



 

Totorial formulaire


« sujet précédent | | sujet suivant »
Pages: [1] Imprimer
Auteur Fil de discussion: Totorial formulaire  (Lu 1547 fois)
kennyzkit
Nouveau membre
*

Points gagnés: 0
Messages: 5


Voir le profil
Totorial formulaire
« le: 04 Juillet 2007 à 13:36:54 »

Bonjour, voila j'ai commencer à creer un formulaire reltivement complexe grace votre tutorial,
mais j'ai besoin de deux autres chose :

- Inserer un champs avec upload d'un fichier (comment le receptionner et l'integrer dans mon code provenant du tutorial ?)
- Mettre un code antispam du type captcha ? cyptographp ? (et comment l'integrer aussi dans mon code)
- Et je voulais savoir si on est obliger d'utiliser un bdd mysql, peut plutot recevoir l'ensemlbe des informations dans un email avec le fichier upload en fichier joint ?

merci
Journalisée
kennyzkit
Nouveau membre
*

Points gagnés: 0
Messages: 5


Voir le profil
Re : Totorial formulaire
« Répondre #1 le: 04 Juillet 2007 à 13:45:09 »

excuser moi pour la possibilite de recevoir par email je corrige il y a un tutorial qui traite de cette fonction.
Journalisée
kennyzkit
Nouveau membre
*

Points gagnés: 0
Messages: 5


Voir le profil
Re : Tutorial formulaire
« Répondre #2 le: 06 Juillet 2007 à 11:20:49 »

Code:
C'est bon!! après deux jours de recherche et de travail enfin trouver toutes les solutions à mes problèmes. Alors pour ceux à qui ça peut aider :

- Premièrement pour faire un upload de fichier dans le formulaire (avec reception des information du formulaire en mail, je n'est pas essayer avec MySQL) :

Dans la partie html :
[code]<form method="post"  action="traitement.php" enctype="multipart/form-data">
</form>
Vous pouvez remarquer l'ajout de :
Code:
enctype="multipart/form-data"

Puis nous allons insérer le bouton "parcourir" permettant de séléctionner le fichier voulu, et définir aussi le taille maximal du fichier (valeur en octet, 1 Mo = 1048576 octets), donc le code à afficher dans l'ordre, et à inserer dans le formulaire :

Code:
<input type="hidden" name="MAX_FILE_SIZE" value="1048576" />
<p><label for="fichier">Fichier : </label><input type="file" name="fichier" /></p>

Pour l'exemple nous imposons donc un fichier de taille maximal d'1 Mo.

Voila pour la partie html.

Maintenant dans le document "traitement.php" :

Juste après la vérifications des champs, c'est à dire après :
Code:
if (strlen($message) > strlen($msg_erreur)) {

  echo $message;

}

On va indiquer quel script il faut utiliser si la personne a mi un fichier joint :

Code:

if (strlen($fichier_name) > 0)

{
ici on indique que si le nom du fichier est superieur a 0 caractere on effectue le script suivant :

donc ensuite le script si la personne a bien mi un fichier joint :

Code:

$fichier_name = strtr($fichier_name,
     'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
     'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
//On remplace les lettres accentutées par les non accentuées dans $fichier.
//Et on récupère le résultat dans fichier

//En dessous, il y a l'expression régulière qui remplace tout ce qui n'est pas une lettre non accentuées ou un chiffre
//dans $fichier par un tiret "-" et qui place le résultat dans $fichier.
$fichier_name = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier_name);



$repertoire = "upload/";
$destination = $repertoire.$fichier_name;



if (!move_uploaded_file($fichier, $destination)) {print "ERREUR:  Impossible de telecharger le fichier:$fichier_name , verifier la taille de document";}

else {




foreach($_POST as $index => $valeur) {
$$index = stripslashes(trim($valeur));
}



//Préparation de l'entête du mail:
$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 = "Message de : $civilite $nom $prenom\n";
$mail_corps .= "Adresse : $ville, $departement\n";
$mail_corps .= "Contacts : $tel, $mail\n";
$mail_corps .= "Raison sociale : $raison\n";
$mail_corps .= "Qualité : $qualite\n";
$mail_corps .= "Raison sociale : $raison\n\n\n";
$mail_corps .= "Type de prestation : $prestation\n";
$mail_corps .= "Autre type : $autre1\n";
$mail_corps .= "Structure : $structure\n";
$mail_corps .= "Autre structure : $autre2\n";
$mail_corps .= "Professionnel ou amateur : $p_ou_a\n";
$mail_corps .= "Titre de l'oeuvre : $titre\n";
$mail_corps .= "Durée de la prestation: $duree\n";
$mail_corps .= "Distribution : $nb_homme h, $nb_femme f\n";
$mail_corps .= "Public concerné : $public\n";
$mail_corps .= "Droit d'auteur : $droit\n";
$mail_corps .= "Décor : $decor\n";
$mail_corps .= "Site internet : $internet\n\n\n";
$mail_corps .= "Fichier joint : http://www.keopsprod.com/essai/upload/$fichier_name\n";
$mail_corps .= "Message de l'artiste: $comments\n";

// 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 'Une erreur est survenue lors de l\'envoi du formulaire par email';
}

}
}


J'explique :

- La premiere parti du code effectue un changement du nom du fichier de la personne qui veut l'envoyer, cela permet de ne pas avoir d'erreur, car les caractères speciaux et les espaces, peuvent être mal interpreter.



- Et la deuxieme  est simplement l'upload du fichier sur le serveur.
Il faut donc creer un dossier au meme niveau que le script sur le serveur, j'ai ici appeler le dossier "upload", mais aussi un dossier "tmp" sur certain serveur ceci est obligatoire. N'oublier pas de mettre comme attribut chmod a ces deux dossier : 777

- le reste du code provient du tutorial donc normalement pas de probleme pour vous Smile avec la seul difference :
lajout du lien du fichier joint dans le corps du mail.

maintenant il faut indiquer le script qui doit etre utiliser si la personne n'a pas mi de fichier, qui est en realité le meme script utiliser ci dessu mais sans la partie upload, et avec dans le corps du mail: fichier joint : aucun (au lieu du lien) :

Code:

else {


foreach($_POST as $index => $valeur) {
$$index = stripslashes(trim($valeur));
}



//Préparation de l'entête du mail:
$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 = "Message de : $civilite $nom $prenom\n";
$mail_corps .= "Adresse : $ville, $departement\n";
$mail_corps .= "Contacts : $tel, $mail\n";
$mail_corps .= "Raison sociale : $raison\n";
$mail_corps .= "Qualité : $qualite\n";
$mail_corps .= "Raison sociale : $raison\n\n\n";
$mail_corps .= "Type de prestation : $prestation\n";
$mail_corps .= "Autre type : $autre1\n";
$mail_corps .= "Structure : $structure\n";
$mail_corps .= "Autre structure : $autre2\n";
$mail_corps .= "Professionnel ou amateur : $p_ou_a\n";
$mail_corps .= "Titre de l'oeuvre : $titre\n";
$mail_corps .= "Durée de la prestation: $duree\n";
$mail_corps .= "Distribution : $nb_homme h, $nb_femme f\n";
$mail_corps .= "Public concerné : $public\n";
$mail_corps .= "Droit d'auteur : $droit\n";
$mail_corps .= "Décor : $decor\n";
$mail_corps .= "Site internet : $internet\n\n\n";
$mail_corps .= "Fichier joint : aucun\n";
$mail_corps .= "Message de l'artiste: $comments\n";

// 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 'Une erreur est survenue lors de l\'envoi du formulaire par email';
}

}





Si vous avez suivi le tutorial sur les formulaires html,css,php, normalement aucun probleme ne se pose.
Dans le prochains post je vais expliquer comment rajouter une sécurité pour les spambots (image avec lettre à recopier pour pouvoir envoyer le formulaire) sans que des robots vienne pourrir votre boite mail et votre serveur (l'ajout d'upload est risqué sans cette méthode)
 
Voila j'espers que j'ai pût aider des personnes. Very Happy

Si vous voulez voir un exemple, l'adresse d'une page de mon site :
http://www.keopsprod.com/essai/form.html
[/code]
« Dernière édition: 07 Juillet 2007 à 22:58:10 par kennyzkit » Journalisée
kennyzkit
Nouveau membre
*

Points gagnés: 0
Messages: 5


Voir le profil
Re : Totorial formulaire
« Répondre #3 le: 06 Juillet 2007 à 11:48:55 »

Voila après une nuit blanche, des litres de café et l'écriture de mon script et du post j'enchaine  Confused.

Donc je vais maintenant expliquer comment inserer une image de protection contre les spambots.
(d'apres le tutorial trouver a cette adresse : http://wiki.mediabox.fr/tutoriaux/php/cre-formulaire-envoi-mail-avec-image-protection)
Ha oui j'oubliais, pour ne pas avoir de probleme avec l'auteur du script un petit lien sur les droit de reproduction du script :http://creativecommons.org/licenses/by-nc-sa/2.0/fr/deed.fr

(Toujours en suposant que vous avez suivi les tutoriaux de ce site pour la creation de formulaire)

Il faut tout d'abord creer une nouvelle page php que nous allons appelé "cryptimage.php"

Voila le code de la page :
Code:
<?php
/* Démarage d'une session nécéssaire pour récupérer la valeur générée d'une page a l'autre */
session_start();
/* on définie la liste qui va servir a récupérer les lettres qui formeront la valeur a saisir : on exclue le 0 (zéro) pour eviter la confusion avec le O */
$liste "abcdefghijklmnopqrstuvwxyz123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
/* On créer une valeur qui sera notre code secret a saisir */
$code '';
/* On crée une boucle pour créer une chaine de 5 caractères pris au hasard au sein de la variable $liste */
while(strlen($code) != 5) {
$code .= $liste[rand(0,63)];
}
/* on définit une variable de session nomée $_SESSION['code'] que l'on réutilisera plus tard */
$_SESSION['code']=$code;
/* on crée une image de 50 pixels par 20 pixels */
$larg 70;
$haut =20;
$img imageCreate($larg$haut);
$rouge imageColorAllocate($img,999,999,999);
$noir imageColorAllocate($img,0,0,0);
$code_police=30;
header('Expires: Mon, 26 Jul 1997 05:00:00 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");
/* incorporation de la variable variable $code dans l'image */
imageString($img$code_police,($larg-imageFontWidth($code_police)*strlen("".$code.""))/2,0$code,$noir);
/* on crée une image de relative mauvaise qualité (ici 23% d'une image normale pour eviter la reconnaissance visuelle de certains robots */
imagejpeg($img,'',23);
imageDestroy($img);
?>


Donc j'explique un peu :
Cette page donne en fait une image (ca peut paraitre bizard mais si si je vous jure en realité c'est une image)
Ce scrypt génére une image aleatoire, avec 5 caractères choisit au hasard dans liste: $liste
Pour modifier la taille de l'image il faut changer les valeurs $larg et $haut. Pour ce qui est de la taille des caractères je n'est pas trouver de solution (si quelqu'un sait je sui preneur !)

Maintenant on s'occupe du formulaire html :

Pour afficher l'image et le champs de saisi des caractères il faut entrer :
(de preference à la fin du formulaire avant la bouton "envoyer"
Code:
<img src="cryptimage.php" alt="image de securisation du formulaire" title="image de securisation du formulaire" /><br />
<label for="verif">Merci de recopier la combinaison ci dessus dans le champ qui suit :</label><br />
<input type="text" name="verif" size="10" maxlength="5" />


Maintenant dans la page "traitement.php" :

Juste après la balise <?php , donc en tout premier!

Code:
/* nous démarrons la session afin de récupérer la valeur codée */
session_start();
/* Nous testons que la variable existe et qu'elle a bien la longueur souhaitée */
if(!isset($_SESSION['code']) OR strlen($_SESSION['code']) !=5) exit("Erreur !");
 
/* Comparaison entre les deux valeurs si elles sont différentes on arrete tout sinon on continue et on envoie le mail */
if($_SESSION['code'] != $_POST['verif']) exit("<center>Erreur la combinaison entrée est mauvaise</center>");

Voila normalement maintenant tout fonctionne.

Avec ca vous ne risquerez pas d'avoir de mauvaise surprise.

Si vous voulez voir un exemple, l'adresse d'une page de mon site :
http://www.keopsprod.com/essai/form.html
« Dernière édition: 06 Juillet 2007 à 11:50:52 par kennyzkit » Journalisée
kennyzkit
Nouveau membre
*

Points gagnés: 0
Messages: 5


Voir le profil
Re : Totorial formulaire
« Répondre #4 le: 07 Juillet 2007 à 22:27:28 »

Je viens decouvrire une enorme faille dans mon scripte :

Quand une personne ne designe pas un fichier joint (car ce n'est pas obligatoire) il affiche l'erreur que l'upload na pas étè effectuer.

J'ai trouver une solution je vais faire de suite une correction.
Journalisée
Damien
Rédacteur Admin
Intarissable
*****

Points gagnés: 5
Messages: 2853



Voir le profil WWW
Re : Totorial formulaire
« Répondre #5 le: 07 Juillet 2007 à 22:36:08 »

Bonsoir,

Oui il faut vérifier le champ du fichier joint n'est pas vide dans ce cas.

Pour le champ d'image de sécurité, l'idée est sympa pour faire un tutoriel en tout cas. Je retiens Smile
Journalisée

Cordialement,
Damien

Tutoriels informatique
Pages: [1] Imprimer 
« sujet précédent | | sujet suivant »
Aller à:  

Powered by SMF 1.1.12 | SMF © 2006, Simple Machines LLC

Page générée en 0.155 secondes avec 18 requêtes.