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 :

Purge partielle d’une table [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    web pour association
    Inscrit en
    Mars 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : web pour association

    Informations forums :
    Inscription : Mars 2013
    Messages : 53
    Par défaut Purge partielle d’une table
    Bonjour,
    C’est pour une association, un soft réalisé par un ancien membre pour la gestion d’une bourse aux livres. Malheureusement, je n’y connais pas grand-chose.
    Le but est de purger partiellement une table, afin que lors de la prochaine utilisation, on puisse en retrouver certaines lignes via un formulaire, et les afficher afin de pouvoir valider de nouveau .

    Donc l’idée est de pouvoir vider les colonnes :code_deposant, Livres, DVD ,CD, date_creation, Note
    Ainsi, lors de la prochaine utilisation, en remplissant le Nom ça retrouverait toutes les autres colonnes

    Ci-joint : la page ajout deposant.(on peut tout faire c’est une copie pour test) https://www.cjoint.com/c/MIAaxBJyEWD

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    `code_deposant` int(2) NOT NULL,
    `nom` varchar(40) NOT NULL,
    `prenom` varchar(40) DEFAULT NULL,
    `rue` varchar(40) NOT NULL,
    `code_postal` varchar(5) DEFAULT NULL,
    `ville` varchar(40) NOT NULL,
    `tel` varchar(15) DEFAULT '06',
    `email` varchar(40) DEFAULT 'email@email.fr',
    `association` varchar(40) DEFAULT 'Deposant',
    `Livres` varchar(40) DEFAULT '0',
    `DVD` varchar(40) DEFAULT '0',
    `CD` varchar(40) DEFAULT '0',
    `date_creation` date NOT NULL,
    `Note` varchar(1001) DEFAULT ''
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='V6_08_19_01';

  2. #2
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    la bdd contient une seule table ?

    Il serait plus logique de constituer tables (deposant et livre).

    Peux-tu préciser le rôle des dernières colonnes (de 'livres' à 'note') ?

    Dans la table que tu montres, il y a bien une clé primaire, non ?

  3. #3
    Membre averti
    Homme Profil pro
    web pour association
    Inscrit en
    Mars 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : web pour association

    Informations forums :
    Inscription : Mars 2013
    Messages : 53
    Par défaut
    Avant tout merci d'avance.
    sur la Bdd d'origine, la cle primaire " code_deposant" ( me suis dit faut l'enlever sinon impossible de garder nom et coordonnées postale)

    La Bdd contient plusieurs tables, les colonnes Livres,Cd, dvd = nombre d'articles déposant par un client,la colonne note= texte libre pour indiquer si le client reprends ces articles à la fin, ou autre indication texte.

    Car le soft nous permet de gérer le nom d'un client auquel on attribut un code a deux lettres, ces coordonnées, le nombre d'articles, et la la vente, de connaitre le nombre, la sommes du au client en fin de vente le prix moyen, le pourcentage d'articles vendus. C'est pour cela me disait, je crée une copie de la base et surtout la table "deposant" pour la effectué la purge et m'en servir lors de la prochaine utilisation est d'injecter les nouvelles données dans la table d'origine.Pièce jointe 644472

  4. #4
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Bonsoir,
    j'avoue ne pas tout comprendre, notamment ce que tu veux faire. A quoi ça servirait de vider certaines colonnes ? Néanmoins, voici le code SQL pour mettre la valeur par défaut de la colonne Livres : UPDATE deposant SET livres=0;.

    Autre point : j'ai jeté un oeil au code PHP que tu donnes : la fonction get_magic_quotes_gpc n'existe plus en PHP8.

    Warning

    This function has been DEPRECATED as of PHP 7.4.0, and REMOVED as of PHP 8.0.0. Relying on this function is highly discouraged.
    https://www.php.net/manual/en/functi...quotes-gpc.php

  5. #5
    Membre averti
    Homme Profil pro
    web pour association
    Inscrit en
    Mars 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : web pour association

    Informations forums :
    Inscription : Mars 2013
    Messages : 53
    Par défaut
    Donc l’idée est de pouvoir vider les colonnes :code_deposant, Livres, DVD ,CD ,date_creation, Note
    Ainsi lors de la prochaine utilisation, en remplissant le Nom ça retrouverais tous les autres champs.


    La cles primaire est sur la colonne " code_deposant" afin qu'on ne puisse pas avoir de doublon. ( dans cette version).

    Donc, on organise la vente des différents articles un jour XX en 2022. On réorganise le même type d’événement en 2023 un jour ..... La forcément les déposants,le nombre d'articles ne sont pas forcement les même, et les codes déposant seront obligatoirement différent.

    Concernant la fonction get_magic_quotes_gpc n'existe plus en PHP8. : la version php de wamp est : 7.2.18 Le soft est en local n'est pas fait pour être en ligne.
    Apres faudrais je reprendre toutes les pages pour verifier et modifier " get_magic_quotes_gpc"
    Ca fait 105 pages a verifier

  6. #6
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Si je comprends bien, ce que tu voudrais, c'est que à partir du nom, tu retrouves les colonnes prenom, rue, code_postal, ville, tel, email, association ?

  7. #7
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    On peut voir le texte, STP ?

  8. #8
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Zut sur mon téléphone pas vu qu’il y était…

  9. #9
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2022
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2022
    Messages : 109
    Par défaut
    Eh ben ... Ça ne s'arrange pas encore vraiment.

    On a déjà le détail des menus déroulants, avant de savoir à quoi sert l'application.

    Ah au fait, il y a un menu "attention danger", là-dedans tu as oublié "FORMAT C: /Y", et on doit pouvoir encore en trouver quelques autres comme ça.

    La facture donne le prix de chaque article alors qu'on ne gère les articles que du point de vue de la quantité.

    Alors bon, admettons, pour l'année précédente on doit pouvoir "affiché un retrouver un client".

    Aïe, ça ne va pas être du gâteau.

  10. #10
    Membre averti
    Homme Profil pro
    web pour association
    Inscrit en
    Mars 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : web pour association

    Informations forums :
    Inscription : Mars 2013
    Messages : 53
    Par défaut
    Citation Envoyé par Gluups2 Voir le message
    On a déjà le détail des menus déroulants, avant de savoir à quoi sert l'application.
    Non pas menus déroulant, c'est comment dire ça un lien qui ouvre la page en question. toutes la partie menus est sur la gauche des pages.

    Citation Envoyé par Gluups2 Voir le message
    il y a un menu "attention danger",
    Non pas de menu Danger, tu as lu trop vite ou je me suis mal exprimé.
    Effacer (suprimer code):lien ouvre la page en question Légende de la page Effacer toutes les informations d’un déposant. ATTENTION, DANGER. c'est écris dans la page mais aucune action. Cette opération effacera ....bla... bla.... bla... (effacement total de toutes les données du code sélectionné). Pour valider c'est clic >> «*OK vous êtes vraiment sure et certain*» un message de confirmation s’affiche.

    là-dedans tu as oublié "FORMAT C: /Y"
    ???

    La facture donne le prix de chaque article alors qu'on ne gère les articles que du point de vue de la quantité.
    Une facture faut bien les articles le prix de chacun,et le total.

    Alors bon, admettons, pour l'année précédente on doit pouvoir "affiché un retrouver un client".
    OUI.
    Aïe, ça ne va pas être du gâteau.
    C'est bien pour cela, que je demandais juste le frm afin de pouvoir modifier le code_deposant.
    normalement tout est la :
    Fichiers attachés Fichiers attachés

  11. #11
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2022
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2022
    Messages : 109
    Par défaut
    Je ne suis pas bien sûr que ça a apporte quelque chose de finasser sur le détail des mots. Menu déroulant c'est pourtant un terme assez répandu, dont le contenu n'a absolument rien à faire à ce stade du travail.

    Le problème essentiel est que je ne sais toujours pas où tu veux en venir, et accessoirement se pose une question : pourquoi est-ce important pour toi que l'utilisateur final puisse détruire tout ton travail en deux clics de souris sans avoir la moindre idée de ce qu'il a fait ?

    Oui, je crois que c'est ça : essentiel, et accessoire.

  12. #12
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par Djockey Voir le message
    Bonjour,
    C’est pour une association, un soft réalisé par un ancien membre pour la gestion d’une bourse aux livres. Malheureusement, je n’y connais pas grand-chose.
    Le but est de purger partiellement une table, afin que lors de la prochaine utilisation, on puisse en retrouver certaines lignes via un formulaire, et les afficher afin de pouvoir valider de nouveau .

    Donc l’idée est de pouvoir vider les colonnes :code_deposant, Livres, DVD ,CD, date_creation, Note
    Ainsi, lors de la prochaine utilisation, en remplissant le Nom ça retrouverait toutes les autres colonnes

    Ci-joint : la page ajout deposant.(on peut tout faire c’est une copie pour test) https://www.cjoint.com/c/MIAaxBJyEWD

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    `code_deposant` int(2) NOT NULL,
    `nom` varchar(40) NOT NULL,
    `prenom` varchar(40) DEFAULT NULL,
    `rue` varchar(40) NOT NULL,
    `code_postal` varchar(5) DEFAULT NULL,
    `ville` varchar(40) NOT NULL,
    `tel` varchar(15) DEFAULT '06',
    `email` varchar(40) DEFAULT 'email@email.fr',
    `association` varchar(40) DEFAULT 'Deposant',
    `Livres` varchar(40) DEFAULT '0',
    `DVD` varchar(40) DEFAULT '0',
    `CD` varchar(40) DEFAULT '0',
    `date_creation` date NOT NULL,
    `Note` varchar(1001) DEFAULT ''
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='V6_08_19_01';
    Bonjour, je reviens sur ton premier post, pour voir si tu peux faire évoluer ton appli selon le moins-disant, puisque c'est ton besoin.

    C'est vrai que si tu veux faire une requête en écriture, sans savoir d'avance si tu as une insertion ou un update, il faut suivre ce chemin.
    Fais une insertion fantaisie dans l'interface de ton phpmyadmin, pour récupérer un code SQL d'insertion propre.
    Ensuite tu le copies-colles et ajoute "on duplicate key update" :
    Ce qui te donnera quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO deposant VALUES(NULL, "VIARD", "Karine", "2 rue des souris", "88000", "EPINAL", NULL, NULL, NULL, NULL, NULL, NULL, NULL) 
    ON DUPLICATE KEY UPDATE rue = "3 rue des chats", code_postal = "27000", ville = "EVREUX" /*etc...*/;
    1) Je pose que ta première colonne est auto-increment.
    2) Je pose que ta clé d'unicité (indispensable pour définir les doublons qu'on ne veut pas voir) est posée sur un couple de 2 colonnes : nom + prenom.
    Entre nous, c'est très dangereux. Je travaille dans une boîte de 1000 "collaborateurs" et nous avons un doublon de ce type, du genre 2 "Nathalie LEGRAND".
    Pour bien faire, si tu peux encore faire évoluer cette table, tu devrais ajouter une date de naissance. La remplir une fois avec des données fantaisie pour ton existant (du genre UPDATE deposant set date_naissance = "1900-01-01").
    Puis ensuite, faire saisir la vraie date pour les nouveaux déposants.
    Ta clé d'unicité devient alors posée sur 3 colonnes : nom + prenom + date_naissance.

    Pourquoi Laurent et moi insistons sur cette commande SQL ? Parce qu'elle te fait faire un PHP infiniment plus simple. Tu fais une seule requête et le SQL bascule en mode insertion ou update selon les besoins.
    Je te mets ici un petit topo que je faisais là-dessus sur un commentaire d'un billet de blog :

    https://www.developpez.net/forums/bl.../#comment12074
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  13. #13
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Bonjour à tous,

    Dendrite (Sylvie),
    tes remarques portent sur les requêtes SQL, mais avant de travailler là-dessus, je pense qu'il faut revoir la modélisation (le MCD). Je ne suis pas le seul à penser cela :
    Citation Envoyé par escartefigue Voir le message
    Cette table présente à peu près tout ce qu'il ne faut pas faire quand on modélise une base de données.
    post #28 du 3/10...
    D'ailleurs, Djockey vient de nous proposer des règles de gestion (cette nuit).


    Quelques remarques ou questions sur ton post :

    Citation Envoyé par Dendrite Voir le message
    Pourquoi Laurent et moi insistons sur cette commande SQL ?
    Ah bon ? Ah oui, post #18, y a pile un mois !

    Citation Envoyé par Dendrite Voir le message
    pour voir si tu peux faire évoluer ton appli selon le moins-disant, puisque c'est ton besoin.
    Tu peux préciser, STP ?

    Citation Envoyé par Dendrite Voir le message
    C'est vrai que si tu veux faire une requête en écriture, sans savoir d'avance si tu as une insertion ou un update, il faut suivre ce chemin.
    Quel chemin ?

    Citation Envoyé par Dendrite Voir le message
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO deposant VALUES(NULL, "VIARD", "Karine", "2 rue des souris", "88000", "EPINAL", NULL, NULL, NULL, NULL, NULL, NULL, NULL) 
    ON DUPLICATE KEY UPDATE rue = "3 rue des chats", code_postal = "27000", ville = "EVREUX" /*etc...*/;
    Certes, j'utilise parfois ce type de requête (et effectivement, ça simplifie grandement le code PHP), mais j'ai pour habitude de mettre les mêmes valeurs qu'on fasse un INSERT ou un UPDATE ; par exemple
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO deposant VALUES(NULL, "VIARD", "Karine", "2 rue des souris", "88000", "EPINAL", NULL, NULL, NULL, NULL, NULL, NULL, NULL) 
    ON DUPLICATE KEY UPDATE rue = "2 rue des souris", code_postal = "88000", ville = "EPINAL" /*etc...*/;
    Par ailleurs, je préconise de mettre les noms de colonne dans le INSERT :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO deposant (nom,prenom,rue,code_postal,ville,etc) VALUES("VIARD", "Karine", "2 rue des souris", "88000", "EPINAL", NULL, NULL, NULL, NULL, NULL, NULL, NULL) 
    ON DUPLICATE KEY UPDATE rue = "2 rue des souris", code_postal = "88000", ville = "EPINAL" /*etc...*/;

    Citation Envoyé par Dendrite Voir le message
    Je pose que ta première colonne est auto-increment.
    De ce fait, inutile de traiter cette colonne dans le INSERT ; en plus, tu mets NULL dans une clé primaire...

    Citation Envoyé par Dendrite Voir le message
    Je travaille dans une boîte de 1000 "collaborateurs" et nous avons un doublon de ce type
    Il y a un certain nombre d'années (une trentaine), je travaillais dans une boîte de 500 personnes, et y avait 2 Maurice MARTIN...

    Citation Envoyé par Dendrite Voir le message
    En PHP via PDO, c'est tout à fait possible aussi, avec cette méthode :...
    L'utilisation du try/catch en PHP, bien !

  14. #14
    Membre averti
    Homme Profil pro
    web pour association
    Inscrit en
    Mars 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : web pour association

    Informations forums :
    Inscription : Mars 2013
    Messages : 53
    Par défaut
    Citation Envoyé par Dendrite Voir le message
    Bonjour, je reviens sur ton premier post, pour voir si tu peux faire évoluer ton appli selon le moins-disant, puisque c'est ton besoin.
    1) Je pose que ta première colonne est auto-increment.
    2) Je pose que ta clé d'unicité (indispensable pour définir les doublons qu'on ne veut pas voir) est posée sur un couple de 2 colonnes : nom + prenom.
    la table " déposant" as eu un petit changement depuis: PRIMARY KEY (`Id_client`), UNIQUE KEY `code_deposant` (`code_deposant`) je n'ai pas mis les autre champs qui eux sont resté les même.

    Du coup, avec l'ajout du champ Id_client, j'ai pus modifier le code et crée une page php qui affiche la table déposant, Id_client, code_deposant,,bla,bla,bla.. On indique le N° Id_client voulus pour la recherche d'un ancien client pour vérifier si ces coordonnées sont toujours les même, ainsi dans le formulaire suivant les modifications peuvent être faites sur tout les champs SAUF ID_client.

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

Discussions similaires

  1. Modifier la structure dune Table
    Par DevServlet dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 26/06/2007, 09h24
  2. Export partiel toutes tables sur critère ?
    Par aprosper dans le forum Administration
    Réponses: 1
    Dernier message: 12/01/2007, 08h59
  3. [VB.Net]Une fenêtre qui montre le contenu d’une table.
    Par yassin101 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 10/11/2006, 21h32
  4. Possibilité de passer le nom d’une table en variable ??
    Par nicolas310380 dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 21/02/2006, 14h12
  5. Réponses: 2
    Dernier message: 18/08/2005, 12h42

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