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 :

Probléme sur mysql [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 327
    Par défaut Probléme sur mysql
    Bonjour,
    J'ai un probléme assez étonnant.
    Je suis en train de develloper un site avec les templates et php5 avec des classes donc.
    Mon site repose sur la bdd mysql(tout est dedans sauf le code html)
    En faite mon site ne fait qu'une page et je change le contenu de la page
    avec des liens dans le menu du style
    index.php?page=accueil
    index.php?page=realisation
    la valeur de page est le resultat d'une requete select *from page where contenu=realisation par exemple
    enfin avec un urlrewitting toute mes pages(il y en a une en faite) s'appelle
    accueil.htm
    realisation.htm
    et il y a un truc que je n'ai jamais vu
    si je saisi dans le navigateur index.php?page=machinchose ou méme ""
    il affiche le dernier contenu de la database
    autrement dit la"page" contact
    la j'avoue que le probléme doit etre surement trés simple mais je séche
    Merci de m'aider

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 64
    Par défaut
    Prévoir une page d'erreur dans ta bdd ou en php au cas ou la reche d'aboutit à aucune donnée existante.

  3. #3
    Expert confirmé
    Avatar de N1bus
    Homme Profil pro
    Dev. Web & OpenERP
    Inscrit en
    Janvier 2003
    Messages
    2 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Dev. Web & OpenERP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 827
    Par défaut
    Bonjour,

    Tu peux mettre ta requête ici ?

    Tu devrais faire un test du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $q = "select * from page where contenu = '" . $_GET['contenu'] ."' ";
    $r = mysql_query($q);
    $nb = mysql_num_rows($r);
     
    if($nb == 0){ // ici tu vérifies qu'il y a bien un résultat
    header("Location: index.php"); // y'en a pas : retour page d'accueil
    exit;
    }
    else{
    // le reste du code
    }

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 327
    Par défaut
    Bonjour
    Voici mon code

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    <?php
    require ("template.inc");
    require ("mysql.php");
    $types = array(
           'accueil' => 'accueil',
           'realisation' => 'realisation',
           'contact' => 'contact',
           'galerie' => 'galerie'
     
       );
     
     
    $page=$_GET['page'];
    //echo $page."<br>";
    //echo $types[$page];
    if($types[$page]!=$page){//on teste l'existence de la page
     
    echo"Cette page n'existe pas";exit;
     
    }
     
    $db = new mysql();
    $db->connect("laurentg2003");
    $requete="select * from pages";
    $db->requete($requete,0); 
    $requete="select * from pages where PAGE='$page'";la requete en question
    $db->requete($requete,1);
    while($row=$db->fetch_assoc(0)) {
    $page=$row['PAGE'];
    $titre = $row['TITRE'];
    $contenu = $row['CONTENU'];
    $pageUrl=strtolower($page);
    $menu .="<a href='$pageUrl.htm'>$page</a><br>";
    }
    while($row=$db->fetch_assoc(1)) {
    $page=$row['PAGE'];
    $titre = $row['TITRE'];
    $contenu = $row['CONTENU'];
    }
     
     
     
     
     
     
     
     
    $tpl= new Template (".");
    $tpl->set_file("page","code.php");
    $tpl->set_var("TITRE_ENTETE",$page);
    $tpl->set_var("TITRE",$titre);
    $tpl->set_var("MENU",$menu);
    $tpl->set_var("CONTENU",$contenu);
    $tpl->parse("PAGE","page");
    $tpl->p("PAGE");
    ?>
    Donc pour des problémes de sécurité je teste l'existence de la page
    Dans ma classe mysql je vais aussi rajouter un test(style $nb = mysql_num_rows($r)une méthode private
    Merci pour vos réponses
    En faite ,si je test ma requête en rajoutant "trucmuch" ou rien directement
    dans la requête SQL aucun résultat n'est retourné et heuresement
    Le soucis et quand je mets trucmuch directement dans l'url dans le navigateur voir si j'ecris vu l'urlrewritting trucmuch.htm il m'est retourné le contenu de la derniere rubrique.
    le soucis doit venir de là $page=$_GET['page'];
    il faut que je la passe à la moulinette d'une fonction style trim pour voir
    A noter $menu .="<a href='$pageUrl.htm'>$page</a><br>";
    $pageUrl et récupérer de la méme maniere que index.php?page=$page
    ça me permet de simuler une page htm et comme c'est en minuscule et que le nom de page est en majuscule ex index.php?page=CONTENU
    ça rend invalide les liens du modéle index.php?page=CONTENU
    Pour des raisons de sécurité je ne veux pas qu'on puisse voir que c'est du php(certes on peut toujours le deviner)
    Mais pourquoi ce bug quand je mets trucmuch directement dans l'url
    on dirait que je fais une injection sql s'en m'en rendre compte

  5. #5
    Expert confirmé
    Avatar de N1bus
    Homme Profil pro
    Dev. Web & OpenERP
    Inscrit en
    Janvier 2003
    Messages
    2 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Dev. Web & OpenERP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 827
    Par défaut
    Aucune importance, si tu testes avec mysql_num_rows() et que tu rediriges vers la page d'accueil en cas d'erreur , on pourra écrire ce qu'on voudra dans l'url, tu es au moins sûr que ça redirige en cas d'erreur.

    sur mes scripts , je fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    switch($page){  // en fait : $_GET['page']
     
    case "produit" : ....... break;
    case "machin" : ..... break;
    case "etcoetera" : ..... break;
    default : //ici la redirection vers index.php en cas d'erreur : 
              header("Location: index.php"); exit;
    }

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 327
    Par défaut
    oui c'est une solution aussi
    ce switch en faite correspond à mon tableau types
    pour mysql_num_rows() tu as raison je me le suis dit aprés avoir posté
    il y a deja d'ailleurs une méthode privé qui chiffre le nombre de réponse avec mysql_num_rows()
    or effectivement vu que si on saisi n'importe quoi on atterit sur la page contact une base est un tableau et donc ça retourne la derniere clés
    mysql_num_rows() doit toujours retourner 1 résultat donc c'est pas fiable
    Mais moi ce qui m'interresse c'est de corriger le bug de départ
    tout en ajoutant un switch ou mon systéme
    avoir un bug dont je ne saisi pas l'origine n'est pas mon truc
    pour des raisons de sécurité et aussi j'aime pas un code qui part en vrille
    quand j'ai le temps je m'occupe de ce bug
    ça ne peut etre qu'un truc simple je vous tiens au courant ,mais si quelqu'un a une idée je suis preneur Merci
    Merci N1bus

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

Discussions similaires

  1. Problème sur mysql 5
    Par lexou36 dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 05/10/2007, 22h03
  2. Réponses: 6
    Dernier message: 31/03/2006, 17h05
  3. Problème sur requête insert mysql
    Par kcizth dans le forum Requêtes
    Réponses: 5
    Dernier message: 04/02/2006, 18h37
  4. Problème d'encodage sur MySql 4.1
    Par Blanchet dans le forum Outils
    Réponses: 1
    Dernier message: 04/12/2005, 04h53
  5. Problèmes avec INTERSECT sur MYSQL
    Par zarbydigital dans le forum Requêtes
    Réponses: 1
    Dernier message: 27/09/2005, 13h18

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