Page 1 sur 2

Le rename() ne marche pas !

Posté : 16 mars 2011, 17:33
par Titiii
Bonjour à tous !
Le rename ne fonctionne pas...
Le but est de changer le nom d'un fichier, et de nommer un autre fichier (celui sélectionné avec la variable 'nom' en locurence).
Ce qui est affiché est : "L'avatar par défaut de " . $FICHIER['membre'] . " n'a pas pu être changé."
Les variables récupérées sont correctes, et les fichiers existent bel et bien dans le dossier.
Merci d'avance pour votre aide.
<?php
						if (isset($_GET['nom']))
						{	
							$nom = strip_tags($_GET['nom']); 
							include('connexion_bdd.php');
							$retour = mysql_query("SELECT * FROM uploads WHERE fichier = '".$nom."' ");
							$FICHIER = mysql_fetch_array($retour);
							$ok = 0;
		
							if (!empty($FICHIER))
							{
								$retour2 = mysql_query("SELECT * FROM membres WHERE pseudo = '".$FICHIER['membre']."' ") OR DIE(mysql_error());
								$MEMBRE = mysql_fetch_array($retour2);
							
								?><h2>Changer l'avatar de <?php echo $FICHIER['membre'] ?></h2><?php
								
									//Détermination des noms/emplacements
								$nom_Ancien_Fichier = 'defaut_' . $MEMBRE['id'];
								$emplacement_Ancien_Fichier = 'uploads/' . $nom_Ancien_Fichier;
								$nom_Nouveau_Fichier = uniqid(sha1(mt_rand())) . '.jpeg';
								$emplacement_Nouveau_Fichier = 'uploads/' . $nom_Nouveau_Fichier;
							
									//Si le fichier 'defaut_' existe :
								if (file_exists($emplacement_Ancien_Fichier))
								{
										//Renomage du fichier dans le ftp
									if (rename($emplacement_Ancien_Fichier, $emplacement_Nouveau_Fichier))
									{	$ok++;	}
										//Renomage du fichier dans la base de donnée
									if (mysql_query("UPDATE uploads SET fichier = $nom_Nouveau_Fichier WHERE fichier = $nom_Ancien_Fichier "))
									{	$ok++;	}
								}
							
									//Noms
								$nouveau_Nom = 'defaut_' . $MEMBRE['id'];
								$emplacement_Nouveau_Nom = 'uploads/' . $nouveau_Nom;
								$emplacement_Vieux_Fichier = 'uploads/' . $nom;
					
									//Renomage du fichier dans le ftp
								if (rename($emplacement_Vieux_Fichier, $emplacement_Nouveau_Nom))
								{	$ok++;	}
							
									//Renomage du fichier dans la base de donnée
								if (mysql_query("UPDATE uploads SET fichier = $nouveau_Nom WHERE fichier = $nom "))
								{ $ok++;	}
								
									//Incrémentation de la variable du nombre de changements
								$MEMBRE['nbr_modif']++;
								mysql_query("UPDATE membres SET nbr_modif = '".$MEMBRE['nbr_modif']."' WHERE id = '".$MEMBRE['id']."' ");
								
								if ($ok == 4)
								{
									echo "L'avatar par défaut de " . $FICHIER['membre'] . " a bien été changé. <br /> Clique <a href='index.php' alt='Index'>ici</a> pour revenir à l'index.<br />";
								}
								else
								{
									echo "L'avatar par défaut de " . $FICHIER['membre'] . " n'a pas pu être changé. <br />Si le problème persiste, merci de contacter le webmaster.<br />";
								}
							}
							else
							{
								echo "Désolé, mais le fichier envoyé est introuvable.<br />Merci de réessayer.<br /> Clique <a href='index.php' alt='Index'>ici</a> pour revenir à l'index.<br />";
							}
						}
						else
						{
							echo "Désolé, mais aucun fichier n'a été pris en compte.<br />Merci de réessayer.<br /> Clique <a href='index.php' alt='Index'>ici</a> pour revenir à l'index.<br />";
						}
					?>

Re: Problème de requête...

Posté : 16 mars 2011, 17:55
par moogli
salut,

$chemin2 n'est pas un chemin valide, vérifie que tu a bien une extension dans cette variable ;)

@+

Re: Problème de requête...

