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 :

[Système] if() exécuté mais else() aussi


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Par défaut [Système] if() exécuté mais else() aussi
    Salut,

    Dans mon code j'ai ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (!ereg("(.*)".$cat."(.*)", $str_cats)) {
       $str_cats .= $cat;
       $connection->query("UPDATE its_parametres SET valeur = ".quote_smart($str_cats)." WHERE parametre = 'cats'");
    }
    else 
       $_SESSION['erreur'] = "Catégorie déjà existante";
    Je problème c'est que l'édition est faite dans ma base de donnée, mais que j'ai la session erreur qui est définie
    J'ai fais des print_r($_SESSION) avec et après cette partie et la session erreur est bien définie ici.

    Comme ça se fait?
    Merci

  2. #2
    Membre Expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Par défaut
    Tu es sûr que la variable de session n'est pas définie avant ? Genre, ça te dirait pas de faire un petit unset dessus avant ton if/else ?

  3. #3
    Membre éprouvé
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Par défaut
    Merci mais ça ne change rien.
    Si je commente la ligne de la requête plus d'édition, mais plus de message d'erreur.

  4. #4
    Invité
    Invité(e)
    Par défaut
    mets des accolades dans le pire des cas (c plus propre)
    sinon je pense pareil ta session doit etre defini quelque part avant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    if (!ereg("(.*)".$cat."(.*)", $str_cats))
    {
       $str_cats .= $cat;
       $connection->query("UPDATE its_parametres SET valeur = ".quote_smart($str_cats)." WHERE parametre = 'cats'");
    }
    else 
    {
       $_SESSION['erreur'] = "Catégorie déjà existante";
    }

  5. #5
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Au passage, ta regex est très peu optimisée.
    Voici ce que je te propose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match('/'.$cat.'/', $str_cats)
    J'ai changé de POSIX avec ereg() à PCRE avec preg_match() : plus rapide, plus intéressant à tous les niveaux.
    J'ai également supprimé les .* qui ne servaient à rien. Cela devrait largement améliorer les perfs de la regex, même si tu ne le remarqueras probablement pas.

    Pour terminer, une structure if/else ne passera jamais dans les deux branches à la fois. Pour t'en assurer, tu peux exécuter ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if (!preg_match('/'.$cat.'/', $str_cats))
    {
       echo 'if';
       $str_cats .= $cat;
       $connection->query("UPDATE its_parametres SET valeur = ".quote_smart($str_cats)." WHERE parametre = 'cats'");
    }
    else 
    {
       echo 'else';
       $_SESSION['erreur'] = "Catégorie déjà existante";
    }

  6. #6
    Membre éprouvé
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Par défaut
    Merci pour le preg_match c'était un peu trivial
    Sinon c'est toujours aussi louche: le else est affiché, mais pourtant l'update est faite. Le script doit repasser par la mais le if ne s'affiche pas.

Discussions similaires

  1. [Système] PHP5 : exécuter un fichier .exe
    Par koueletbak dans le forum Langage
    Réponses: 5
    Dernier message: 02/05/2006, 09h55
  2. Réponses: 7
    Dernier message: 30/03/2006, 15h43
  3. Réponses: 5
    Dernier message: 29/11/2005, 17h35
  4. [Système] PHP & exécution d'un commande sur Linux
    Par carlos20 dans le forum Langage
    Réponses: 8
    Dernier message: 12/11/2005, 12h26
  5. [Système] Pb exécution d'une commande externe
    Par licorne dans le forum Langage
    Réponses: 9
    Dernier message: 19/10/2005, 16h34

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