Modifier le nom d'une variable avant écriture

Fermé
t671 Messages postés 1419 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 26 février 2024 - 3 janv. 2010 à 17:22
t671 Messages postés 1419 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 26 février 2024 - 6 janv. 2010 à 09:01
Bonjour,

Je récupère une variable d'un formulaire. Avant de l'écrire dans la base, je vérifie si elle existe, et dans ce cas je la renomme. Mais ça ne fonctionne pas ! Celle-ci garde toujours le même nom ....

$fichier = $_POST['fichier'];
 
$sql = mysql_query('SELECT idph FROM photos WHERE nom='.$fichier );
if( ($nbDePhotosAyantLeMemeNom = mysql_num_rows($sql)) > 0 )
    $fichier = $nbDePhotosAyantLeMemeNom + 1;
A voir également:

9 réponses

BadGuitarist Messages postés 367 Date d'inscription dimanche 12 octobre 2008 Statut Membre Dernière intervention 20 octobre 2013 27
3 janv. 2010 à 18:27
Bonsoir t671,

Pourquoi n'exécutes'tu pas l'ordre sql suivant :
'SELECT COUNT(*) FROM photos WHERE nom = '.$fichier

Et tu fais le test par rapport à la valeur retournée (est-ce >0 ?)

Nb :
Dans ton post, je suppose que tu veux dire que tu modifies la valeur de ta variable car ... je ne vois pas dans ton code où tu modifierais le nom d'une quelconque variable (De plus, modifier le nom d'une variable, je ne suis pas sûr qu'il existe un langage qui le permette ;-) et puis ... quel en serait l'intérêt ?
0
t671 Messages postés 1419 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 26 février 2024 11
4 janv. 2010 à 18:21
Bonjour BadGuitarist,

J'ai testé comme tu me dis, mais c'est pas bon...

$inc = 2 ;
$sql = mysql_query('SELECT COUNT(*) FROM photos WHERE nom='.$fichier );
if ($sql>0) 
	{
	$fichier == $fichier$inc ;
    }

J'ai l'erreur : syntax error, unexpected T_VARIABLE pour la ligne $fichier == $fichier$inc ;

Et pour tout dire, je n'y crois pas trop à mon code ......

A la suite j'ai ceci, avant enregistrement dans la base :

$fichier=$value;//nom reel de l'image 
        $size=$_FILES['fichier']['size'][$key]; 		//--------poids de l'image en octets 
        $tmp=$_FILES['fichier']['tmp_name'][$key];		//--------nom temporaire de l'image (sur le serveur) 
        $type=$_FILES['fichier']['type'][$key];			//--------type de l'image
        $dossier = '../../images/alb_photos/';			//--------dossier de stockage de l'image			'alb_photos/';
        $fic = explode(".", $fichier);


Dois-je le mettre avant ou après ?

Merci
0
BadGuitarist Messages postés 367 Date d'inscription dimanche 12 octobre 2008 Statut Membre Dernière intervention 20 octobre 2013 27
4 janv. 2010 à 20:21
Désolé, je peux t'aider côté SQL/Oracle mais côté PHP, je passe la main ...

Bon courage ...
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
4 janv. 2010 à 20:31
pour récupérer le nombre il faut proceder ainsi:

$inc = 2 ;
$sql = mysql_query("SELECT COUNT(*) FROM photos WHERE nom='".$fichier."'" );
$result=mysql_fetch_row($sql);
//le nombre trouvé est contenu dans $result[0]
if ($result[0]>0) 
	{
//etc.....

0
t671 Messages postés 1419 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 26 février 2024 11
5 janv. 2010 à 16:46
Bonjour Alain_42,

En effet, c'est simple à écrire .... Y'aurait même plus simple
$sql = mysql_query("SELECT * FROM photos WHERE photo='".$fichier."'" );

puisque par logique je ne dois pas avoir de double nom de photo dans ma base.

Mais que ce soit cela ou autre chose, je n'arrive à aucun résultat !!!!

Je reprend ....
Je choisi des images via un formulaire :
Photo 1 : <INPUT TYPE=FILE NAME="fichier[]" size="76"><br>
Commentaire photo 1:<br>
<INPUT type=text name="commentaire[]" id="texte1" size="90" maxlength="500"><p>
Photo 2 : <INPUT TYPE=FILE NAME="fichier[]" .......


Puis je les écris dans ma base en vérifiant (?) si le nom existe déjà. S'il existe, je veux renommer le nouveau nom du fichier (photo) pour éviter les doublons (photo est le nom du champs dans la base recevant le nom de l'image : 1.jpg) :

$texte = $_POST['commentaire'];
$fichier = $_POST['fichier'];

