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 :

Chaînes de caractères dans la barre d'adresse de type index.php?id_page=titre au lieu de chiffres [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 5
    Par défaut Chaînes de caractères dans la barre d'adresse de type index.php?id_page=titre au lieu de chiffres
    Bonjour,
    J'ai mis en pratique le tutoriel suivant :
    http://pbnaigeon.developpez.com/tuto...ite-dynamique/

    Quand on le met en pratique on obtient des adresses de pages web du type :
    http://monsite.net/index.php?page=10

    Moi je préférerais si c'est possible des adresses plus claires du type :
    http://monsite.net/index.php?page=titre

    Je veux afficher le titre de la page plutôt qu'un numéro id qui n'a pas de réelle signification pour moi.

    Dans le champ id_page de la base de données j'ai donc changé tous les numéros de pages par un simple mot pour chaque page sans accent du type "contact" ou encore "bienvenue" à la place de 1, 2 , 3...

    Le problème est que le site ne fonctionne plus. Pourtant je ne comprends pas dans ce tutoriel ce qui m'oblige à utiliser des nombres et non pas des chaînes de caractères.

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 313
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 313
    Billets dans le blog
    17
    Par défaut
    Peut-être la requête SQL à laquelle il faudrait rajouter des ' autour de l'argument envoyé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT champs
    FROM table
    WHERE id = $id
    A remplacer par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT champs
    FROM table
    WHERE id = '$id'

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 5
    Par défaut
    Je n'arrive pas à mettre en pratique ce que tu dis parce que la forme de mes requêtes sql est différente de ton exemple :

    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
    function affiche_menu($idpage) {
    	// Sélectionne toutes les pages filles de la page en cours
    	$strSQL = 'SELECT `Id_page`, `Titre` FROM `pages` WHERE `Id_parent` = '.$idpage;
    	$resultat = requete_SQL($strSQL);
    	// Si la page n'a pas de page fille, alors on modifie la requète pour obtenir ses pages soeurs.
    	if (mysql_num_rows($resultat) == 0) {
    		$strSQL = 'SELECT `Id_page`, `Titre` FROM `pages` WHERE `Id_parent` = '.$_ENV['id_parent'];
    		$resultat = requete_SQL($strSQL);
    	}
    	$menu_retour = '<ul>';
    	while ($tabl_result = mysql_fetch_array($resultat)) {
    		$menu_retour .= '<li>';
    		$menu_retour .= '<a href="index.php?id_page='.$tabl_result['Id_page'].'">';
    		$menu_retour .= $tabl_result['Titre'];
    		$menu_retour .= '</a>';
    		$menu_retour .= '</li>';
    	}
    	$menu_retour .= '</ul>';
    	return $menu_retour;
    }
    Ce bout de code est censé afficher le menu. Il fonctionne tant que l'id de la page est un nombre mais ne marche plus quand c'est une chaîne de caractère. La variable id_page donne le résultat 0 au lieu de "accueil" par exemple.

    Curieusement le corps de la page, lui s'affiche correctement.

    Peut-être que cet autre bout de code explique pourquoi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	if (isset($_GET['id_page'])) {
    		$_ENV['id_page'] = intval($_GET['id_page']);
    	} else {
    		$_ENV['id_page'] = $id_page_accueil;
    	}

  4. #4
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 313
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 313
    Billets dans le blog
    17
    Par défaut
    Je n'arrive pas à mettre en pratique ce que tu dis parce que la forme de mes requêtes sql est différente de ton exemple
    Mises à part les ` (inutiles) c'est exactement la même chose
    Rajoute des ' autour des paramètres envoyés à la requête sinon la chaîne ne passera pas.

  5. #5
    Membre expérimenté
    Inscrit en
    Mai 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 177
    Par défaut
    Je suis d'accord avec Seb. Le problème vient probablement de ta requête SQL. Penses-y bien, à l'origine, tu avais une requête du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT champs
    FROM table
    WHERE id = $id
    où la variable $id était un chiffre, donc en bout de ligne, si on remplace ta variable par une valeur quelconque, on obtient:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT champs
    FROM table
    WHERE id = 4
    Ce qui est du SQL valide. Maintenant que tes ID sont des chaînes de caractère, en remplaçant $id par une valeur on obtient:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT champs
    FROM table
    WHERE id = accueil
    Ce qui n'est pas du SQL valide, car dans le cas d'une chaîne de caractères, il faut encadrer la valeur par des apostrophes ou des guillemets comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT champs
    FROM table
    WHERE id = "accueil"
    Donc, si on veut transposer le tout dans ton code, ces lignes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $strSQL = 'SELECT `Id_page`, `Titre` FROM `pages` WHERE `Id_parent` = '.$idpage;
    $strSQL = 'SELECT `Id_page`, `Titre` FROM `pages` WHERE `Id_parent` = '.$_ENV['id_parent'];
    Devraient devenir:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $strSQL = 'SELECT Id_page, Titre FROM pages WHERE Id_parent = "'.$idpage . '"';
    $strSQL = 'SELECT Id_page, Titre FROM pages WHERE Id_parent = "'.$_ENV['id_parent'] . '"';
    Donc voilà, en espérant que cela puisse t'aider.

    Bonne chance

    Osu

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 5
    Par défaut
    Merci à vous deux pour ce coup de pouce.
    Pour le cas où d'autres personnes auraient les mêmes difficultés pour ce tutoriel, pour que ça fonctionne j'ai dû aussi changer quelques détails dans index.php :
    est devenu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $id_page_accueil ='accueil';
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_ENV['id_page'] = intval($_GET['id_page']);
    est devenu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_ENV['id_page'] = $_GET['id_page'];
    Dans mes fonctions_php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $strSQL = 'SELECT * FROM pages WHERE Id_page = '.$_ENV['id_page'];
    est devenu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $strSQL = 'SELECT * FROM pages WHERE Id_Page ="'.$_ENV['id_page'].'"';
    Par contre je me demandais si en donnant la possibilité à quelqu'un d'écrire des caractères alphanumérique dans la barre d'adresse je n'avais pas créé une faille de sécurité?

  7. #7
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    En effet intval() garantissait les données.
    Maintenant tu peux utiliser mysql_real_escape_string()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $strSQL = 'SELECT * FROM pages WHERE Id_Page ="'.mysql_real_escape_string($_ENV['id_page']).'"';
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 5
    Par défaut
    Merci pour l'info.
    Je vais potasser un peu un paragraphe sur
    mysql_real_escape_string() pour comprendre tout ça

    Super forum efficace et tout et tout. Vous êtes des boss!

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

Discussions similaires

  1. Une seule chaîne de caractères dans l'adresse au lieu de deux
    Par mihelicjm dans le forum APIs Google
    Réponses: 12
    Dernier message: 31/10/2014, 17h02
  2. changer l'icone d'une page dans la barre d'adresse/bookmark
    Par Draganthyr dans le forum Webdesign & Ergonomie
    Réponses: 2
    Dernier message: 10/06/2005, 16h03
  3. Reprendre une date dans la barre d'adresse.
    Par kmayoyota dans le forum ASP
    Réponses: 32
    Dernier message: 03/09/2004, 08h46
  4. [jsp][jetty]recuperer l'url dans la barre d'adresse
    Par maxvador dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 07/06/2004, 14h33
  5. Réponses: 3
    Dernier message: 09/05/2002, 01h39

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