Le rename() ne marche pas !

Eléphant du PHP | 71 Messages

10 avr. 2011, 18:49

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:54, modifié 1 fois.

Eléphant du PHP | 71 Messages

11 avr. 2011, 17:25

Help svp ! :)

Eléphant du PHP | 71 Messages

13 avr. 2011, 16:38

Bonjour !
Je renouvelle ma demande d'aide... :)
Merci d'avance :)

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

13 avr. 2011, 18:10

- qu'a tu fait depuis la dernière fois ?

j'ai corrigé les requêtes SQL qui ne sont pas syntaxiquement correcte.
A tu testé les bouts de code un a un ?
@+
<?php
if (isset($_GET['nom']))
                  {   $nom = strip_tags($_GET['nom']); }
                  include('connexion_bdd.php');
                  $retour = mysql_query("SELECT * FROM uploads WHERE fichier = '".$nom."' ");
                  $donnee = mysql_fetch_array($retour);
                  
                  if (!empty($donnee))
                  {
                     $retour2 = mysql_query("SELECT pseudo, id, avatar, ext_avatar FROM membres WHERE pseudo = '".$donnee['membre']."' ");
                     $donnee2 = mysql_fetch_array($retour2);
                     $chemin = '/uploads/' . $donnee2['avatar'];
                     $chemin2 = '/uploads/' . $nom;
                     $fichier = 'defaut_' . $donnee2['id'];
                     if (file_exists($chemin))
                     {
                        $nvNom = uniqid(sha1(mt_rand())) . '.' . $donnee2['ext_avatar'];
                        rename("/uploads/'".$donnee2['avatar']."', /uploads/'".$nvNom."' ");
                        mysql_query("UPDATE uploads SET fichier = '".$nvNom."', extension = '".$donnee2['ext_avatar']."' WHERE fichier = '".$fichier."' ");
                     }
                     if (file_exists($chemin2))
                     {
                        rename("/uploads/'".$nom."', /uploads/'".$fichier."' ");
                        mysql_query("UPDATE membres SET avatar = '".$fichier."', ext_avatar = '".$donnee['extention']."' WHERE id = '".$donnee2['id']."' ");
                        echo '<h2>Changer l\'avatar de ';
                        echo $donnee['membre'];
                        echo ' </h2>
                        htmlspcialcharseouoe ();
                        

Le changement � bien �t� effectu�.
Clique ';
                        ?>
                        <a href="galerie.php?id=<?php echo $donnee2['id']; ?>" alt="Galerie">ici</a> pour retourner � sa galerie.
                        <?php
                     }
                     else
                     {
                        echo '<h2>Changer l\'avatar de ';
                        echo $donnee['membre'];
                        echo '
';
                        echo $nom;
                        echo '</h2>

D�sol�, mais le changement est impossible.
<a href="index.php" alt="Index">Retourner � l\'index.
</a>';
                     }
                  }
                  else
                  {
                     echo '<h2>Changer un avatar</h2> ';
                     echo '

D�sol�, mais le fichier est introuvable.
<a href="index.php" alt="Index">Retourner � l\'index.
</a>';
                  }
               ?>
Il en faut peu pour être heureux ......

Eléphant du PHP | 71 Messages

13 avr. 2011, 18:41

Ben en fait, j'avais tout refait le script, en essayant d'être le plus clair possible, et surtout le plus simple.
En fait, ce qui ne marche pas, c'est que les fichiers ne sont pas renommés, du coup, les images de la galeries de s'affichent pas.

L'erreur affichée est bien "L'avatar par défaut de [...] n'a pas pu être changé".

Le seul problème, c'est que je ne vois pas du tout là où ça cloche !
Merci encore d'avance pour votre aide ! :)

PS : voici le code, quand même ^^ :
<?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 />";
						}
					?>

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

13 avr. 2011, 20:22

a tu essayé de debuguer ?
a tu afficher $ok pour savoir qu'elle valeur il a ?
a tu ajouter des else aux if pour afficher des message d'erreur histoire de voir où ça cloche ?

