petit probléme de controle de nom d'image en double

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 : petit probléme de controle de nom d'image en double

Re: petit probléme de controle de nom d'image en double

par AB » 12 juin 2010, 18:26

Oui c'est certain que pour une incrémentation, glob sera plus rapide dans la grande majorité des cas :wink:

Re: petit probléme de controle de nom d'image en double

par stealth35 » 12 juin 2010, 17:01

on peu éviter le récursif, si on a plein de fichier il a faire l'opération a chaque fois, on peu dans ce cas utiliser glob, pour allé cherche le fichier et ses incrémentations, on prendre la dernier incrémentation net on fait +1 :wink:
A priori j'allais dire bonne idée :wink:
Et puis en y réfléchissant un peu plus, la meilleure efficacité de glob par rapport à la solution récursive dépend du contexte, c'est à dire non seulement du nombre de fichiers identiques mais aussi du nombre total de fichiers contenus dans le répertoire et du ratio fichiers_identiques/fichiers_total. En effet l'utilisation de glob implique de vérifier le masque sur tous les noms de fichiers du répertoire...

Peut-être l'utilisation de glob sera plus rapide dans de nombreux cas, mais plutôt que se prendre la tête à étudier les différents cas de figure, dans le cas où le nombre de fichiers identiques risque d'être important, à mon avis le plus efficace est encore de concaténer un identifiant unique au nom original.
C'est pour cette raison que j'ai mis ce comportement par défaut pour la fonction de renommage de fichiers de cette classe de téléchargement :wink:
oui c'est sur mais dans l'autre cas ou tu rajoutes une incrementation dans ton code, c'est beaucoup rapide avec glob puisque c'est une fonction interne au système et les fichiers sont indexer, alors que toi en PHP tu vas vérifier une par une chaque incrémentation de fichier.

Re: petit probléme de controle de nom d'image en double

par AB » 12 juin 2010, 16:45

on peu éviter le récursif, si on a plein de fichier il a faire l'opération a chaque fois, on peu dans ce cas utiliser glob, pour allé cherche le fichier et ses incrémentations, on prendre la dernier incrémentation net on fait +1 :wink:
A priori j'allais dire bonne idée :wink:
Et puis en y réfléchissant un peu plus, la meilleure efficacité de glob par rapport à la solution récursive dépend du contexte, c'est à dire non seulement du nombre de fichiers identiques mais aussi du nombre total de fichiers contenus dans le répertoire et du ratio fichiers_identiques/fichiers_total. En effet l'utilisation de glob implique de vérifier le masque sur tous les noms de fichiers du répertoire...

Peut-être l'utilisation de glob sera plus rapide dans de nombreux cas, mais plutôt que se prendre la tête à étudier les différents cas de figure, dans le cas où le nombre de fichiers identiques risque d'être important, à mon avis le plus efficace est encore de concaténer un identifiant unique au nom original.
C'est pour cette raison que j'ai mis ce comportement par défaut pour la fonction de renommage de fichiers de cette classe de téléchargement :wink:

Re: petit probléme de controle de nom d'image en double

par stealth35 » 11 juin 2010, 15:44

Essayes de remplacer la fonction initiale par celle-ci :
function Rename_fich($adresse_fichier)

    {
      //Si le fichier existe et est un fichier valide
      if (is_file($adresse_fichier))
              {
                  // Informations sur le fichier
                  $info = pathinfo($adresse_fichier);
                  $extension = $info['extension'];
                  $filename = basename($adresse_fichier);
                  $dossier = $info['dirname'];
 
                  // Cherche dans le nom de fichier des caractères numériques en fin de nom et si oui incrémente ce nombre grâce à la fonction anonyme create_function
                  $rename_filename = preg_replace_callback('#([0-9]+$)#', create_function('$matches','return $matches[1]+1;'), $filename);
                                 
                  $filename = $filename != $rename_filename ? $rename_filename : $filename.'1';
                                 
                  // Reconstruction du nom de fichier avec son extension (si elle existe)
                  $filename = !empty($extension) ? $filename.'.'.$extension : $filename;
                                 
                  // Reconstruction de l'adresse du fichier
                  $adresse = $dossier.'/'.$filename;
                                 
                  // Appel de la fonction pour re vérification avec le nouveau nom du fichier
                  return Rename_fich($adresse);
                                 
              }
                         
      // Retourne le chemin complet du fichier      
      else return $adresse_fichier;
    }
