Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/12/2010, 16h11   #1
Invité de passage
 
Inscription : décembre 2010
Messages : 4
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 4
Points : 1
Points : 1
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.
wouawman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2010, 16h51   #2
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 817
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

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

Informations forums :
Inscription : mars 2005
Messages : 2 817
Points : 3 442
Points : 3 442
Peut-être la requête SQL à laquelle il faudrait rajouter des ' autour de l'argument envoyé.

Code :
1
2
3
SELECT champs
FROM table
WHERE id = $id
A remplacer par :

Code :
1
2
3
SELECT champs
FROM table
WHERE id = '$id'
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2010, 21h25   #3
Invité de passage
 
Inscription : décembre 2010
Messages : 4
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 4
Points : 1
Points : 1
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 :
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 :
1
2
3
4
5
	if (isset($_GET['id_page'])) {
		$_ENV['id_page'] = intval($_GET['id_page']);
	} else {
		$_ENV['id_page'] = $id_page_accueil;
	}
wouawman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2010, 22h52   #4
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 817
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

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

Informations forums :
Inscription : mars 2005
Messages : 2 817
Points : 3 442
Points : 3 442
Citation:
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.
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2010, 01h31   #5
Membre actif
 
Tobbi Filteau
Inscription : mai 2010
Messages : 176
Détails du profil
Informations personnelles :
Nom : Tobbi Filteau

Informations forums :
Inscription : mai 2010
Messages : 176
Points : 177
Points : 177
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 :
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 :
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 :
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 :
1
2
3
4
 
SELECT champs
FROM table
WHERE id = "accueil"
Donc, si on veut transposer le tout dans ton code, ces lignes:

Code :
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 :
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
osuwariboy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 00h49   #6
Invité de passage
 
Inscription : décembre 2010
Messages : 4
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 4
Points : 1
Points : 1
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 :
$id_page_accueil ='accueil';
Code :
$_ENV['id_page'] = intval($_GET['id_page']);
est devenu
Code :
$_ENV['id_page'] = $_GET['id_page'];
Dans mes fonctions_php :
Code :
$strSQL = 'SELECT * FROM pages WHERE Id_page = '.$_ENV['id_page'];
est devenu
Code :
$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é?
wouawman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 06h14   #7
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
En effet intval() garantissait les données.
Maintenant tu peux utiliser mysql_real_escape_string()
Code :
$strSQL = 'SELECT * FROM pages WHERE Id_Page ="'.mysql_real_escape_string($_ENV['id_page']).'"';
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 20h12   #8
Invité de passage
 
Inscription : décembre 2010
Messages : 4
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 4
Points : 1
Points : 1
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!
wouawman est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h11.


 
 
 
 
Partenaires

Hébergement Web