Posté : 16 mars 2011, 18:03
par Titiii
Je ne comprends pas, je ne penses pas que ce soit ça, puisque même quant je prends le nom directement dans la bdd, ça ne marche pas...

Merci de votre aide :)

Re: Problème de requête...

Posté : 16 mars 2011, 18:14
par misterflo
Salut,
moogli a raison, tes chemins ne sont pas valides.

De plus ta fonction rename est mal écrite. Erreur au niveau des apostrophes simples et doubles.
Dans une chaine avec apostrophes doubles il n'y a pas besoin d'encadrer les variables.
rename("/uploads/'".$nom."', /uploads/'".$fichier."' ");

DEVIENT 

rename("uploads/$nom", "uploads/$fichier");

Re: Problème de requête...

Posté : 16 mars 2011, 18:18
par Titiii
Comment faire pour les chemins ?
Car le script est dans le dossier, les images sont dans le dossier uploads. Le nom du chemin doit être 'uploads/nom_de_limage.jepg'

Re: Problème de requête...

Posté : 16 mars 2011, 18:58
par misterflo
Pour les chemins, si tu as quelque chose de ce genre :

www/
  • uploads/
    • image1.jpg
    • image2.jpg
    • image3.jpg
  • autre_dossier/
  • accueil.php
  • SCRIPT_MODIF_NOM_IMAGE.php
Alors tes chemins dans tes variables devront être "uploads/$nom", cela marche aussi avec "./uploads/$nom"

Re: Problème de requête...

Posté : 16 mars 2011, 19:16
par Titiii
Pour les variables, je les mets toujours ainsi, cela me permet de les voir d'un seul coup d'œil dans le code source.
Sinon, j'ai modifié les chemins, mais sois ceux ci sont toujours incorrect, soit l'erreur est ailleurs... Car j'ai toujours la même.

Sinon, quand j'ai marqué :

Code : Tout sélectionner

$chemin = "/uploads/$donnee2['avatar']";
ça n'a pas marché (erreur de syntax ou un truc comme ça à cette ligne)

Re: Problème de requête...

Posté : 16 mars 2011, 19:37
par misterflo
Ah oui, la c'est encore autre chose :mrgreen:
Dans le cas présent il faudrait plutôt écrire comme ceci :
$chemin = "uploads/" . $donnee2['avatar'];
Qui marche aussi avec toutes autres variables !

ou alors passer par une variable intermédiaire
$var = $donnee2['avatar'];
$chemin = "uploads/$var";

Re: Problème de requête...

Posté : 17 mars 2011, 01:50
par moogli
ajoute aussi l'extension à la fin :)

$chemin2 = 'upload/'.$nom.'.jpg';

attention le / que tu met au début te pose aussi gênant car il implique que ton dossier upload soit à la racine du système et ce n'est pas le cas (ne pas confondre racine du site et du système ;)

