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 :

Modifier valeur "on" checkbox dans export csv


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Femme Profil pro
    Webdesigner
    Inscrit en
    Avril 2014
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Avril 2014
    Messages : 92
    Par défaut Modifier valeur "on" checkbox dans export csv
    Bonjour à tous,

    Après avoir cherché sur la sacro-sainte toile, je ne trouve pas la réponse à ma question que voici :

    A partir d'une BDD je fais un export csv grace au code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    $csv_output = "N° inscrit;Nom;Prénom;Remplacé par;Hôtel;Type chambre;N° chambre;21 mars;22 mars;23 mars;24 mars;25 mars;26 mars;Colocataire twin;Colocataire triple"; 
    $csv_output .= "\n"; 
     
    $req = $bdd->query('SELECT id, nom, prenom, remplace, nomHotel, typeChambre, numChambreReel, 21mars, 22mars, 23mars, 24mars, 25mars, 26mars, colocataireTwin, colocataireTriple FROM olympiades WHERE nomHotel="'.$_POST['nomHotel'].'" ORDER BY nom');
     
    while ($donnees = $req->fetch(PDO::FETCH_ASSOC)) { 
    $csv_output .= implode(';',$donnees) . "\n"; 
    } 
     
    header("Content-type: application/vnd.ms-excel"); 
    header("Content-disposition: attachment; filename=Export_Hotel_Alpha_" . date("Ymd").".csv"); 
    print $csv_output; 
    exit;
    Les champs 21mars, 22mars, 23mars, 24mars, 25mars et 26mars sont des checkbox donc je récupère la valeur "on", si la variable existe, dans mon export.

    Or je voudrais obtenir une valeur dans mon export, mais sans attribuer de valeur à "value" dans les propriétés de mes checkbox.

    Est-ce possible de faire cela uniquement au moment de l'export ?

    Qui plus est la valeur que je souhaite attribuer à mes champs 21mars etc dépend de la valeur du champ typeChambre :
    - Si typeChambre = SGL, la valeur de mes checkbox doit être égale à 1,
    - Si typeChambre = TWIN, la valeur de mes checkbox doit être égale à 0,5.


    Merci par avance pour votre aide.

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Tu as 2 options : soit tu le fais en PHP, soit tu le fais directement en SQL dans la requête.

    En PHP (mode bourrin, il doit y avoir un moyen de faire plus optimisé), en supposant qu'on met "0" pour la valeur off.
    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
    while ($donnees = $req->fetch(PDO::FETCH_ASSOC)) { 
        $on = 'on';
        $off = '0';
        if ($donnees['typeChambre'] == 'SGL') {
            $on = '1';
        } elseif ($donnees['typeChambre'] == 'TWIN') {
            $on = '0,5';
        }
        $donnnees['21mars'] = ($donnnees['21mars'] == 'on')?$on:$off;
        $donnnees['22mars'] = ($donnnees['22mars'] == 'on')?$on:$off;
        $donnnees['23mars'] = ($donnnees['23mars'] == 'on')?$on:$off;
        $donnnees['24mars'] = ($donnnees['24mars'] == 'on')?$on:$off;
        $donnnees['25mars'] = ($donnnees['25mars'] == 'on')?$on:$off;
        $donnnees['26mars'] = ($donnnees['26mars'] == 'on')?$on:$off;
     
        $csv_output .= implode(';',$donnees) . "\n"; 
    }
    Au passage, il faudrait protéger ta requête, en ajoutant un appel à quote ou une requête préparée.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre confirmé
    Femme Profil pro
    Webdesigner
    Inscrit en
    Avril 2014
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Avril 2014
    Messages : 92
    Par défaut
    Bonjour Celira,

    Merci pour ta réponse.
    Du coup la solution d'inclure ça dans la requete SQL m'intéresse. je m'y suis essayée sur le champ 19mars comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $csv_output = "Type;N° inscrit;Nom;Prénom;Pôle;Métier;Divers;Inscrit le;Modifié le;Annulé le;Remplacé par;Hôtel;Catégorie;Type chambre;N° chambre fictif;N° chambre réel;Genre;19 mars;20 mars;21 mars;22 mars;23 mars;24 mars;Colocataire twin;Colocataire triple;Commentaires"; 
    	$csv_output .= "\n"; 
     
    	$req = $bdd->query('SELECT type, id, nom, prenom, pole, metier, divers, dateInscrit, dateModifie, dateAnnule, remplace, nomHotel, categorieHotel, typeChambre, numChambreFictif, numChambreReel, genre, CASE 19mars WHEN typeChambre ="SGL" THEN 1 WHEN typeChambre ="TWIN" THEN 0,5 ELSE 0 END, 20mars, 21mars, 22mars, 23mars, 24mars, colocataireTwin, colocataireTriple, commentaires FROM olympiades ORDER BY nom');
     
    	while ($donnees = $req->fetch(PDO::FETCH_ASSOC)) { 
    	$csv_output .= implode(';',$donnees) . "\n"; 
    	} 
     
    	header("Content-type: application/vnd.ms-excel"); 
    	header("Content-disposition: attachment; filename=Export_Global_" . date("Ymd").".csv"); 
    	print $csv_output; 
    	exit;
    Mais j'ai l'erreur suivante sur la ligne 6 : Fatal error: Call to a member function fetch() on boolean.
    Peux-tu m'aider encore là-dessus ?

    Merci

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    ça, c'est une erreur typique d'une requête qui plante. Pour avoir un peu plus d'informations, tu peux ajouter la gestion d'exception PDO à ton script :
    Au niveau de la connexion, ajoute :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    Et au niveau du traitement, encadres ta requête par un try/catch. Par exemple
    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
    try {
        $csv_output = "Type;N° inscrit;Nom;Prénom;Pôle;Métier;Divers;Inscrit le;Modifié le;Annulé le;Remplacé par;Hôtel;Catégorie;Type chambre;N° chambre fictif;N° chambre réel;Genre;19 mars;20 mars;21 mars;22 mars;23 mars;24 mars;Colocataire twin;Colocataire triple;Commentaires"; 
        $csv_output .= "\n"; 
     
        $req = $bdd->query('SELECT type, id, nom, prenom, pole, metier, divers, dateInscrit, dateModifie, dateAnnule, remplace, nomHotel, categorieHotel, typeChambre, numChambreFictif, numChambreReel, genre, CASE 19mars WHEN typeChambre ="SGL" THEN 1 WHEN typeChambre ="TWIN" THEN 0,5 ELSE 0 END, 20mars, 21mars, 22mars, 23mars, 24mars, colocataireTwin, colocataireTriple, commentaires FROM olympiades ORDER BY nom');
     
        while ($donnees = $req->fetch(PDO::FETCH_ASSOC)) { 
            $csv_output .= implode(';',$donnees) . "\n"; 
        } 
     
        header("Content-type: application/vnd.ms-excel"); 
        header("Content-disposition: attachment; filename=Export_Global_" . date("Ymd").".csv"); 
        print $csv_output; 
        exit;
    } catch (PDOException e) {
        echo 'Échec de la requête : ' . $e->getMessage();
        exit;
    }
    PDO - Les erreurs et leur gestion

    Si tu veux faire ton traitement en SQL, je te conseille de mettre au point ta requête indépendamment du script PHP, via un outil comme PhpMyAdmin (ou assimilé, selon ton SGDB). Et de poser la question à nos camarades du forum SGDB si tu coinces
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  5. #5
    Membre confirmé
    Femme Profil pro
    Webdesigner
    Inscrit en
    Avril 2014
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Avril 2014
    Messages : 92
    Par défaut
    Bonjour Celira,

    Merci pour tes conseils. Je me suis mise sur PhpMyAdmin en effet pour travailler sur ma requête indépendamment du script PHP.
    Et ça coince toujours, je vais aller faire un tour du côté du forum SGBD.

    Bonne journée

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 28/07/2010, 16h13
  2. Réponses: 2
    Dernier message: 19/05/2006, 18h01

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