Problème de ID

Eléphant du PHP | 257 Messages

05 avr. 2006, 10:56

Voilà j'ai un autre chti probleme que je ne sais pas résoudre non dou diou! Il s'agit du ID, j'ai toujours deux table à savoir agences_tbl et logo dans les deux tables j'ai ID, mais comment faire pour que les deux ID ont le même enregistrement ??

Dois je montrer le script ?
:oops:

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

05 avr. 2006, 11:02

J'ai pas forcément bien comrpis la question, en fait tu as un id dans ta table agence, et tu l'utilises dans ta table logo pour savoir à quelle agence appartient le logo ?

Dans ce cas il te suffit d'insérer ton agence dans ta table, d'en récupérer l'identifiant s'il est auto incrementé (cf. les sujets sur la récupération de l'id inséré en base), et de l'utiliser pour insérer ton enregistrement dans la table logo (dans laquelle, l'identifiant ne doit bien sur pas être auto incrémenté)

Si c'est pas ça, ou si c'est pas clair, t'hésites pas à crier ;)

Eléphant du PHP | 257 Messages

05 avr. 2006, 11:06

J'ai pas forcément bien comrpis la question, en fait tu as un id dans ta table agence, et tu l'utilises dans ta table logo pour savoir à quelle agence appartient le logo ?

Dans ce cas il te suffit d'insérer ton agence dans ta table, d'en récupérer l'identifiant s'il est auto incrementé (cf. les sujets sur la récupération de l'id inséré en base), et de l'utiliser pour insérer ton enregistrement dans la table logo (dans laquelle, l'identifiant ne doit bien sur pas être auto incrémenté)

Si c'est pas ça, ou si c'est pas clair, t'hésites pas à crier ;)
Si c'est extactement ça mais, mais, je n'ai pas tout compris, tu vas si vite :cry: :wink:

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

05 avr. 2006, 11:15

lol, oki, je vais détailler d'avantage :)

Au niveau de ta base, il faut donc que l'identifiant de ta table agence_tlb (id donc) soit auto-incrémenté, mais pas celui de ta table logo. En effet, on va récupéré celui qui aura été incrémenté tout seul pour le mettre dans l'autre :)

Lorsque tu insères un enregistrement dans ta table agence_tlb, la base de données va renseigner pour toi le champ id en fonction du dernier identifiant utilisé (jusque là, pas de soucis).

Ce qui t'interesse, c'est de récupérer l'identifiant généré pour pouvoir l'utiliser dans la table logo. Il te faut donc, juste après l'insertion, récupérer l'id qui a été généré (la méthode mysql_insert_id() te permet de faire ça très simplement, elle te retourne le dernier identifiant qui a été inséré)

une fois que tu as récupéré cette valeur, il ne te reste plus qu'à l'utiliser dans ton insert sur la table logo pour spécifier l'identifiant de l'agence :)

Plus mieux dit comme ca ? :)

Eléphant du PHP | 257 Messages

05 avr. 2006, 11:23

C'est bien ce que je pensais après voir été voir les sujets là dessus sur ton conseil. :wink:
Bien mais où insérer ça :
mysql_insert_id() 
dans ça :
// connexion à la base
$db = mysql_connect('localhost', 'agence', 'xxxxx')  or die('Erreur de connexion '.mysql_error());
// sélection de la base  
mysql_select_db('agences',$db)  or die('Erreur de selection '.mysql_error()); 
     
    // on écrit la requête sql dans agences_tbl
    $sql = "INSERT INTO agences_tbl(ID, ID_img, nom, titre, adresse, telephone,fax, mail, agent1, mail1, agent2, mail2, agent3, mail3) 

VALUES('','$nom','$titre','$ID_img','$adresse','$telephone','$fax','$mail','$agent1','$mail1','$agent2','$mail2','$agent3','$mail3')";
    mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());

    // on écrit la requête sql dans logo

    $sql = "INSERT INTO logo(ID,ID_user) VALUES('$ID','$ID_user')";
    mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());

   // on récupère l'ID qui vient d'être généré 
    $ID = mysql_insert_ID();  
:oops: :oops:

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

05 avr. 2006, 11:36

Ben tu le fais déjà, mais pas au bon endroit en fait :) Tu le récupère tout à la fin de ton code, alors que tu en as besoin au dessus pour l'insérer dans ta table logo :
// connexion à la base 
$db = mysql_connect('localhost', 'agence', 'xxxxx')  or die('Erreur de connexion '.mysql_error()); 
// sélection de la base   
mysql_select_db('agences',$db)  or die('Erreur de selection '.mysql_error()); 
      
// on écrit la requête sql dans agences_tbl 
$sql = "INSERT INTO agences_tbl(ID, ID_img, nom, titre, adresse, telephone, fax, mail, agent1, mail1, agent2, mail2, agent3, mail3) VALUES ('', '$nom', '$titre', '$ID_img', '$adresse', '$telephone', '$fax', '$mail', '$agent1', '$mail1', '$agent2', '$mail2', '$agent3', '$mail3')"; 
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 