si tu veut le chemin complet sans te gourer
$chemin2 = realpath(dirname(__FILE__) .'/upload/'.$nom.'.jpg';

@+

Re: Problème de requête...

Posté : 17 mars 2011, 08:59
par xTG
Ah oui, la c'est encore autre chose :mrgreen:
Dans le cas présent il faudrait plutôt écrire comme ceci :
$chemin = "uploads/" . $donnee2['avatar'];
Qui marche aussi avec toutes autres variables !

ou alors passer par une variable intermédiaire
$var = $donnee2['avatar'];
$chemin = "uploads/$var";
Ou encore :
$chemin = "uploads/{$donnee2['avatar']}";

Re: Problème de script...

Posté : 17 mars 2011, 10:53
par Titiii
Bonjour à tous !
Le rename ne fonctionne pas...
Le but est de changer le nom d'un fichier, et de nommer un autre fichier (celui sélectionné avec la variable 'nom' en locurence).
Ce qui est affiché est : "L'avatar par défaut de " . $FICHIER['membre'] . " n'a pas pu être changé."
Les variables récupérées sont correctes, et les fichiers existent bel et bien dans le dossier.
Merci d'avance pour votre aide.
<?php
						if (isset($_GET['nom']))
						{	
							$nom = strip_tags($_GET['nom']); 
							include('connexion_bdd.php');
							$retour = mysql_query("SELECT * FROM uploads WHERE fichier = '".$nom."' ");
							$FICHIER = mysql_fetch_array($retour);
							$ok = 0;
		
							if (!empty($FICHIER))
							{
								$retour2 = mysql_query("SELECT * FROM membres WHERE pseudo = '".$FICHIER['membre']."' ") OR DIE(mysql_error());
								$MEMBRE = mysql_fetch_array($retour2);
							
								?><h2>Changer l'avatar de <?php echo $FICHIER['membre'] ?></h2><?php
								
									//Détermination des noms/emplacements
								$nom_Ancien_Fichier = 'defaut_' . $MEMBRE['id'];
								$emplacement_Ancien_Fichier = 'uploads/' . $nom_Ancien_Fichier;
								$nom_Nouveau_Fichier = uniqid(sha1(mt_rand())) . '.jpeg';
								$emplacement_Nouveau_Fichier = 'uploads/' . $nom_Nouveau_Fichier;
							
									//Si le fichier 'defaut_' existe :
								if (file_exists($emplacement_Ancien_Fichier))
								{
										//Renomage du fichier dans le ftp
									if (rename($emplacement_Ancien_Fichier, $emplacement_Nouveau_Fichier))
									{	$ok++;	}
										//Renomage du fichier dans la base de donnée
									if (mysql_query("UPDATE uploads SET fichier = $nom_Nouveau_Fichier WHERE fichier = $nom_Ancien_Fichier "))
									{	$ok++;	}
								}
							
									//Noms
								$nouveau_Nom = 'defaut_' . $MEMBRE['id'];
								$emplacement_Nouveau_Nom = 'uploads/' . $nouveau_Nom;
								$emplacement_Vieux_Fichier = 'uploads/' . $nom;
					
									//Renomage du fichier dans le ftp
								if (rename($emplacement_Vieux_Fichier, $emplacement_Nouveau_Nom))
								{	$ok++;	}
							
									//Renomage du fichier dans la base de donnée
								if (mysql_query("UPDATE uploads SET fichier = $nouveau_Nom WHERE fichier = $nom "))
								{ $ok++;	}
								
									//Incrémentation de la variable du nombre de changements
								$MEMBRE['nbr_modif']++;
								mysql_query("UPDATE membres SET nbr_modif = '".$MEMBRE['nbr_modif']."' WHERE id = '".$MEMBRE['id']."' ");
								
								if ($ok == 4)
								{
									echo "L'avatar par défaut de " . $FICHIER['membre'] . " a bien été changé. <br /> Clique <a href='index.php' alt='Index'>ici</a> pour revenir à l'index.<br />";
								}
								else
								{
									echo "L'avatar par défaut de " . $FICHIER['membre'] . " n'a pas pu être changé. <br />Si le problème persiste, merci de contacter le webmaster.<br />";
								}
							}
							else
							{
								echo "Désolé, mais le fichier envoyé est introuvable.<br />Merci de réessayer.<br /> Clique <a href='index.php' alt='Index'>ici</a> pour revenir à l'index.<br />";
							}
						}
						else
						{
							echo "Désolé, mais aucun fichier n'a été pris en compte.<br />Merci de réessayer.<br /> Clique <a href='index.php' alt='Index'>ici</a> pour revenir à l'index.<br />";
						}
					?>

Re: Problème de script...

Posté : 17 mars 2011, 21:04
par moogli
Reprenons
- qu'est ce qui ne fonctionne pas !
- A tu valider chaque page individuellement ?
- Explique nous où ça bloque !

@+

Re: Problème de script...

Posté : 26 mars 2011, 10:57
par Titiii
Ce qui ne fonctionne pas :
-L'image n'est pas redimensionnée
-Lorsqu'on a déjà cliqué sur une image, elle ne s'affiche plus (galerie)


Je vous explique plus précisément le principe de fonctionnement :
-L'utilisateur envoie une image qui est automatiquement redimensionnée
-Cette image est affichée dans sa galerie
-Il choisit son image par défaut qui prend la valeur de "defaut_ID_JOUEUR.jpeg"
-Si il veut changer l'image par défaut, il clique sur une autre image, qui prendra la même valeur de précédemment, mais avant, celle qui avait déjà ce nom à été renommé et le nom dans la base de donnée aussi

Voilà, j'espère que vous pourrez m'aider :)

Re: Problème de script...

