Le rename() ne marche pas !

Eléphant du PHP | 71 Messages

16 mars 2011, 17:33

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 />";
						}
					?>
Modifié en dernier par Titiii le 12 avr. 2011, 20:33, modifié 3 fois.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

16 mars 2011, 17:55

salut,

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

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 71 Messages

16 mars 2011, 18:03

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 :)

Eléphant du PHP | 241 Messages

16 mars 2011, 18:14

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");

Eléphant du PHP | 71 Messages

16 mars 2011, 18:18

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'

Eléphant du PHP | 241 Messages

16 mars 2011, 18:58

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"

Eléphant du PHP | 71 Messages

16 mars 2011, 19:16

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)

Eléphant du PHP | 241 Messages

16 mars 2011, 19:37

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";

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

17 mars 2011, 01:50

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';

@+
Il en faut peu pour être heureux ......

ViPHP
xTG
ViPHP | 7331 Messages

17 mars 2011, 08:59

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']}";

Eléphant du PHP | 71 Messages

17 mars 2011, 10:53

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 />";
						}
					?>
Modifié en dernier par Titiii le 12 avr. 2011, 20:53, modifié 1 fois.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

17 mars 2011, 21:04

Reprenons
- qu'est ce qui ne fonctionne pas !
- A tu valider chaque page individuellement ?
- Explique nous où ça bloque !

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 71 Messages

26 mars 2011, 10:57

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 :)

Mammouth du PHP | 672 Messages

28 mars 2011, 12:52

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...

Titi29
Invité n'ayant pas de compte PHPfrance

10 avr. 2011, 18:33

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 ! :)