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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    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
    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 : 287
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 confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    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 986
    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?

  3. #3
    Membre confirmé
    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
    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 confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    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 986
    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.

  5. #5
    Membre confirmé
    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
    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 confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    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 986
    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);
        //...
    }

+ 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