on peu éviter le récursif, si on a plein de fichier il a faire l'opération a chaque fois, on peu dans ce cas utiliser glob, pour allé cherche le fichier et ses incrémentations, on prendre la dernier incrémentation net on fait +1 :wink:

Re: petit probléme de controle de nom d'image en double

par stealth35 » 30 mai 2010, 17:16

pffff le boulet :P que je suis j'ai bien MDP et MDPBIS toujours le meme probléme l'annonce se poste bien sans probléme l'utilisateur s'enregeristre mais la photo ne change pas de nom si la photo est déja présente :cry:
pour ton histoire de doublon de photo, c'est pas comme ca qui faut si prendre, ta juste a nommer la photo comme le pseudo, et c'est réglé :wink:

Re: petit probléme de controle de nom d'image en double

par spidercrash » 30 mai 2010, 10:07

pffff le boulet :P que je suis j'ai bien MDP et MDPBIS toujours le meme probléme l'annonce se poste bien sans probléme l'utilisateur s'enregeristre mais la photo ne change pas de nom si la photo est déja présente :cry:

Re: petit probléme de controle de nom d'image en double

par stealth35 » 29 mai 2010, 15:52

non c'est pareil : t'as mis "mps" dans ton script c'est "MDP"

Re: petit probléme de controle de nom d'image en double

par spidercrash » 29 mai 2010, 08:20

je réitère mon post d'avant j'avais changé le résultat voici se que j'obtient

Code : Tout sélectionner

Array ( [departement] => 63-Puy-de-Dôme [NOMutilisateur] => azazz [MAILutilisateur] => [email protected] [mps] => a [mpsbis] => a [TELEPHONE] => [typeanannonce] => donne [categorie] => vehicules [souscategorie] => bricolage-jardin-chauffage [titreannocne] => aaa [descriptionannonce] => aaa [prix] => aa [region] => Auvergne [ok] => envoyer )
tout les champs sont bien renseigné

Re: petit probléme de controle de nom d'image en double

par stealth35 » 28 mai 2010, 23:58

nul part dans ton POST y'a MDP ni MDPBIS, donc ta condition n'est pas verifié, ni la 2eme puisque POST n'est pas vide :wink:

Re: petit probléme de controle de nom d'image en double

par spidercrash » 28 mai 2010, 20:32

la seul chose en plus dans le script et la partie enregistrement utilisateur est ce que par hazard le script de renommage de photo est mal palcé je vais essayer de mettre des echo

Re: petit probléme de controle de nom d'image en double

par AB » 28 mai 2010, 19:43

Ben si ça fonctionnait avant et que cela ne fonctionne plus après avoir rajouter du code, c'est bien ce que tu as rajouté qui pose problème.

Donc suffit de reprendre et contrôler pas à pas tes modifications... Soit tu recommences ta modification et tu vérifies chaque étape, soit tu mets des tests (genre echo 'bloc 1 ok ça passe';) dans ton code actuel pour voir où ça bloque. Bien entendu avec la gestion des erreurs activées.

Savoir débugguer un code est très instructif, et te servira par la suite :wink:

Re: petit probléme de controle de nom d'image en double

par spidercrash » 28 mai 2010, 18:14

donc j'ai fait se que tu ma dit et lorsque je valide cela me donne

Array
(
[departement] => 63-Puy-de-Dôme
[NOM] => azazz
[MAIL] => [email protected]
[aaa => a
[aaa] => a
[TEL] =>
[typean] => donne
[categorie] => vehicules
[souscategorie] => bricolage-jardin-chauffage
[titre] => aaa
[description] => aaa
[prix] => aa
[region] => Auvergne
[ok] => envoyer
)


Warning: Cannot modify header information - headers already sent by (output started at /aa/laa/www/php/mcpvalidationannonce.php:4) in /homez.316/logisdesq/www/php/mcpvalidationannonce.php on line 183

le header c'est normal cela est dut au echo mais pas d'autre message

Re: petit probléme de controle de nom d'image en double

par stealth35 » 28 mai 2010, 16:35

t'as une erreur d'affiché ? si non t'as la gestion des erreurs d'activé ?

en haut de ta page
ini_set('display_errors', 1);
ini_set('error_reporting', E_ALL | E_STRICT);
EDIT :

et après rajoute un
echo sprintf('<pre>%s</pre>', print_r($_POST, true));

Re: petit probléme de controle de nom d'image en double

par spidercrash » 28 mai 2010, 16:32

j'ai appliquer le script pour renommer les photos mais le probléme cela ne fonctionne pas j'ai rajouter des chose dans mon script general mais je voit pas se qui peut bloquer.
<?php
function Parse($variable,$valeur) {
echo "&" . $variable . "=" . utf8_encode($valeur);
}

if (!empty($_POST) && $_POST['MDP'] == $_POST['MDPBIS']) {

	if(($_POST['NOMUTILISATEURS'] != '') && ($_POST['MAILUTILISATEURS'] != ''))
     {
	 if(preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $_POST['MAILUTILISATEURS']))
        {

 // traitement
$categorie=$_POST['categorie'];
$typeannonce=$_POST['typeannonce'];
$souscategorie=$_POST['souscategorie'];
$titreannonce=$_POST['titreannonce'];
$descriptionannonce=$_POST['descriptionannonce'];
$prix=$_POST['prix'];
$departement=$_POST['departement'];
$region=$_POST['region'];
$NOMUTILISATEURS=$_POST['NOMUTILISATEURS'];
$MAILUTILISATEURS=$_POST['MAILUTILISATEURS'];
$MDP=$_POST['MDP'];
$MDPBIS=$_POST['MDPBIS'];
$TELEPHONE=$_POST['TELEPHONE'];

include ('connect.php');
$crypt=md5($MDP);



	//On sélectionne dans la table "UTILISATEUR" le login qui a pour valeur la variable "$login"
	$sql = "SELECT * FROM utilisateurs WHERE MAILUTILISATEURS = '$MAILUTILISATEURS'";
    $req = mysql_query($sql)or die(mysql_error());
	// on compte le nombre de résultats
    $result = mysql_numrows($req);
	// le login existe déjà
    if($result!=0)  
        {
        Parse("resultat","email '$MAILUTILISATEURS' existe deja, desole"); //alors on renvoi au Flash que le login '$MAILUTILISATEURS' existe déjà
        }
    else  //sinon le login n'existe pas  
        {
		
function Rename_fich($adresse_fichier)

    {
      //Si le fichier existe et est un fichier valide
      if (is_file($adresse_fichier))
              {
                  // Informations sur le fichier
                  $info = pathinfo($adresse_fichier);
                  $extension = $info['extension'];
                  $filename = $info['filename'];
                  $dossier = $info['dirname'];
 
                  // Cherche dans le nom de fichier des caractères numériques en fin de nom et si oui incrémente ce nombre grâce à la fonction anonyme create_function
                  $filename = preg_replace_callback('#([0-9]+$)#', create_function('$matches','return $matches[1]+1;'), $filename, '1', $count);
                                 
                  // Si des caractères numériques sont trouvés et incrémentés (le paramètre $count employé dans preg_replace_callback indique le nombre de remplacements), $filename prend sa nouvelle valeur, sinon l'ancienne concaténée à 1
                  $filename = !empty($count)? $filename : $filename.'1';
                                 
                  // Reconstruction du nom de fichier avec son extension (si elle existe)
                  $filename = !empty($extension) ? $filename.'.'.$extension : $filename;
                                 
                  // Reconstruction de l'adresse du fichier
                  $adresse = $dossier.'/'.$filename;
                                 
                  // Appel de la fonction pour re vérification avec le nouveau nom du fichier
                  return Rename_fich($adresse);
                                 
              }
                         
      // Retourne le chemin complet du fichier      
      else return $adresse_fichier;
        }

//dossier ou seront stocket les miniature et les images
$dir = getcwd()."/pics";
$dir_mini = getcwd()."/mini";

//taille des miniature
$ratio = 90;

//recuperation du post du formulaire
if (isset($_POST['ok'])) {
// on teste si le champ permettant de soumettre un fichier est vide ou non
	if (empty($_FILES['mon_image']['tmp_name'])) {
		
		$erreur = 'Aucun fichier envoyé.';
	}
			else {
			
			
// on examine le fichier uploadé en récupérant de nombreuses informations sur ce fichier		
		$tableau = @getimagesize($_FILES['mon_image']['tmp_name']);
		if ($tableau == FALSE) {
// si le fichier uploadé n'est pas une image, on efface le fichier uploadé et on affiche un petit message d'erreur 			
			unlink($_FILES['mon_image']['tmp_name']);
			$erreur = 'Votre fichier n\'est pas une image.';
		}

	
		else {
		

		
			if ($tableau[2] == 2) {
				
				if (is_file('.pics/'.$_FILES['mon_image']['name'])) $file_upload = '_'.$_FILES['mon_image']['name'];
				else $file_upload = $_FILES['mon_image']['name'];
				

// on copie le fichier que l'on vient d'uploader dans le répertoire des images de grande taille 				
				copy ($_FILES['mon_image']['tmp_name'], $dir.'/'.$file_upload);
				
				if ($tableau[2] == 2) {

// on crée une image à partir de notre grande image à l'aide de la librairie GD 					
					$src = imagecreatefromjpeg($dir.'/'.$file_upload);
					$NouvelleLargeur = 120; //Largeur choisie à 350px mais modifiable
					$NouvelleHauteur = 100;
					$NouvelleLargeurpaysage = 120;
					$NouvelleHauteurpaysage = 100;
					
					
// on teste si notre image est de type paysage ou portrait 					
					if ($tableau[0] > $tableau[1]) {
						$im = imagecreatetruecolor($NouvelleLargeur , $NouvelleHauteur) or die ("Erreur");
						imagecopyresampled($im , $src  , 0,0, 0,0, $NouvelleLargeur, $NouvelleHauteur, $tableau[0],$tableau[1]);
					}
					else {
						$im = imagecreatetruecolor($NouvelleLargeur , $NouvelleHauteur) or die ("Erreur");
						imagecopyresampled($im , $src  , 0,0, 0,0, $NouvelleLargeur, $NouvelleHauteur, $tableau[0],$tableau[1]);

					}
 // on copie notre fichier généré dans le répertoire des miniatures 										
					imagejpeg ($im, $dir_mini.'/'.$file_upload);
				
			
				}
				
			include ('connect.php');			
			$sql = "INSERT INTO utilisateurs (NOMUTILISATEURS,MAILUTILISATEURS,MDP,TELEPHONE) VALUES ('$NOMUTILISATEURS','$MAILUTILISATEURS','$crypt','$TELEPHONE')"; //Alors on insert dans la table le nouvel utilisateur        
                mysql_query ($sql);
                $NUMUTILISATEURS=mysql_insert_id();
                        $sql2 = "INSERT INTO annonces (categorie,typeannonce,souscategorie,titreannonce,descriptionannonce,prix,date,departement,region,NUMUTILISATEURS) VALUES ('$categorie','$typeannonce','$souscategorie','$titreannonce','$descriptionannonce','$prix','".date("Y-m-d H:i:s")."','$departement','$region','$NUMUTILISATEURS')";
                        $req = mysql_query($sql2)or die(mysql_error());
			
							$nom = "/{$_FILES['mon_image']['name']}";
							$image = $dir.$nom;
							$miniature = $dir_mini.$nom;
							$numannonce=mysql_insert_id();
							$sql3 = "INSERT INTO images (image,miniature,numannonce) VALUES ('$image','$miniature','$numannonce')";       
							$req = mysql_query($sql3)or die(mysql_error());

			  
			 header('Location: ../comptecree.php');
			
			
			
									}
			else {
// si notre image n'est pas de type jpeg				
				unlink($_FILES['mon_image']['tmp_name']);
				$erreur = 'Votre image est d\'un format non supporté.';
			}
		}
	}
	
}
	}
	
	}
        else
        {
			//controle adresse email carractère
            header('Location: ../emailinvalide.php');
        }
    }
    else
    {
        //controle saisie champs
         header('Location: ../champsnonrenseigne.php');
    }


}	
elseif (!empty($_POST))
{
  echo 'Le Mot de passe est different du premier.';
}      

?>

Pouvez vous m'aider svp merci d'avance

Re: petit probléme de controle de nom d'image en double

par AB » 24 mai 2010, 18:15

cela marche niquel donc j'ai mit a jour la version encore merci :p et le script du départ fonctionne a merveille encore merci a vous :D
Ben alors t'as fait d'une pierre deux coups, la résolution de ton pb avec en plus la mise à jour de ta version php.
Elle est pas belle la vie ? :) A+