// on récupère ICI, juste après le mysql_query, l'id qui vient d'être généré lors de l'insertion dans agence_tbl ;)
$ID = mysql_insert_id(); 

// on écrit la requête sql dans logo 
$sql = "INSERT INTO logo(ID,ID_user) VALUES('$ID','$ID_user')"; // du coup on peut l'utiliser là le $ID :)
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 

Eléphant du PHP | 257 Messages

05 avr. 2006, 11:43

ça marche ou devrais je dire ça fonctionne Ryle :wink:

mais maintenant je m'apperçois que les logos téléchargés ne portent pas automatiquement le ID ! Est-ce normal ?

Voici le script du logo :
$dest_dossier = '/var/www/xxxxxxx/agences/upload/';
// utilisez également des slashes sous windows : $dest_dossier  = '/upload/';
$dest_fichier = basename($_FILES['img']['name']);
move_uploaded_file($_FILES['img']['tmp_name'], $dest_dossier . $dest_fichier);
à moins que ce ne soit dans le formulaire :

<input type="file" name="logo" value="">
??

:cry:[/php]

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

05 avr. 2006, 12:15

C'est normal, le nom du fichier envoyé ne peut pas connaitre à l'avance l'identifiant que tu vas générer au moment de l'enregistrer :)

Déjà une petite explication :
$dest_fichier = basename($_FILES['img']['name']); // te permet de récupérer le nom original du fichier envoyé dans $dest_fichier
move_uploaded_file($_FILES['img']['tmp_name'], $dest_dossier . $dest_fichier); // déplace le fichier charger sur le serveur dans le dossier $dest_dossier et le nomme $dest_fichier
Si tu veux que le nom de ton fichier contienne l'id de l'agence, il te faut le traiter après avoir fait l'insertion de l'agence (tout comme tu viens de le faire pour l'insertion dans la table logo)

:!: Tu dois donc insèrer ton agence et récupérer son identifiant (chose que maintenant tu maitrises :)). Une fois que c'est fait, tu traites la récupération du fichier (et surtout la partie nom du fichier)

au lieu de basename($_FILES['img']['name']) qui te permet de connaitre le nom du fichier d'origine, tu peux par exemple le nommer comme ceci :
$nomDuFichier = basename($_FILES['img']['name']); // Le nom du fichier d'origine
$extension = substr($nomDuFichier, strrpos($nomDuFichier, ".")); // tant qu'on y est, on récupère l'extension du fichier (tout ce qui suit le dernier point)

// on compose le nouveau nom du fichier avec $ID récupéré avec mysql_get_id(), l'extension du fichier initiale, et éventuellement un bout de nom choisit (ex: "logo_agence_") :
$dest_fichier = "logo_agence_" . $ID . "." . $extension;

// reste plus qu'à déplacer le fichier comme avant, avec son nouveau nom
move_uploaded_file($_FILES['img']['tmp_name'], $dest_dossier . $dest_fichier); 
Les fichiers uploadés s'appelleraient ainsi "logo_agence_12.gif" ou "logo_agence_14.jpg" etc. A toi d'adapter vers quelques chose qui te convient :)

Eléphant du PHP | 257 Messages

05 avr. 2006, 12:28

il doit y avoir un probleme avec ça :
éventuellement un bout de nom choisit (ex: "logo_agence_") : 
$dest_fichier = "logo_agence_" . $ID . "." . $extension; 
puisque le logo téléchargé porte le nom :
logo_agence_..png

au lieu de : logo_agence_82.png le ID dans logo

:cry:

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

05 avr. 2006, 12:38

Déjà en effet, j'ai un point en trop, puisque l'extension comprend le "."
$dest_fichier = "logo_agence_" . $ID . $extension; 
Ensuite, il faut bien que le code ou a lieu le changement de nom du fichier soit bien après le code d'insertion en base de l'agence pour pouvoir utiliser la variable $ID :)
// connexion à la base 
$db = mysql_connect('localhost', 'agence', 'xxxxx')  or die('Erreur de connexion '.mysql_error()); 
// sélection de la base    
mysql_select_db('agences',$db)  or die('Erreur de selection '.mysql_error()); 
       
// on écrit la requête sql dans agences_tbl 
$sql = "INSERT INTO agences_tbl(ID, ID_img, nom, titre, adresse, telephone, fax, mail, agent1, mail1, agent2, mail2, agent3, mail3) VALUES ('', '$nom', '$titre', '$ID_img', '$adresse', '$telephone', '$fax', '$mail', '$agent1', '$mail1', '$agent2', '$mail2', '$agent3', '$mail3')"; 
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 

// on récupère ICI, juste après le mysql_query, l'id qui vient d'être généré lors de l'insertion dans agence_tbl  
$ID = mysql_insert_id(); 

...


