Php incrementer un numero sur nom upload [Résolu/Fermé]

Signaler
-
Messages postés
963
Date d'inscription
mercredi 28 mai 2008
Statut
Contributeur
Dernière intervention
13 juin 2012
-
Bonjour,

j ai un fichier que j'upload j'ai un script qui me permet de renommer le nom du fichier ca fonctionne très bien

imaginons que la variable $nom est le nom de mon fichier uploader je souhaiterais que si ce nom de fichier existe dans ma base je renomme $nom en $nom_unnombre par exemple $nom_1

mais je ne vois pas comment incrémenter le numéro :

voici le code :

$nom=$upload.$dvd.$idname.$id.$extension;

$sql3="select nom_upload from format where idpi='$idpi' and iddi='$iddi'";
$req3= mysql_query($sql3) or die( mysql_error() ) ;
$test = mysql_result($req2, 0);
if ($test==$nom)
{
$nom=$nom_unnombre // c est a ce niveau que je ne vois pas ...
}

merci de votre aide

11 réponses

Messages postés
963
Date d'inscription
mercredi 28 mai 2008
Statut
Contributeur
Dernière intervention
13 juin 2012
131
Et bien si tu incrémentes tous tes fichiers ayant le même nom de la même façon tu peux par exemple modifier ta requête en faisant :
"SELECT count(*) as nb FROM format WHERE nom_upload LIKE '" . $nom . "%'";
Comme ça tu récupères le nombre de noms qui commencent par le tien.

et tu ajoutes ce nombre + 1 à ta variable.
$nom = $nom . $data['nb'];


C'est ce que tu veux?
merci pour ta reponse Passarinho44

je me pose une question ce qui veut dire que par exemple j ai

upload.jpg

il va va voir qu il y en a un ducoup il va l appeler upload2.jpg

mais si je reupload les deux fichiers n ont pas le même nom donc il va me créer upload2.jpg une autre fois non ?
Messages postés
963
Date d'inscription
mercredi 28 mai 2008
Statut
Contributeur
Dernière intervention
13 juin 2012
131
C'est pour ça que je t'ai conseillé le count avec le LIKE $nom . "%'"
Ca va permettre que tous les fichiers commencant par upload par exemple vont etre récupérés et comptés donc si tu as upload.jpg et upload2.jpg, il va te sortir 2 donc tu ajoutes 1 et ça te fait upload3.jpg

Bien sur du coup ta première lignes pour le $nom n'est plus bon : il va falloir enlevé l'extention avant de faire ce test et la rajouter après
oki c est très clair je vais tester et tenir au courant merci beaucoup
par contre ce st bizarre j ai mis

$result = mysql_query("SELECT count(*) as nb from format where nom_upload LIKE '" . $nom. "%'");
$count = mysql_result($result,0);

et il me dit

Warning: mysql_result(): supplied argument is not a valid MySQL result resource in W:\upload\import-upload.php on line 38
nom.jpgok
Messages postés
963
Date d'inscription
mercredi 28 mai 2008
Statut
Contributeur
Dernière intervention
13 juin 2012
131
Essaie de faire :
$requete = "SELECT count(*) as nb from format where nom_upload LIKE '" . $nom. "%'";
echo $requete;
//$result = mysql_query($requete);
//$count = mysql_result($result,0);

Comme ça, tu vas afficher ta requete. Ensuite tu la lances dans ton SGBD et il te donnera plus de détails sur la provenance de l'erreur.
Si tu n'arrives pas à déchiffrer le message d'erreur n'éhistes pas à demander.
pour l erreur j ai trouve probleme de nom de champ il ets temps de manger :-)

par contre le count fonctionne bine quand je fais un echo $count; il me renvoie un valeur que j attends

mais a ce niveau
$nom=$nom.$data['nb'];