Bref que sais tu du "dysfonctionnement" a part ce que ça écrit (qui n'est pas significatif pour déboguer vu le nombre de source possible) ?

PS : essai d'utiliser les balises php ce sera plus lisible ;)


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

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

13 avr. 2011, 23:41

Modération :
Afin d'améliorer la lisibilité de ton message,
pense à utiliser les balises [php] (plus lisible que la balise [code]).

De plus, merci de ne pas t'impatienter. Nous sommes des bénévoles, nous répondons selon nos disponibilité
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 71 Messages

14 avr. 2011, 18:53

Bonjour !
Désolé pour la balise PHP, je n'avais pas fait attention.

Donc, j'ai fais comme tu me l'a conseillé.
C'est pourquoi j'ai remarqué l'erreur... Mais pas réussi à la corriger... T.T
Alors, $ok affiche 1. J'ai aussi l'erreur de la requête 4.
Mais j'ai vérifié dans le ftp, le fichier n'est pas renommé en "defaut_ID" !!!
Je n'y comprends plus rien !

Voici le code avec les code d'erreur que j'ai inséré :
<?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++;	}
									else	{	echo 'Erreur1<br />';	}
										//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++;	}
									else	{	echo 'Erreur2<br />';	}
								}
							
									//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++;	}
								else	{	echo 'Erreur3<br />';	}
							
									//Renomage du fichier dans la base de donnée
								if (mysql_query("UPDATE uploads SET fichier = $nouveau_Nom WHERE membre = '".$MEMBRE['pseudo']."' "))
								{ $ok++;	}
								else	{	echo 'Erreur4<br />';	}
								
									//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 || $ok == 2)
								{
									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 $ok;
									echo "<br />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 />";
						}
					?>
Donc ce qui est affiché :
Erreur4
1
L'avatar par défaut de Titii n'a pas pu être changé.
Voici l'erreur 4 :
//Renomage du fichier dans la base de donnée
								if (mysql_query("UPDATE uploads SET fichier = $nouveau_Nom WHERE membre = '".$MEMBRE['pseudo']."' "))
								{ $ok++;	}
								else	{	echo 'Erreur4<br />';	}
Et la focntion rename(), qui "marche" mais qui ne renomme pas... >.<
//Renomage du fichier dans le ftp
								if (rename($emplacement_Vieux_Fichier, $emplacement_Nouveau_Nom))
								{	$ok++;	}
								else	{	echo 'Erreur3<br />';	}
Merci bien de votre aide !

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

14 avr. 2011, 21:34

donc a priori ta requete SQL est foireuse, dans le else utilise mysql_error() pour l'afficher afin de voir de quoi il retourne.

Pour info ta façon de gérer la chose est peu pratique et lourde a comprendre et debogguer (la preuve tu n'y arrive pas ;) ).

je te conseil de t'orienter vers une suite logique de if / else permettant de ne laisser aucune possibilité sur ce que tu souhaite ;)


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

Eléphant du PHP | 71 Messages

15 avr. 2011, 22:39

Bonsoir,

Je vais mettre un mysq_error(), mais je n'ai pas très bien compris après... Comment ça une suite logique de if ?

Merci encore :)

Eléphant du PHP | 71 Messages

21 avr. 2011, 18:42

Bonsoir !
Voici l'erreur produite par le code :
Unknown column 'defaut_1' in 'field list'
Merci encore de votre aide ! :)

Eléphant du PHP | 71 Messages

08 mai 2011, 11:10

Petit up... Qu'est ce que je fais avec cette erreur svp ? :)

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

08 mai 2011, 17:43

Le message est clair ta requete contient un champ qui n'existe pas dans la table (defaut_1)

Affiche aussi la requete afin que tu puisse t'en rendre compte ;)

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

Eléphant du PHP | 71 Messages

14 mai 2011, 09:42

Ok merci beaucoup ! :)