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 :

IF sur un booléen [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 228
    Par défaut IF sur un booléen
    Bonjour,

    Sénior en .Net je débute le PHP mais j'ai quelques interrogations ...

    Exemple, je lutte sur un booléen (TINYINT) :

    Je récupère un formulaire avec un checkbox et pendant le traitement je souhaite insérer sa valeur.

    Voici donc un exemple de mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $flash=$_POST['flash'];
    if ( $flash === true ) {
    	$flash = 1;
    }
    else {
    	$flash = 0;
    }
    J'insère ensuite $flash en base. Il m'insert ce qu'il veut en fait ...

    Que fais-je de mal ?

    Merci de votre aide.

  2. #2
    Membre émérite Avatar de patrickbaras
    Homme Profil pro
    Informaticien (à sa mémère).
    Inscrit en
    Septembre 2010
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien (à sa mémère).
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Par défaut
    $_POST['flash'] contient une chaine ou un nombre mais pas un boolean
    ajoute un var_dump($_POST['flash']);
    pour connaitre le contenu et son type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $flash=$_POST['flash'];
    var_dump($_POST['flash']);
    if ( $flash === true ) {
    	$flash = 1;
    }
    else {
    	$flash = 0;
    }
    au passage ===true n'est pas utile pour tester un boolean
    suffit

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 228
    Par défaut
    Merci Patrick,

    Si je fais un "echo", il m'affiche 1.

    Donc si je comprends bien, il me suffit de faire le test

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if ( $flash ) {
       $flash=1;
    }
    else {
       $flash=0;
    }
    J'ai bon ?

    Sorry, je raisonne c# et j'ai encore du mal en php

  4. #4
    Membre émérite Avatar de patrickbaras
    Homme Profil pro
    Informaticien (à sa mémère).
    Inscrit en
    Septembre 2010
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien (à sa mémère).
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Par défaut
    et si tu fait un var_dump($_POST['flash']); ? il donne quoi ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 228
    Par défaut
    Il me donne : string(1) "1"

  6. #6
    Membre émérite Avatar de patrickbaras
    Homme Profil pro
    Informaticien (à sa mémère).
    Inscrit en
    Septembre 2010
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien (à sa mémère).
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Par défaut
    donc
    après
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $flash=$_POST['flash'];
    $flash contient le string "1" , donc pas un boolean

    ton test doit donc se faire en comparant un string avec un autre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if($flash==="1"){
    ...
    }

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 228
    Par défaut
    Ah ok, ça me renvoi donc unu donnée typée !!!

    J'avais pas compris ça. Je pensais qu'en PHP on récupérais une donnée "brute".

    Donc j'ai un string, ok, pigé je pense.

    Je teste ça après diné et je reviens tout à l'heure.

    Merci Patrick.

  8. #8
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2013
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2013
    Messages : 243
    Par défaut
    Slt, MySQL gère bien le type booléen (# TINYINT) très pratique pour les tests. Tu peux vérifier l'existence d'un checkbox pour savoir s'il a été coché

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    if (isset($_POST['flash'])){ //Si la variable envoyé existe => checkbox coché
         $_POST['flash'] = 1;
    }
    else{
         $_POST['flash'] = 0;
    }
    ?>

  9. #9
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    ça me renvoi donc unu donnée typée
    En aucun cas !
    La donnée est reçue suite à la validation d'un formulaire, c'est-à-dire à partir d'une requête HTTP.
    Comme HTTP ne reconnait pas les types, la seule chose que tu peux recevoir, ce sont des chaines de caractère.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  10. #10
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Tous ce qui viens de GPC (get post cookie) est une chaine de caractères par défaut puisque une requête HTTP ne conserve pas les types.
    C'est donc à toi de faire ce qu'il faut pour tester correctement la bonne donnée.

    Par exemple dans ton cas tu à un int (et pas un boolean) donc tu peux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $flash = intval($_POST['flash']);
    if ($flash) {
        $flash = 1;
    }
    Tu forces donc $_POST['flash'] en entier. Si c'est bien un chiffre qui est représenté dans la chaine il sera caster en entier , sinon $flash sera = à 0.

    Garde bien à l'esprit que tu ne dois jamais utiliser directement ce qui vient des variables GPC. Ces données doivent absolument être vérifiées , filtrées , nettoyées.
    Pour ça il y'a filter_input ou filter_var ainsi que les très commun intval() , floatval() ...
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 228
    Par défaut
    Ok, merci à tous.

    Non seulement ça marche mais en plus j'ai compris

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

Discussions similaires

  1. Question sur les booléens Delphiens
    Par peter27x dans le forum Langage
    Réponses: 3
    Dernier message: 07/01/2009, 15h18
  2. Index sur un booléen ?
    Par TiEuM dans le forum Administration
    Réponses: 9
    Dernier message: 23/03/2007, 13h13
  3. [SQL2K][TSQL] effectuer un traitement sur un booléen
    Par pcdj dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 22/08/2006, 11h39
  4. Doute sur le booléen SQLServer
    Par mael94420 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 18/08/2006, 16h17
  5. [SQL] clause Where sur un booléen
    Par mosquitout dans le forum Access
    Réponses: 3
    Dernier message: 21/12/2005, 21h29

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