il incrémente pas le numéro :-(

Merci
bon j ai trouvé une solution de remplacement qui marche nickel

$result = mysql_query("SELECT count(*) as nb from format where nom_upload LIKE '" . $nom. "%'") or die(mysql_error() );
$count = mysql_result($result, 0);
$nombre=1;
$count2=$count+$nombre;

if($count!= 0)
{
$nom=$nom.$count2;
}

merci encore Passarinho44
Messages postés
963
Date d'inscription
mercredi 28 mai 2008
Statut
Contributeur
Dernière intervention
13 juin 2012
131
Oui en fait c'était ça que je voulais que tu fasses : mon $name = $name . $data['nb'] c'était un exemple pour te dire de récupérer la valeur de la base de données

Sinon ton
$nombre=1;
$count2=$count+$nombre;

Tu peux le raccourcir en
$count++;

Et du coup tu peux mettre
$nom .= $count;
à la place de :
$nom=$nom.$count2;
Messages postés
8
Date d'inscription
jeudi 3 septembre 2009
Statut
Membre
Dernière intervention
28 juillet 2011

J'ai un peu le même problème. le site est protégé par des sessions. Lorsque l'utilisateur est authentifié il peut ajouté des photos. Un répertoire alors se crée au nom du login de l'utilisateur. Lorsque je veux ajouter une photo, elle s'insère dans le bon dossier. le problème est que lorsque j'ajoute une nouvelle photos elle écrase la précédente. Comment dois-je faire?


voici mon code:

formulaire:

<form name="ajout_photo" method="post" action="pages/add_photo.php" enctype="multipart/form-data">

Titre de Votre photo : <input type="text" name="titre" maxlength="30" size="30" /> (50 caractères)

Description de Votre photo : <input type="text" name="description" maxlength="250" size="50" /> (80 caractères)

Chargez votre logo : <input type="file" name="photo_gd" /><input type="hidden" name="MAX_FILE_SIZE" value="20480" />

<input type="hidden" name="login" value="<?php echo "$enr_verif_user->login"; ?>" /></p>
<input type="hidden" name="id_user" value="<?php echo "$enr_verif_user->id_user"; ?>" /></p>
<p>Date : <?php echo date('Y-m-d'); ?><input type="hidden" name="date" value="<?php echo date('Y-m-d'); ?>" /></p>

<input type="submit">
</form>


Page d'ajout:

$requete_reccup = "SELECT * FROM photo";
$result_reccup = @mysql_query($requete_reccup);
$enr_reccup = @mysql_fetch_object($result_reccup);

// Protection des données
$titre = addslashes($_POST['titre']);
$description = addslashes($_POST['description']);
$id_user = addslashes($_POST['id_user']);
$login = addslashes($_POST['login']);
$date=$_POST["date"];

if ($_FILES['photo_gd']['type'] != 'image/png' && $_FILES['photo_gd']['type'] != 'image/jpeg' && $_FILES['photo_gd']['type'] != 'image/jpg' && $_FILES['photo_gd']['type'] != 'image/gif')
{
echo"Le fichier doit être au format *.jpeg, *.gif ou *.png .";
}

else{

// Insertion dans la BDD
$requete_ph = "INSERT INTO photo VALUES('', '$titre', '$description', '$date', '', '$id_user')";
$result_ph = mysql_query($requete_ph);
@mysql_close();

// Enregistrement de l'image
if(!empty($_FILES['photo_gd']['name']))
{
$original = basename($_FILES["photo_gd"]["name"]);
$temporaire = $_FILES["photo_gd"]["tmp_name"];


$nom = $login;
$upload = '../img/' . $login . '/';
if(!is_dir($upload)){mkdir($upload);}
$resultat = move_uploaded_file($_FILES['photo_gd']['tmp_name'],$upload.'/'.$nom.'.jpg');
if ($resultat) echo "Transfert réussi";
/*$final = "../img/test.jpg";
//$final = "../../images/logo_pro/test.jpg";
move_uploaded_file($temporaire,$final);*/
}
header('Location: ../index.php');
}
Messages postés
963
Date d'inscription
mercredi 28 mai 2008
Statut
Contributeur
Dernière intervention
13 juin 2012
131
Elle écrase la précédente car elle a le même nom.
Pour éviter ça je te conseille de faire une liste des fichiers déjà existants dans le dossier.
Ensuite tu récupères le nombre de fichiers dans ce dossier.
Puis tu rajoutes à la suite du nom, le nombre de fichiers + 1.

Voila un petit bout de code trouvé sur le net pour savoir le nombre de fichiers dans un dossier:
<?php

$nb_f = 0;

$opdir = opendir($repimages);
while ($c = readdir($opdir))
{
if (!is_dir($c)) $nb_f++;
}

closedir($opdir);

echo ("Nombre de fichiers : ".$nb_f);

?>