$nomDuFichier = basename($_FILES['img']['name']); // Le nom du fichier d'origine 
$extension = substr($nomDuFichier, strrpos($nomDuFichier, ".")); // tant qu'on y est, on récupère l'extension du fichier (tout ce qui suit le dernier point) 

// on compose le nouveau nom du fichier avec $ID récupéré avec mysql_get_id(), l'extension du fichier initiale, et éventuellement un bout de nom choisit (ex: "logo_agence_") : 
$dest_fichier = "logo_agence_" . $ID . $extension; 

// reste plus qu'à déplacer le fichier comme avant, avec son nouveau nom 
move_uploaded_file($_FILES['img']['tmp_name'], $dest_dossier . $dest_fichier); 


Eléphant du PHP | 257 Messages

05 avr. 2006, 12:54

effectivement c'est ce que j'avais vu, il y avait un point en trop Ryle :wink:

maintenant avec tous les essais j'ai 39 enregistrements et le quarantième devient le ... 82 !! pg :lol:

je mets résolu à présent merci à toi

:wink: :wink: :)

Eléphant du PHP | 257 Messages

05 avr. 2006, 17:20

Bah non ça ne fonctionne toujours pas, aucun ID pour les logos.
Voici le script corrigé enfin je croyais corrigé :
<?php 
// On commence par récupérer les champs 
$nom       = (isset($_POST['nom']))       ? $_POST['nom']       : ""; 
$titre     = (isset($_POST['titre']))     ? $_POST['titre']     : ""; 
$adresse   = (isset($_POST['adresse']))   ? $_POST['adresse']   : ""; 
$telephone = (isset($_POST['telephone'])) ? $_POST['telephone'] : ""; 
$fax       = (isset($_POST['fax']))       ? $_POST['fax']       : ""; 
$mail      = (isset($_POST['mail']))      ? $_POST['mail']      : ""; 
$agent1    = (isset($_POST['agent1']))    ? $_POST['agent1']    : ""; 
$mail1     = (isset($_POST['mail1']))     ? $_POST['mail1']     : ""; 
$agent2    = (isset($_POST['agent2']))    ? $_POST['agent2']    : ""; 
$mail2     = (isset($_POST['mail2']))     ? $_POST['mail2']     : ""; 
$agent3    = (isset($_POST['agent3']))    ? $_POST['agent3']    : ""; 
$mail3     = (isset($_POST['mail3']))     ? $_POST['mail3']     : ""; 
$img       = (isset($_POST['img']))       ? $_POST['img']       : "";

 { 

$dest_dossier = '/var/www/xxxxxx/agences/upload/';
// utilisez également des slashes sous windows : $dest_dossier  = '/upload/';
$nomDuFichier = basename($_FILES['img']['name']); // Le nom du fichier d'origine 
$extension = substr($nomDuFichier, strrpos($nomDuFichier, ".")); // tant qu'on y est, on récupère l'extension du fichier (tout ce qui suit le dernier point)
// on compose le nouveau nom du fichier avec $ID récupéré avec mysql_get_id(), l'extension du fichier initiale, et éventuellement un bout de nom choisit (ex: "logo_agence_") : 
$dest_fichier = "logo_agence_" . $ID .  $extension; 

// reste plus qu'à déplacer le fichier comme avant, avec son nouveau nom move_uploaded_file($_FILES['img']['tmp_name'], $dest_dossier . $dest_fichier); 

       // connexion à la base
$db = mysql_connect('localhost', 'agence', 'xxxxx')  or die('Erreur de connexion '.mysql_error());
// sélection de la base  

    mysql_select_db('agences',$db)  or die('Erreur de selection '.mysql_error()); 
     
    // on écrit la requête sql dans agences_tbl
    $sql = "INSERT INTO agences_tbl(ID, nom, titre, adresse, telephone,fax, mail, agent1, mail1, agent2, mail2, agent3, mail3) VALUES('','$nom','$titre','$adresse','$telephone','$fax','$mail','$agent1','$mail1','$agent2','$mail2','$agent3','$mail3')";
    mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());

   // on récupère l'ID qui vient d'être généré 
    $ID = mysql_insert_ID();   

    // on écrit la requête sql dans logo

    $sql = "INSERT INTO logo(ID) VALUES('$ID')";
    mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());

// on affiche le résultat pour le visiteur 
    echo '<a href="http://www.xxxxx.com/agences/ad_agents.htm">Vos infos on été ajoutées.</a>';


    mysql_close();  // on ferme la connexion 
    }  
?> 
que peut-il bien y avoir .. le téléchargement des images se fait bien dans le dossier upload pourtant ...
:oops: :oops: :cry: :cry:

Eléphant du PHP | 257 Messages

06 avr. 2006, 10:20

Bon bah cette fois c'est vraiment résolu .. en fait j'avais laissé FTP ouvert et il fallait le réinitier pour avoir l'image dans le dossier de destination ..

:wink: :wink: :lol: :lol: