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

Langage PHP Discussion :

Ajout d'une colonne 'case a cocher'


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Homme Profil pro
    en retaite
    Inscrit en
    Mai 2010
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : en retaite
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 164
    Points : 99
    Points
    99
    Par défaut Ajout d'une colonne 'case a cocher'
    Bonjour à tous,

    J'ai une fonction toute simple qui me liste en vetical toutes les colonnes d'un fichier CSV, destné a alimenter une table Mysql.

    Voici l'image obtenue :

    Nom : 2021-04-05 10_05_28-_MAJ_Table_Personnes_CTRL_HV.php.jpg
Affichages : 205
Taille : 63,8 Ko


    Voici maintenant le code de ma fonction (J'ai un peu honte tellement elle est simple)

    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
     
     
    function voir_tablo_vc($ce_tab) {								//	Vertical et Checked O/N
    	echo "<br>"; 
    	$nb_lgn_v = count($ce_tab); echo "<br>"; echo "<br>"; echo "nb_lgn_v : ".$nb_lgn_v; echo "<br>"; //  exit;
    	echo "<table>";
    		echo "<tr>  ";	echo "<th> <center> clé"; echo "</th>";	echo "<th> <center> nom_chp_csv </th>";	echo "<th> <center> coche O/N </th>";	echo "</tr>";
    		foreach($ce_tab as $key => $nom_chp_csv ){
    			$ligne = $key;
    			//  echo "<tr>";	echo "<td>" .$key; echo "</td>";	echo "<td>" .$nom_chp_csv; echo "</td>";	echo "<td> <center> <input type='checkbox' name='valide[]' checked value='".$nom_chp_csv['ligne']."'> </td>";	echo "</tr>";
    			echo "<tr>";	echo "<td>" .$key; echo "</td>";	echo "<td>" .$nom_chp_csv; echo "</td>";	echo "<td> <center>  []    																  				   </td>";	echo "</tr>";
    		}
    		echo "</table>";
    		echo "<br>"; echo "<br>"; 
    	}

    Ce que je voudrais, c'est obtenir que la 3° colonne me permette de cocher( ou décocher) tel ou tel 'champ' de façon a sélectionner uniquement ceux que je voudrais importer dans ma base mysql :

    Ces 'champs' ou colonnes peuvent apparaitre 'cochés' ou 'décochés' lorsque j'exécuterai ma fonction.

    J'ai essayé de multiples solutions mais aucune ne me donne le résultat espéré.

    Je vous remercie à l'avance.

    Cordialement
    Maub

  2. #2
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Comment dans ton fichier csv ou le tableau $ce_tab qui en résulte, apparaît le fait que la case doit être soit cochée soit décochée?
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  3. #3
    Membre régulier
    Homme Profil pro
    en retaite
    Inscrit en
    Mai 2010
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : en retaite
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 164
    Points : 99
    Points
    99
    Par défaut
    Bonjour Cosmo,

    Je comprends 'mal' la question que tu me poses ... et je ne sais pas comment y répondre :

    Mon projet est de générer le tableau dont j'ai joint l'image, et de 'trouver', soit chaque ligne 'cochée' , soit chaque ligne 'décochée',... (je ne sais d'ailleurs pas comment)
    et de pouvoir ensuite, soit :
    - décocher (si elles arrivent 'cochées'), les lignes que je ne souhaite pas importer dans la Table,
    - cocher (si elles arrivent 'décochées), les lignes que je souhaite importer dans la Table.

    S'il faut que je prenne une option ... pour que tu puisses me proposes une 'solution', la voici : Je préfère que les lignes arrivent toutes 'décochées', et qu'ensuite, je puisse 'cocher' que celles que je veux pas importer.

    N'hésite pas ... si mon propos n'est pas clair.

    Merci.
    Maub

  4. #4
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Ah oui, je comprends mieux maintenant ce que tu veux faire (je pensais que la case à cocher/décocher correspondait à une colonne du type vrai/faux déjà contenue dans le csv de départ). Tu veux sélectionner les colonnes d'un csv.

    Tu n'étais pas très loin de la solution. Pour pouvoir identifier les colonnes, tu peux passer son numéro ($key) comme attribut value de ta balise input:

    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
    function voir_tablo_vc($ce_tab) {
     
        echo "<br><br><br>nb_lgn_v : ", count($ce_tab), "<br>",
             "<table>",
             "<tr>  <th> <center> clé</th><th> <center> nom_chp_csv </th><th> <center> coche O/N </th></tr>";
     
        foreach($ce_tab as $key => $nom_chp_csv) {
     
            echo "<tr>",
                 "<td>$key</td>",
                 "<td>$nom_chp_csv</td>",
                 "<td> <center> <input type='checkbox' name='valide[]' checked value='$key'></td>",
                 "</tr>";
     
        }
        echo "</table><br><br>"; 
    }
    Bien sûr ensuite, tu devras appeler cette fonction au sein d'un formulaire qui une fois validé coté client transmettra l'ensemble des clés cochées dans $_POST['valide'] ou $_GET['valide'] (suivant la méthode choisie) au script PHP censé les récupérer.

    Si tu préfères avoir toutes les cases décochées par défaut, enlève l'attribut checked de la balise input.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  5. #5
    Membre régulier
    Homme Profil pro
    en retaite
    Inscrit en
    Mai 2010
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : en retaite
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 164
    Points : 99
    Points
    99
    Par défaut
    Re-Bonjour Cosmo,

    Parfait, je te félicite et te remercie bien vivement, c'est exactement ce que je voulais !


    Peut-être même, et en complément (et pour le fun) aurais-tu une idée géniale pour améliorer (sécuriser) ce que je dois réaliser :

    Je (développeur bénévole de 75 ans), gère une association de près de 1000 membres et je dois mettre à jour la table des 'personnes' (= les membres).

    Dans un premier temps, je génère un fichier CSV contenant les 21 champs de la table 'personnes' (cf. mon image du 1° mail).

    Dans la table, les 13 premiers champs sont déjà remplis, et l'opérateur (bénévole aussi) doit saisir dans le CSV, mis à sa disposition, les valeurs des 8 derniers champs.

    Puis par un formulaire de 'Mise à Jour', je vais lire les champs du formulaire CSV (que le bénévole m'a transmis) ... et mettre la table 'à jour'..... Elémentaire mon cher Watson !


    Avant de 'valider' la mise à jour, je me fais 2 soucis (éventuels) :
    1- L'opérateur, qui a mis à jour le CSV, n'a t-il pas modifié par mégarde, l'ordre des champs, ce qui déclencherait un vrai 'bazar' dans la base !!!
    2- Comment m'assurer (et asservir sans faille) l'ordre (ou leur nom) des champs du CSV ... avec l'ordre (ou les noms) des champs de la table ?

    Si tu as une BONNE idée, je suis preneur et t'en remercie déjà.

    Même si tu n'en as pas, je te remercie quand même pour ta solution à ma question initiale.

    Bien cordialement.
    Maub

  6. #6
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    l'opérateur (bénévole aussi) doit saisir dans le CSV, mis à sa disposition, les valeurs des 8 derniers champs.
    Dois-je comprendre qu'il le fait "à la main" en éditant directement le fichier CSV et ce pour un millier d'enregistrements? Dans ce cas on est effectivement dans le périlleux: il peut décaler, inverser, voire altérer les données des colonnes déjà renseignées. Je ne sais pas à partir de quoi il va renseigner les colonnes manquantes, mais s'il le fait à partir de documents papier, il faudrait qu'il ait à minima une interface de saisie avec le nom du champ qu'il est en train de saisir et avec si possible quelques vérifications automatiques lorsque c'est possible.

    Je ne saurais trop te conseiller de garder des copies de ton csv (ou un dump de ta table) avant de faire quoi que ce soit; et vue comment c'est parti, il sera à mon avis plus que nécessaire de se livrer à un fastidieux contrôle humain une fois la mise à jour accomplie.

    Comment m'assurer (et asservir sans faille) l'ordre (ou leur nom) des champs du CSV ... avec l'ordre (ou les noms) des champs de la table ?
    Dans le code précédent j'ai choisi de passer la variable $key comme valeur des checkbox, mais il est tout à fait possible de passer les noms des colonnes de la table, de même qu'il est possible de commencer un fichier csv par une ligne d'entêtes où celles-ci seraient également les noms de colonnes de la table. Ainsi, l'ordre des champs du csv ou des colonnes dans la table n'a aucune importance puisque c'est le nom des colonnes qui fait le lien. Cela nécessite de lire la première ligne du csv avec les entêtes pour pouvoir créer un tableau associatif à chaque le ligne suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $header = fgetcsv($file); // on récupère la première ligne d'entête
     
    while ( $row = fgetcsv($file) ) { // on lit les lignes suivantes
        $tableau_associatif_adherent = array_combine($header, $row);
        //...
    }
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  7. #7
    Membre régulier
    Homme Profil pro
    en retaite
    Inscrit en
    Mai 2010
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : en retaite
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 164
    Points : 99
    Points
    99
    Par défaut
    Bonsoir Cosmo,

    Merci pour tes commentaires et de tes suggestions.

    Puisque tu me sembles 'passionné' par le traitement que je dois faire, je te propose les 4 formulaires utilisés pour la gestion de ces mises à jour.
    Je te les enverrai en MP... si tu le désires ... et si je trouve comment faire.

    En tous cas, Merci pour tout .
    Maub

    Si ça te barbe, tu mets le tout à la poubelle, mais si ça t'intéresse nous pouvons en discuter :

    1° formulaire : Export_vers_Fichier_CSV_HV.php Il génère le fichier CSV ...
    2° formulaire : Maj_Table_Personnes_via_CSV_HV.php il saisit le fichier CSV à traiter .... parmi d'autres CSV
    3° formulaire : Maj_Table_Personnes_CTRL_HV.php il me sert à faire différentes vérifications .... avant la validation déclenchée dans le formulaire suivant
    4° formulaire : Maj_Table_Personnes_GO_HV.php C'est lui qui met à jour la table (enfin !!!)

    Tu te rendras compte ... que je suis un débutant ... et bien des points pourraient être optimisés.

    Je suis (heureux) de rapprocher les remarques et suggestions que tu m'as formulées ... de la façon dont j'ai moi-même conçu mon développement.
    Nos vues semblent assez proches !!!

  8. #8
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    vous avez loupé un conseil de CosmoKnacki : ça serait mieux si la personne qui saisit les données le fait directement dans l'application au lieu de les saisir dans un fichier tableur.

  9. #9
    Membre régulier
    Homme Profil pro
    en retaite
    Inscrit en
    Mai 2010
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : en retaite
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 164
    Points : 99
    Points
    99
    Par défaut
    Bonjour Mathieu,

    Merci pour ta remarque, elle est judicieuse !

    En ce qui concerne la saisie des infos complémentaires à saisir directement par l'application ... dans la fiche du membre, ...je suis oK, mais les manip à reproduire pour chaque membre sont assez factidieuses.

    Par contre, via un fichier tableur CSV, c'est bcp plus rapide et on fait toute une colonne à la suite, en s'appuyant sur des documents papier remplis par les membres eux-même.

    Le risque de se tromper existe, mais la vue 'globale' du tableau CSV permet de repérer les 'anomalies' éventuelles assez facilement.

    J'envisage 'lier' les en-têtes du fichier CSV (nom des colonnes) aux 'noms' des champs de la table et d'en verrouiller l'association dans un tableau ... 'associatif' !!!


    Merci de votre collaboration.

    Bien cordialement
    Maub

  10. #10
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    il est possible de faire un formulaire qui permet de modifier plusieurs fiches en même temps. comme ça, il y a les avantages d'avoir tout sur le même écran sans avoir les inconvénients du fichier tableur qui peut être mélangé.

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

Discussions similaires

  1. Ajout d'une colonne automatiquement suivant date
    Par paflolo dans le forum Access
    Réponses: 7
    Dernier message: 07/03/2006, 17h51
  2. [Access 97] Ajout d'une colonne selon la date...
    Par paflolo dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/03/2006, 16h50
  3. Réponses: 7
    Dernier message: 01/03/2006, 18h14
  4. pb d'ajout d'une colonne dans un report
    Par khlh dans le forum Oracle
    Réponses: 3
    Dernier message: 06/10/2005, 17h12
  5. Ajout d'une colonne dans une table ...
    Par Djedjeridoo dans le forum SQL
    Réponses: 2
    Dernier message: 22/07/2003, 16h12

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