Posté : 28 mars 2011, 12:52
par macgawel
Ce qui ne fonctionne pas :
-L'image n'est pas redimensionnée
-Lorsqu'on a déjà cliqué sur une image, elle ne s'affiche plus (galerie)
Un peu la flemme de tout regarder, mais :
$source = imagecreatefromjpeg("uploads/$fichier"); // La photo est la source
// Traitement
imagejpeg($destination, "$fichier");
tu prends une image dans ./upload et tu la copies dans ....

Pour l'image qui ne s'affiche plus, tu as regardé la source du html généré ?
Il y a deux solutions :
- tu as bien le lien, mais comme il n'y a pas d'image il ne l'affiche pas => problème de chemin, voir ci-dessus...
- tu n'as pas le lien. A priori, ça veut dire que l'image n'est pas dans la BDD...

Re: Problème de script...

Posté : 10 avr. 2011, 18:33
par Titi29
Bonjour !
Désolé pour avoir mis temps de tant ( :mrgreen: ) pour répondre.
Alors j'ai essayé de tout modifier pour essayer de faire fonctionner ce script, mais sans succès.
Déjà, j'ai réglé le problème de la redimension :)

Alors, voici le code :
<?php
						if (isset($_GET['nom']))
						{	
							$nom = strip_tags($_GET['nom']); 
							include('connexion_bdd.php');
							$retour = mysql_query("SELECT * FROM uploads WHERE fichier = '".$nom."' ");
							$FICHIER = mysql_fetch_array($retour);
		
							if (!empty($FICHIER))
							{
								$retour2 = mysql_query("SELECT * FROM membres WHERE pseudo = '".$FICHIER['membre']."' ") OR DIE(mysql_error());
								$MEMBRE = mysql_fetch_array($retour2);
							
								?><h2>Changer l'avatar de <?php echo $FICHIER['membre'] ?></h2><?php
								
									//Détermination des noms/emplacements
								$nom_Ancien_Fichier = 'defaut_' . $MEMBRE['id'];
								$emplacement_Ancien_Fichier = 'uploads/' . $nom_Ancien_Fichier;
								$nom_Nouveau_Fichier = uniqid(sha1(mt_rand())) . '.jpeg';
								$emplacement_Nouveau_Fichier = '/uploads' . $nom_Nouveau_Fichier;
							
									//Si le fichier 'defaut_' existe :
								if (file_exists($emplacement_Ancien_Fichier))
								{
										//Renomage du fichier dans le ftp
									rename($emplacement_Ancien_Fichier, $emplacement_Nouveau_Fichier);
										//Renomage du fichier dans la base de donnée
									mysql_query("UPDATE uploads SET fichier = $nom_Nouveau_Fichier WHERE fichier = $nom_Ancien_Fichier ");
								}
							
									//Noms
								$nouveau_Nom = 'defaut_' . $MEMBRE['id'];
								$emplacement_Nouveau_Nom = 'uploads/' . $nouveau_Nom;
								$emplacement_Ancien_Fichier = 'uploads/' . $nom;
					
									//Renomage du fichier dans le ftp
								rename($emplacement_Ancien_Fichier, $emplacement_Nouveau_Nom);
							
									//Renomage du fichier dans la base de donnée
								mysql_query("UPDATE uploads SET fichier = $nouveau_Nom WHERE fichier = $nom ");
								
									//Incrémentation de la variable du nombre de changements
								$incrementation = $MEMBRE['nbr_modif'] + 1;
								mysql_query("UPDATE membres SET nbr_modif = $incrementation WHERE id = '".$MEMBRE['id']."' ");
					
								echo "L'avatar par défaut de " . $FICHIER['membre'] . " a bien été changé. <br /> Clique <a href='index.php' alt='Index'>ici</a> pour revenir à l'index.<br />";
							}
							else
							{
								echo "Désolé, mais le fichier envoyé est introuvable.<br />Merci de réessayer.<br /> Clique <a href='index.php' alt='Index'>ici</a> pour revenir à l'index.<br />";
							}
						}
						else
						{
							echo "Désolé, mais aucun fichier n'a été pris en compte.<br />Merci de réessayer.<br /> Clique <a href='index.php' alt='Index'>ici</a> pour revenir à l'index.<br />";
						}
					?>
Ce qui marche pas : aucun fichier n'est renommé, aussi bien dans le ftp que dans la base de donnée.
Les images n'apparaissent toujours pas dans la galerie une fois qu'on a cliqué dessus...

Merci d'avance pour votre aide ! :)