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 :

Plantage d"une requete pourtant simple [ODBC]


Sujet :

PHP & Base de données

  1. #1
    Inactif
    Inscrit en
    Octobre 2008
    Messages
    826
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 826
    Points : 172
    Points
    172
    Par défaut Plantage d"une requete pourtant simple
    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $pseudo = $_GET['pseudo'];
    $sql = "SELECT * FROM matable WHERE pseudo = '$pseudo'";
    J'ai pas de message d'erreur mais lorsque j'essaie de mettre un GET la page et vierge.

    En fesant un echo sur le get la valeur est bien bonne (évidemment j'enlève ma requete SQL sinon la page est blanche !)

    Pourtant avec une SESSION sa marche !

    Pourquoi ?

  2. #2
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    pour lutter contre la page blanche, on se place en condition de développement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ini_set('error_reporting', E_ALL & ~E_NOTICE );
    ini_set('display_errors', "1" );
    ini_set('display_startup_errors', "1" );
    apres on lit le premier message d'avertissement ou d'erreur, on trouve le nom du fichier , de la ligne incriminé et on relit le message d'erreur. On corrige... etc ...

    EDIT: une fois que ça marche tu devrais faire ce qu'il faut pour eviter les injections sql, parce qu'en l'état c'est pas sécurisé DU TOUT.
    PHP fait nativement la validation d'adresse électronique .
    Celui qui a inventé mysql_connect(...) or die() est déjà mort plusieurs fois.

    Utilisez le bouton résolu!

  3. #3
    Inactif
    Inscrit en
    Octobre 2008
    Messages
    826
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 826
    Points : 172
    Points
    172
    Par défaut
    Sa c'est deja fait.

    Et pas d'erreur quand qu'une page blache !

    Je seche !

  4. #4
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    bon mode débutant continue.

    modifie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $pseudo = $_GET['pseudo'];
    ECHO $sql = "SELECT * FROM matable WHERE pseudo = '$pseudo'";
    si jamais il y avait une erreur, c'est le moment ou jamais de l'exhiber. normalement ta page blanche devrait se salir d'un "SELECT * FROM ..."

    m'enfin, tant que je ne vois que ce morceau de code je peux rien faire de plus. Je suis pas un gourou moi; Sinon tes requêtes elles arrivent au serveur avec ce que je t'ai proposé?
    PHP fait nativement la validation d'adresse électronique .
    Celui qui a inventé mysql_connect(...) or die() est déjà mort plusieurs fois.

    Utilisez le bouton résolu!

  5. #5
    Inactif
    Inscrit en
    Octobre 2008
    Messages
    826
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 826
    Points : 172
    Points
    172
    Par défaut
    Avec sa j'ai plus page blanche.


    Ma requête s'affiche, et c'est tout.

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par gene69 Voir le message
    pour lutter contre la page blanche, on se place en condition de développement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ini_set('error_reporting', E_ALL & ~E_NOTICE );
    ini_set('display_errors', "1" );
    ini_set('display_startup_errors', "1" );
    pourquoi E_ALL & ~E_NOTICE ? et display_startup_errors a 1 ca sert a rien de le mettre dans le code

  7. #7
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    pouf pouf. C'est bon signe !

    C'est quoi la suite du script? parce que si ton script se limite à ça...
    C'est pas parce que tu manipule une chaine de caractère qui contient du sql que la requete que
    1. php va se connecter à la BONNE base de donnée avec le BON utilisateur
    2. php va EXECUTER la requete (gaffe, odbc ya prépare + execute, comme oracle et pas comme mysql )
    3. va lire les résultats retourné par la requete
    4. va formater et afficher le résultat
    5. et envoyer un mail au père noel en cas d'erreur.


    enfin, je suppose que tu es déjà au courant.
    PHP fait nativement la validation d'adresse électronique .
    Celui qui a inventé mysql_connect(...) or die() est déjà mort plusieurs fois.

    Utilisez le bouton résolu!

  8. #8
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    pourquoi E_ALL & ~E_NOTICE ? et display_startup_errors a 1 ca sert a rien de le mettre dans le code
    si, j'en ai déjà eu l'usage du display_startup_error() à une epoque ou je développais en php5 (par flegme) puis j'avais une prod en php4 (douloureux) et comme je pouvais pas éditer php.ini, ni avait acces aux log, je n'avais pour choix que de le forcer. Depuis j'ai gardé l'habitude, même si les hébergeurs professionnels ignorent ce genre de bidouille.

    et pour le notice, je ne sais plus... c'est un vieux copier/coller. de mémoire php4 n'affiche pas les notices par défaut dans E_ALL alors que les versions récentes si. C'est peut-être une annerie.
    PHP fait nativement la validation d'adresse électronique .
    Celui qui a inventé mysql_connect(...) or die() est déjà mort plusieurs fois.

    Utilisez le bouton résolu!

  9. #9
    Inactif
    Inscrit en
    Octobre 2008
    Messages
    826
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 826
    Points : 172
    Points
    172
    Par défaut
    Pourtant ma requette s'execute parfaitement avec une session a la place d'un get.

    C'est sa que je comprends pas.

  10. #10
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par gene69 Voir le message
    si, j'en ai déjà eu l'usage du display_startup_error() à une epoque ou je développais en php5 (par flegme) puis j'avais une prod en php4 (douloureux) et comme je pouvais pas éditer php.ini, ni avait acces aux log, je n'avais pour choix que de le forcer. Depuis j'ai gardé l'habitude, même si les hébergeurs professionnels ignorent ce genre de bidouille.

    et pour le notice, je ne sais plus... c'est un vieux copier/coller. de mémoire php4 n'affiche pas les notices par défaut dans E_ALL alors que les versions récentes si. C'est peut-être une annerie.
    display_startup_error c'est iniquement au lancement de php, donc la seul valeur prise en compte sera celle du php.ini,
    pour le notice c'est la conf par default, pour avoir le niveau le plus élevé, c'est E_ALL | E_STRICT

    ps : je suis pas d'accord avec ta signature

  11. #11
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    ps : je suis pas d'accord avec ta signature
    je sais cette fonction ne marche qu'en php5. Mais comme trop de gens l'ignorent, 99% des sites refusent la syntaxe user+etiquette@gmail.com, qui est parfaitement valide point de vue RFC, qui marche uniquement avec Gmail. S'il passe de l'expression réguliere au filtre build-in, le dev se simplifie la vie et en plus je peux utiliser les étiquettes sur mon adresse Gmail en bonus. C'est intéressé.

    pour le reste tu as raison.

    note pour le modérateur: je sais je suis hors-sujet. Mais comme tout le monde attend que thebarbarius nous gratifie de la suite de son script pour savoir pourquoi ça ne marche pas mieux, ya rien a faire.
    PHP fait nativement la validation d'adresse électronique .
    Celui qui a inventé mysql_connect(...) or die() est déjà mort plusieurs fois.

    Utilisez le bouton résolu!

  12. #12
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par gene69 Voir le message
    je sais cette fonction ne marche qu'en php5. Mais comme trop de gens l'ignorent, 99% des sites refusent la syntaxe user+etiquette@gmail.com, qui est parfaitement valide point de vue RFC, qui marche uniquement avec Gmail.

    note pour le modérateur: je sais je suis hors-sujet. Mais comme tout le monde attend que thebarbarius nous gratifie de la suite de son script pour savoir pourquoi ça ne marche pas mieux, ya rien a faire.
    au delà ca faut savoir que derrière FILTER_VALIDATE_EMAIL c'est un regexp...
    et faux en plus, a chaque version il le modifie, et même dans la prochaine il sera toujours faux, en même temps y'a pas de regexp parfait pour ça, y'a trop de règle et de condition, donc des fois ca peux etre avantageux de faire un regexp hyper large en acceptant plus de chose, mais bon j'utilise aussi filter_* mais plus par flemme et en sachant les conséquence

  13. #13
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    au delà ca faut savoir que derrière FILTER_VALIDATE_EMAIL c'est un regexp...
    tu en sais plus que moi. je suis battu à plat de couture. Qu'importe ce qu'il y a derriere, c'est toujours meilleur qu'un #[a-z]+@[a-z]+.[a-z]{3}#i
    PHP fait nativement la validation d'adresse électronique .
    Celui qui a inventé mysql_connect(...) or die() est déjà mort plusieurs fois.

    Utilisez le bouton résolu!

  14. #14
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par gene69 Voir le message
    tu en sais plus que moi. je suis battu à plat de couture. Qu'importe ce qu'il y a derriere, c'est toujours meilleur qu'un #[a-z]+@[a-z]+.[a-z]{3}#i
    ouai c'est sur que celui la il est particulièrement immonde
    le prochaine ou celui en cours est base la dessus : http://squiloople.com/2009/12/20/ema...ss-validation/
    avec quelque modif et ressemble a ca :
    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
    /^(?!(?:(?:\x22?\x5C[\x00-\x7E]\x22?)|(?:\x22?[^\x5C\x22]\x22?)){255,})(?!(?
    :(?:\x22?\x5C[\x00-\x7E]\x22?)|(?:\x22?[^\x5C\x22]\x22?)){65,}@)(?:(?:[\x21\
    x23-\x27\x2A\x2B\x2D\x2F-\x39\x3D\x3F\x5E-\x7E]+)|(?:\x22(?:[\x01-\x08\x0B\x
    0C\x0E-\x1F\x21\x23-\x5B\x5D-\x7F]|(?:\x5C[\x00-\x7F]))*\x22))(?:\.(?:(?:[\x
    21\x23-\x27\x2A\x2B\x2D\x2F-\x39\x3D\x3F\x5E-\x7E]+)|(?:\x22(?:[\x01-\x08\x0
    B\x0C\x0E-\x1F\x21\x23-\x5B\x5D-\x7F]|(?:\x5C[\x00-\x7F]))*\x22)))*@(?:(?:(?
    !.*[^.]{64,})(?:(?:(?:xn--)?[a-z0-9]+(?:-[a-z0-9]+)*\.){1,126}){1,}(?:(?:[a-
    z][a-z0-9]*)|(?:(?:xn--)[a-z0-9]+))(?:-[a-z0-9]+)*)|(?:\[(?:(?:IPv6:(?:(?:[a
    -f0-9]{1,4}(?::[a-f0-9]{1,4}){7})|(?:(?!(?:.*[a-f0-9][:\]]){7,})(?:[a-f0-9]{
    1,4}(?::[a-f0-9]{1,4}){0,5})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?)))|
    (?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){5}:)|(?:(?!(?:.*[a-f0-9]:){
    5,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{
    1,4}){0,3}:)?)))?(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]
    ))(?:\.(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))){3}))\]
    ))$/iD

    sinon pour thebarbarius oublie pas non plus de protéger tes valeurs qui sort du GET

  15. #15
    Inactif
    Inscrit en
    Octobre 2008
    Messages
    826
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 826
    Points : 172
    Points
    172
    Par défaut
    La suite est simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $pseudo = $_GET['pseudo'];
    $sql = "SELECT * FROM matable WHERE pseudo = '$pseudo'";
     
    				$query = odbc_exec($conn,$sql);
    	   $result = odbc_fetch_array($query);
        while ($row = odbc_fetch_row($query)) {
     echo odbc_result($query, "pseudo");
    }
    ce qui est censé afficher toute la liste des membres..

    Voila

  16. #16
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    faut choisir entre ton $result = odbc_fetch_array($query);
    et ton while, c'est

    a chaque fois que tu fait un fetch ca va chercher la prochain resultat

  17. #17
    Inactif
    Inscrit en
    Octobre 2008
    Messages
    826
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 826
    Points : 172
    Points
    172
    Par défaut
    Ok merci sa marche nikel !

    J'ai enlevé ma boucle while.


    Juste pour info qu'est ce que sa donnerai avec une boucle while avec ODBC ?

  18. #18
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par thebarbarius Voir le message
    Ok merci sa marche nikel !

    J'ai enlevé ma boucle while.


    Juste pour info qu'est ce que sa donnerai avec une boucle while avec ODBC ?
    a chaque fetch sur ton result odbc il va chercher la résultat suivant, ton while aurai donc tourner qu'une seul fois si il trouve qu'un résultat, ce qui serait donc revenu au meme

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

Discussions similaires

  1. [AC-2007] Besoin d'aide sur une requête pourtant simple
    Par teuzadur dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 19/03/2013, 16h28
  2. Réponses: 1
    Dernier message: 15/04/2011, 09h33
  3. Une requête pourtant simple qui ne marche pas
    Par JeanNoel53 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 13/12/2010, 18h30
  4. bloquage sur une requete pourtant simple
    Par mdr_cedrick dans le forum Langage SQL
    Réponses: 3
    Dernier message: 15/04/2008, 15h55
  5. comparer deux date dans une requete select simple
    Par isac83 dans le forum Requêtes
    Réponses: 1
    Dernier message: 23/09/2007, 09h53

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