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 :

Plusieurs possibilités pour where


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 17
    Par défaut Plusieurs possibilités pour where
    Bonjour à tous

    Alors voilà j'ai un petit problème.
    Je ne connais pas grand chose au SQL alors je me tourne vers vous.

    Pour accéder à l'épisode 1 de la saison 1 de mon site, je fais
    mondomaine.com/episode.php?id=1
    Et dans le fichier PHP, ça donne ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $retour = mysql_query("select * from episode where id=$id");
    jusque la, ca fonctionne


    Mais je voudrais que le lien pour accéder à l'épisode 1 de la saison 1 soit
    mondomaine.com/episode.php?saison=1&episode=1
    donc je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $retour = mysql_query("select * from episode where saison=$saison AND episode=$episode");
    Et ça fonctionne aussi

    Mon problème, c'est qu'en faisant ça, le lien mondomaine.com/episode.php?id=1 ne fonctionne plus

    et je voudrais que l'épisode soit accessible par
    mondomaine.com/episode.php?id=1
    ET PAR
    mondomaine.com/episode.php?saison=1&episode=1


    j'ai essayer de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $retour = mysql_query("select * from episode where id=$id OR saison=$saison AND episode=$episode");
    mais ça fonctionne pas

    Je sais bien que c'est pas très clair, mais je ne sais pas comment expliquer.

    En tous cas, merci à ceux qui prendront le temps de me répondre

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 288
    Par défaut
    Un truc comme ça, par exemple ?
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql = "select * from episode where " ;
    if ($id) { $sql .= "id = $id" ; } else {$sql .= "saison = $saison AND episode = $episode"} ;
    $retour = mysql_query($sql);

  3. #3
    Membre émérite Avatar de |PaRa-BoL
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 738
    Par défaut
    Attention au injections SQL /!\


    Tu as oublié les parenthèses :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $retour = mysql_query('select * from episode where id='.intval($id).' OR (saison='.intval($saison).' AND episode='.intval($episode).')');
    A supposé que tu n'ai pas d'entrées '0'

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 288
    Par défaut
    Citation Envoyé par |PaRa-BoL Voir le message
    Attention au injections SQL /!\
    Je propose qu'on traite un problème à la fois. D'abord le fonctionnement d'ensemble, ensuite il n'y aura plus qu'à ajouter quelques lignes en début de code pour valider/sécuriser les variables extérieures... s'agissant de trois entiers, ça ne devrait pas être trop dur !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $id = (int) $id ;
    $saison = (int) $saison ;
    $episode = (int) $episode ;

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 17
    Par défaut

    Ca fonctionne pas : Parse error: syntax error, unexpected '}' in [...]

    Au final ca me donnait ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    mysql_connect("...", "...", "...");
    mysql_select_db("...");
     
    $sql = "select * from episode where " ;
    if ($id) { $sql .= "id = $id" ; } else {$sql .= "saison = $saison AND episode = $episode"} ;
    $retour = mysql_query("$sql");
    while ($donnees = mysql_fetch_array($retour))
    {
    ?>

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 17
    Par défaut

    Ah voilà, ca fonctionne impeccablement bien !

    Donc au final j'ai mis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    mysql_connect("...", "...", "...");
    mysql_select_db("...");
    // On récupère les 5 dernières news
    $retour = mysql_query('select * from episode where id='.intval($id).' OR (saison='.intval($saison).' AND episode='.intval($episode).')');
    while ($donnees = mysql_fetch_array($retour))
    {
    ?>

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 17
    Par défaut
    J'en reviens pas, j'ai cru que c'était peine perdue !
    3 semaines de recherches, et là, à 3h00 du matin, la réponse !
    Vraiment merci

    Quelqu'un peut m'expliquer c'est quoi "intval" ?

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 17
    Par défaut
    Quelqu'un m'a dit que c'est une mauvaise idée, car ça fait un "duplicate content".
    C'est grave ?

  9. #9
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2005
    Messages
    357
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2005
    Messages : 357
    Par défaut
    Salut,

    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
    19
     
    #ici on récupère les deux variables. qu'elles soient passées ou pas.
    if (isset($_GET[episode]) $episode= $_GET[episode]; else $episode = '';
    if (isset($_GET[saison]) $saison= $_GET[saison]; else $saison= '';
    if (isset($_GET[id]) $id= $_GET[id]; else $id= '';
     
    $cond = '';
    if ($id!= '') $cond = " id= '" . $id. "'";  / si on fournit un id
    else {  //  si on fournit un épisode et/ou une saison
      if ($saison != '') $cond = " saison = '" . $saison . "'";
      if ($episode != '') {
        if ($cond != '') $cond .= ' and ';
        $cond .= " episode = '". $episode . "'";
      }
    }
    if ($cond == '') $cond = " 1"; // récuperer tous les épisodes de toutes les saisons
     
     
    $qry = "select * from episode where $cond"

  10. #10
    Membre émérite Avatar de |PaRa-BoL
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 738
    Par défaut
    Citation Envoyé par beeboo Voir le message
    Salut,

    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
    19
     
    #ici on récupère les deux variables. qu'elles soient passées ou pas.
    if (isset($_GET[episode]) $episode= $_GET[episode]; else $episode = '';
    if (isset($_GET[saison]) $saison= $_GET[saison]; else $saison= '';
    if (isset($_GET[id]) $id= $_GET[id]; else $id= '';
     
    $cond = '';
    if ($id!= '') $cond = " id= '" . $id. "'";  / si on fournit un id
    else {  //  si on fournit un épisode et/ou une saison
      if ($saison != '') $cond = " saison = '" . $saison . "'";
      if ($episode != '') {
        if ($cond != '') $cond .= ' and ';
        $cond .= " episode = '". $episode . "'";
      }
    }
    if ($cond == '') $cond = " 1"; // récuperer tous les épisodes de toutes les saisons
     
     
    $qry = "select * from episode where $cond"
    Très lourd pour rien...
    Et sécuriser les variables envoyées à MySQL on s'en moque ?

Discussions similaires

  1. [SQL] Recherche avec plusieurs possibilités pour un champ
    Par jeronimo83 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 15/07/2008, 15h27
  2. [C#] Plusieurs LinkButton pour une seule fonction
    Par FunnyDjo dans le forum ASP.NET
    Réponses: 3
    Dernier message: 08/06/2005, 22h01
  3. [Socket] Plusieurs socket pour un client
    Par meda dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 24/05/2005, 17h24
  4. Plusieurs vues pour le même objet
    Par nicolas66 dans le forum OpenGL
    Réponses: 4
    Dernier message: 25/10/2004, 10h27
  5. Réponses: 2
    Dernier message: 05/07/2004, 17h50

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