if (isset($_FILES['fichier'])) 
{ 
    foreach ($_FILES['fichier']['name'] as $key => $value) 
    { 
$sql = mysql_query("SELECT photo FROM photos WHERE photo='".$fichier."'" );
if (isset($sql)) 
	{
	$fichier_ren = $fichier + 1 ;
    }


Et là, si je fais un echo de mes variables, j'ai pô grand chose :
sql = Resource id #3
photo =
fichier =
fichier_ren = 1


Mais au départ (suite à la saisie dans le formulaire) mes variables sont dans un tableau, cela ne pêcherait-il pas de ce côté ???

Je sais plus ...... :o(
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
5 janv. 2010 à 17:23
en mettant ton name ainsi:
<INPUT TYPE=FILE NAME="fichier[]

la valeur postée est dans un array donc $_POST['fichier][0] pour la photo1 etc..
ou plutot $_FILES['fichier'][0]['name']

alors pourquoi ne pas faire plus simple

<INPUT TYPE=FILE NAME="photo1"
et photo2 ......

tu récipéreras par $_FILES[photo1']['name'] pour la photo 1
0
t671 Messages postés 1419 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 26 février 2024 11
5 janv. 2010 à 17:56
Ca ne risque pas d'être un peu lourd par ta méthode.
Avec ce que j'ai écrit, cela fonctionne très bien, que je saisisse 1 ou 10 photos à uploader et à enregistrer dans la base. Mais si le nom de la photo existe déjà, la deuxième écrase la première dans l'upload. C'est pour ça que je veux lui changer le nom !

Alors si tu as une solution plus simple .... Rajouter un numéro à la nouvelle photo, ou autre chose .....

J'ai essayé ceci :
	$i = 0;
	$fichier = $_POST['fichier'][$i];
	$i++;
	
    //$_FILES existe 
    foreach ($_FILES['fichier']['name'] as $key => $value) 
    { 
$sql = mysql_query("SELECT * FROM photos WHERE photo='".$fichier."'" );
if (isset($sql)) 
	{
	$fichier == $fichier$i++;
    }

mais sur $fichier == $fichier$i++; j'ai l'erreur syntax error, unexpected T_VARIABLE
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
5 janv. 2010 à 18:14
post au dessus tu mets:

Mais au départ (suite à la saisie dans le formulaire) mes variables sont dans un tableau, cela ne pêcherait-il pas de ce côté ???

je répond à ta question en simplifiant et en te proposant une solution qui devrait résoudre ton pb et ne mettant pas dans un tableau justement
0
t671 Messages postés 1419 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 26 février 2024 11
5 janv. 2010 à 18:18
OK ! Mais si je peux déjà garder ce que j'ai fait, et en le modifiant un peu pour ce que je veux faire .....

J'ai essayé ceci :

	$i = 0;
	$fichier = $_POST['fichier'][$i];
	$i++;
	
    //$_FILES existe 
    foreach ($_FILES['fichier']['name'] as $key => $value) 
    { 
$sql = mysql_query("SELECT * FROM photos WHERE photo='".$fichier."'" );
if (isset($sql)) 
	{
	$fichier == $fichier$i++;
    }

mais sur $fichier == $fichier$i++; j'ai l'erreur syntax error, unexpected T_VARIABLE
Où est la faute ? comment renommer la variable ? J'ai cherché un peu partout, mais rien de concluant ...
0
BadGuitarist Messages postés 367 Date d'inscription dimanche 12 octobre 2008 Statut Membre Dernière intervention 20 octobre 2013 27
6 janv. 2010 à 01:28
Bonsoir,

Si je puis donner un conseil à T671 (et ne le prends pas mal),
je comprends la stratégie de Alain_42 :
- quand tu n'es pas sûr de ta solution,
enlève tout ce qui est compliqué et pas important pour résoudre le problème : par exemple, ici, le tableau.
Donc assure-toi d'abord que la solution simple avec un formulaire limité à 2 ou 3 images
(sans passage de tableau) marche correctement.
- quand cette solution simple (et non simpliste ;-) fonctionne correctement,
tu peux éventuellement l'améliorer :
en simplifiant le code (passage de tableau)
en l'optimisant
en échaffaudant une autre solution complètement différente mais bien meilleure (pourquoi pas ?) ...

Bon courage pour cette éventuelle remise en cause (temporaire) de ta première solution.
0
t671 Messages postés 1419 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 26 février 2024 11
6 janv. 2010 à 09:01
OK. Je pense que je vais me résigner à faire l’idée de Alain_42. C'est-à-dire à traiter les photos une par une ….
Dans ce cas, il faut que je traite fichier par fichier ??? :

1) $fichier1 = $_POST['fichier1'];
$sql1 = "SELECT photo FROM photos WHERE photo = '.$fichier1'";
$req1 = "INSERT INTO photos(nom, lien………) VALUES('$fichier1'…..) ……………..

2) $fichier2 = $_POST['fichier2'];
$sql2 = "SELECT photo FROM photos WHERE photo = '.$fichier2'";
$req2 = "INSERT INTO photos(nom, lien………) VALUES('$fichier2'…..) ……………..
0