IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

update sur 2 tables [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de StephBretagne
    Femme Profil pro
    Inscrit en
    Mars 2012
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 147
    Par défaut update sur 2 tables
    phpMyAdmin Version: 3.4.10.1
    MySQL Version du serveur: 5.1.63-cll

    Bonjour,

    Je travaille sur un site présentant des films documentaires et des séries de films documentaires.
    Je viens de rajouter une 18e table à ma BDD pour que les prix (récompenses) attribués aux documentaires puissent se mettre à jour automatiquement.



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    -- --------------------------------------------------------
    --
    -- Structure de la table documentaire 
    --
    idDoc int(3) NOT NULL AUTO_INCREMENT
    ...
    ...
    idPrix int(4) ,
    CONSTRAINT pk_documentaire
    	PRIMARY KEY (idDoc),
    ...
    CONSTRAINT fk_prixDocSerie_documentaire
           FOREIGN KEY (idPrix) REFERENCES prixDocSerie (idPrix) ON DELETE CASCADE
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
     
    -- --------------------------------------------------------
    --
    -- Structure de la table prixDocSerie 
    --
    CREATE TABLE prixDocSerie (
    idPrix INT(4) NOT NULL AUTO_INCREMENT ,
    nomPrix_fr VARCHAR (100),
    nomPrix_en VARCHAR(100),
    CONSTRAINT pk_prixDocSerie
    	PRIMARY KEY (idPrix) 
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

    J'aimerai envoyer les données en base en utilisant le formulaire de saisie que j'ai déjà conçu pour les documentaires (et qui, pour le reste, fonctionne parfaitement) mais je n'y arrive pas.

    Si je rajoute les infos directement à la main dans MySQL, il me renvoie les codes suivants :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO `prixDocSerie` (`idPrix`, `nomPrix_fr`, `nomPrix_en`) VALUES (NULL, 'test_fr', 'test_en');
    UPDATE `documentaire` SET `idPrix` = 'x1' WHERE `documentaire`.`idDoc` =x2;

    Pour le début du formulaire j'ai déjà établi que x2=$idDocumentaire.

    Comment écrire cette requête dans mon formulaire, pour que l'idPrix auto-incrémenté de prixDocSerie soit reporté à la place du x1 de la table documentaire ?

    Merci d'avance de vos lumières.

  2. #2
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    salut,

    et ça te dit quoi quand tu le fais à la main?

    ton problème c'est quoi coté sql ou le formulaire?

  3. #3
    Membre confirmé Avatar de StephBretagne
    Femme Profil pro
    Inscrit en
    Mars 2012
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 147
    Par défaut
    Merci pour ta réponse Eric

    Quand je le fais à la main, ça ne me dit rien de spécial, ça me rajoute bien les infos dans la BDD.

    Mon problème, c'est pour le formulaire. Je commence comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // ***** récup nomPrix dans récompense ***** 
    if(isset($_POST['nomPrix_fr']) && isset($_POST['nomPrix_en'])) 
    $nomPrix_fr=mysql_real_escape_string ($_POST ["nomPrix_fr"]);	 
    $nomPrix_en=mysql_real_escape_string ($_POST ["nomPrix_en"]);
    mais je n'arrive pas à construire mon $req=mysql_query(...);

  4. #4
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    déjà un bon truc abandonne l'extension mysql et passe à pdo ou au moins mysqli vu qu'elle va disparaitre

    ensuite à savoir que le nombre entre parenthèse ne correspond pas du tout à la taille de l'entier mais juste au chiffres significatifs, pour l'adapter tu dois utiliser les types mysql correspondant (tinyint (8 bits), smallint (16 bits), mediumint (24 bits), int (32 bits) et bigint (64 bits))

    donc actuellement tu te donnes 2 milliards et des brouettes de possibilité pour chaque int que tu as... au passage tu perds la moitié des valeurs (celles qui sont négatives vu qu'un général on le utilise pas) donc mettre du unsigned te permet pour du int d'avoir 4 milliards de possibilités...

    déjà 2 réflexions sur tes tables:
    et si tu as plusieurs prix pour un doc?
    le "on cascade delete" est-il bien raisonnable ?

    pour le formulaire
    tu peux le rajouter sous forme d'un "<select>" que tu alimentes en lisant ta table prixDocSerie en récupérant la valeur numérique plutôt que le nom... ce qui permet de mieux sécuriser contre l'injection et évite une requête pour récupérer cette valeur...

  5. #5
    Membre confirmé Avatar de StephBretagne
    Femme Profil pro
    Inscrit en
    Mars 2012
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 147
    Par défaut
    Pour le pdo, ce sera pour une prochaine fois vu que je suis en train de finir le site, que j'ai des centaines de requêtes comme ça et que j'ai vraiment pas le courage de tout reprendre .

    Pour le type de colonne, tu as raison, un smallint (4) unsigned serait suffisant.

    Pour le nombre de prix, il n'y en aura qu'un par film puisque c'est juste du texte qui peut en indiquer plusieurs (ex: Primé aux festivals de Leipzig, Popoli, FIPA, Leningrad, Clermont-Ferrand, Montréal).

    Pour le formulaire, il ne sera accessible qu'à l'administrateur qui n'injectera rien (c'est à peine s'il sait cliquer sur OK ).

    Pour info maintenant, je sais faire la requête s'il s'agit de remplir une seule table. Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // ****** récup du n° de film dans la série / ex : film 5 (sur 10) *******
    if(isset($_POST['noSerieDoc'])) { 
    $noSerieDoc=$_POST["noSerieDoc"];
    $sqlInsertNoSerieDoc=mysql_query ("UPDATE documentaire SET noSerieDoc = '".$noSerieDoc."' WHERE idDoc = '".$idDocumentaire."'"); 
    }
    pour le formulaire
    tu peux le rajouter sous forme d'un "<select>" que tu alimentes en lisant ta table prixDocSerie en récupérant la valeur numérique plutôt que le nom... ce qui permet de mieux sécuriser contre l'injection et évite une requête pour récupérer cette valeur...
    Là, je ne comprends pas...

  6. #6
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    moi j'étais parti sur un truc plus ouvert... qu'un texte dans une table déportée...

    une table
    primé(id,iddoc,idfestival,annee)
    festival(id,nom,....)
    là tu peux donc avoir une liste déroulante pour les festivals, un champ de saisie pour l'année

    quand tu as des trucs comme ça il peut être bon de faire un petit module ajax qui te permet de dynamiquement mettre à jour ta liste

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. UPDATE sur plusieurs tables ?
    Par Mos dans le forum Langage SQL
    Réponses: 3
    Dernier message: 12/04/2007, 08h37
  2. [WD10] Requete Update sur 2 tables
    Par mogwai162 dans le forum WinDev
    Réponses: 2
    Dernier message: 29/03/2007, 13h49
  3. Update sur plusieurs tables
    Par yoyopi dans le forum DB2
    Réponses: 4
    Dernier message: 24/07/2006, 08h22
  4. critere de selection pr faire un UPDATE sur 1 table
    Par maxizoo dans le forum Langage SQL
    Réponses: 6
    Dernier message: 05/01/2006, 15h35
  5. update sur plusieurs tables
    Par Jean-Matt dans le forum Langage SQL
    Réponses: 14
    Dernier message: 04/01/2006, 14h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo