[RESOLU] Upload d'avatar pour membres

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 : [RESOLU] Upload d'avatar pour membres

Re: Upload d'avatar pour membres

par nico44530 » 17 nov. 2011, 02:35

Merci beaucoup,

Je vais commencer par le formulaire et le script d'upload simple.
Ensuite je verrai avec vous comment associé un avatar a un membre par un id.

Sinon, j'utiliserais un fichier config.php sans le "3"
Pour Mysql_real_escape_string, je regarderais sur php.net comment faire.

:D
Merci bicou ! :mrgreen:

Re: Upload d'avatar pour membres

par Mazarini » 16 nov. 2011, 10:06

...
- Il faut ajouter dans le "form" enctype="multipart/form-data" afin d'indiquer au navigateur que tu souhaite transmettre aussi un (ou plusieurs c'est pareil) fichier.
...
Je l'oublie toujours celui la^^

Re: Upload d'avatar pour membres

par moogli » 16 nov. 2011, 10:00

salut,

pas de code, pas de modif juste de lien qui explique la chose

- l'upload de fichier se fait avec un input de type "file" (par exemple <input type="file" name="avatar" />)
- Il faut ajouter dans le "form" enctype="multipart/form-data" afin d'indiquer au navigateur que tu souhiate transmettre aussi un (ou plusieurs c'est pareil) fichier.
- la documentation de php sur le sujet => Chargement de fichier par la méthode POST
- Le changement de type d'image que tu indique (passer de png à jpg par exemple) ce fait à l'aide de la librairie GD, le plus simple étant de regarde des tutos sur le sujet sur phpdebutant.org ou lephpfacile.com par exemple.
- tu pourra en plus vérifier la taille de l'image (pour qu'elle n'aille pas mettre le brin sur ton beau design ;) ) avec cette même librairie GD.

Remarque général sur ton code
- il ne faut jamais employer une variable fournie par l'utilisateur (url, formulaire ou ccokie) sans vérifier au préalable si elle existe. Tu ne peux être certain que personne ne va bidouiller le formulaire, et la s'il manque un champ comment réagit ton script ?
- juste pour info, si tu utilise php > 5.2 tu peux utiliser filter_var pour valider ton adresse mail, mais aussi pas mal de chose que tu veux voir ici
- l'extension du fichie de conf m'inquiete tu utilise php 3 ? si oui heu faudrait, si possible, ce mettre à jour on en est à 5.3.8 (et oui c'est utile, pour les fonctionnalités / résolution de bug etc etc)
- le htmlentites ne devrait être utilisé qu'a l'affichage, ta base de donnée conserve très bien des données brutes (c'est fait pour ça tu me diras).
- Par contre il est important d'utiliser mysql_real_escape_string pour "échapper" tes données afin d'éviter une faille SQL (la faut demander à google des infos sur les injections sql, les failles xss aussi en même temps :) ).
- je vois une colonne avatar dans la requête "insert" (ligne 62) et tu demande comment l'ajouter ? je reste perplexe ^^
- tu tu fixe le nom "id".jpg tu n'a pas besoin de l'indiquer dans la table des membres, à l'affichage tu cherche juste si le fichier existe si oui tu l'utilise si non avatar par défaut.

- Pour la gestion d'upload AB] propose une classe de gestion d'upload qui fait "papa maman". Je te laisse découvrir tous ce que cette classe peux faire ;)

juste pour info, il est possible, en SQL, de renommer (ou donner un alias) à une colonne histoire de ne pas se trimballer des truc un peux lourd.
Par exemple
SELECT COUNT(*) FROM pdf_membre WHERE pseudo=
tu peux faire SELECT COUNT(*) as nbmembre FROM pdf_membre WHERE pseudo=
tu récupère $donnees['nbmembre'] c'est plus parlant pour la compréhension du code, si tu met juste 'nb' c'est aussi plus court :mrgreen:

Voila je crois que j'ai à peut près fait le tour si tu a des questions n'hésite pas (code à l'appui que l'on comprenne mieux la démarche ;))

edit: ha ba voilà on peux pas écrire un roman sans se faire griller :)
Plein d'info pour commencer ;)

@+

Re: Upload d'avatar pour membres

par Mazarini » 16 nov. 2011, 09:58

Bonjour,

Pour ajouter l'avatar dans le formulaire, un input de type file <input name="fichier" type="file" size="50" maxlength="100000"> à ajouter dans la page ou tu construis la page de saisie.

Dans la page de traitement du formulaire, tu récupères le fichier via la variable $_FILES (http://php.net/manual/fr/reserved.variables.files.php).
Tu peux la mettre ou tu veux avec le nom que tu veux via la fonction move_uploaded_file() (http://www.php.net/manual/fr/function.m ... d-file.php)
Il faut contrôler :
- upload bien fait (voir variable $_FILES)
- que c'est une image (cf fonction getimagesize()) - http://fr2.php.net/manual/fr/function.getimagesize.php

Pour la transformation : voir les fonctions comme imagecreatefrompng() pour charger un image png (idem pour gif) et imagejpeg() pour créer le fichier.

Tu dois avoir pas mal d'éléments la pour t'occuper. On verras ensuite pour les détails.

Upload d'avatar pour membres

par nico44530 » 16 nov. 2011, 08:18

Bonjour,

Avant d'exposer mon problème, je suis débutant en php, je m'y connais quand même. :)
Ensuite j'aimerais que vos réponses soient complètes, si vous me donnez des bouts de code je ne vais pas savoir ou les mettre :(
Et expliquez en détail la marche à suivre à l'aide de la page inscription.php ; Ce sujet pourra servir à un autre que moi :wink:

Merci de votre compréhension (J'en demande beaucoup trop je sais :oops: mais c'est pour mieux comprendre)

Je travaille sur un site permettant à des internautes de s'inscrire, et j'ai déjà créé l'espace membre auparavant qui fonctionne bien.
Le problème est que j'aimerais ajouter un upload d'avatar.
Chaque membres choisis son avatar à son inscription depuis son pc et le transmet via une base de donnée sur mon FTP.
L'image apparaitra avec l'id du membre avec comme url : "repertoire/'. $id .' .jpg"
Par ailleurs, comment on ajoute la colonne "avatar" dans la base mysql ?
Ensuite, je voudrais que si un membre choisisse une photo avec extention "png", que la photo soit recrée avec l'extention "jpg".

Je vous affiche la page inscription.php :
<?php
session_start();
require("conf.php3");

$mail = htmlentities($_POST['mail']);

    if (preg_match("!^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$!", $mail)) 
    {
		$chaine = "abcdefghijklmnopqrstuvwxyz0123456789"; 
		$confirm = str_shuffle($chaine);
		
		$pseudo = htmlentities($_POST['pseudo']);
		$mdp = htmlentities($_POST['mdp']);
		$verif_mdp = htmlentities($_POST['verif_mdp']);
		$nom = htmlentities($_POST['nom']);
		$prenom = htmlentities($_POST['prenom']);
		$website = htmlentities($_POST['website']);
		$pays = htmlentities($_POST['pays']);
		$born = htmlentities($_POST['born']);
                $avatar = htmlentities($_POST['avatar']);
		
		
	
		$message1 = '<html><body>Bonjour ' . $pseudo . ' et bienvenue sur ' .$nom_site. '.</br>'; 
		$message1 .= '</br>';
		$message1 .= 'Vous venez de vous inscrire et nous sommes heureux<br>de pouvoir vous compter aujourd\'hui parmi nos membres.<br>'; 
		$message1 .= 'Voici un rappel de vos identifiants, notez les précieusement : <br>';
		$message1 .= 'Votre Pseudo :' . $pseudo .'.<br>';
		$message1 .= 'Votre Mot de passe:' . $mdp .'.<br><br>';
		$message1 .= 'Votre Mail:' . $mail .'.<br><br>';
		$message1 .= 'Votre Nom:' . $nom .'.<br><br>';
		$message1 .= 'Votre Prenom:' . $prenom .'.<br><br>';
		$message1 .= 'Votre Pays:' . $pays .'.<br><br>';
		$message1 .= 'Votre Site Web' . $website .'.<br><br>';
		$message1 .= 'Votre Date de naissance:' . $born .'.<br><br>';									
		$message1 .= 'Si vous souhaitez changer vos informations, rendez-vous dans votre compte pour les mettre à jour.<br>';
		$message1 .= 'Votre Clé d\'activation:<br>';
   		$message1 .= '' .$url_script. '/confirm.php?login=' . str_replace(' ','%20',$pseudo) . '&confirm=' . $confirm . '<br><br>';
		$message1 .= 'A très bientôt sur le site!<br>L\'équipe de ' .$nom_site. '.<br><a href="' .$url_site. '">' .$nom_site. '</a>';

		$sql = connect_sql();
		
		$verification = mysql_query("SELECT COUNT(*) FROM pdf_membre WHERE pseudo='$pseudo' OR mail='$mail'") or die (mysql_error());
		$donnees = mysql_fetch_array($verification)or die (mysql_error());

		if($donnees['COUNT(*)'] >= 1) 
		{ 
			$reponse = 'Le pseudo ou l\'email est déjà utilisé, merci d\'en choisir un(e) autre. <a href="javascript:history.back(1)">Retour au formulaire</a>';
		}
		else
		{	
			if( empty($pseudo) || empty($mdp) || empty($verif_mdp) || empty($mail) || empty($nom) || empty($prenom) || empty($born) || empty($avatar))
			{
				$reponse = 'Un ou plusieurs champs ne sont pas remplis, <a href="javascript:history.back(1)">Retour au formulaire</a>';
			}
			elseif( $mdp != $verif_mdp) //On verifie que les 2 pass sont identiques
			{
				$reponse = 'Les mots de passe ne sont pas identiques, <a href="javascript:history.back(1)">Retour au formulaire</a>';
			}
			else 
			{
				mysql_query("INSERT INTO pdf_membre VALUES ('','$pseudo', '$mdp', '$mail', '$confirm', '$nom', '$prenom', '$pays', '$born', '$website', '$avatar')");
				$reponse = 'Bravo, vous êtes maintenant inscrit sur ' .$nom_site. '. <br>Vous allez recevoir un e-mail pour activer votre compte. <br>
                                <a href="' .$url_site. '">Retour à l\'Accueil</a>';
				$entete = "MIME-Version: 1.0\r\n";
				$entete .= "Content-type: text/html; charset=iso-8859-1\r\n";
				$entete .= "From: <$email_admin>\r\n";
				$entete .= "Reply-To: $email_admin\r\n";
				mail($mail,'Bienvenue sur ' .$nom_site. ' ' . $login .'.' , $message1, $entete);
			}
		}
		
		mysql_close($sql);
	}
	else 
	{
		$reponse = 'Votre adresse e-mail "' . $mail . '" n\'est pas correcte. <a href="javascript:history.back(1)">Retour au formulaire</a>';
	} 	




?>
Merci beaucoup pour votre aide