Aller au contenu

url rewriting $fonction refuse les lettres


Sujets conseillés

Bonjour

J'ai commencé par chercher le problème dans mes scripts et dans ma base mais sans résultat...

Je constate que quand j'utilise $fonction pour obtenir des infos dans ma base, ça ne fonctionne pas si il y a des lettres et ça fonctionne si il y des chiffres.

exemple en utilisant exactement les même scripts :

$toto appelle "machin" qui se trouve dans le champ d'une table ça fonctionne pas.

si je remplace dans ce même champ d'une table "machin" par "1234567" comme ci dessous ça fonctionne !

$toto appelle "1234567" dans le champs d'une table et ça fonctionne !

Dans mon fichier htaccess j'ai ça

Options -Multiviews
RewriteEngine on
RewriteRule ^(.*)\.html$ index.php?mpage=$1 [L]
RewriteRule ^(.*)/(.*)-([0-9]+)\.htm$ index.php?action=$1&url=$2&id=$3 [L]
RewriteRule ^(.*)/(.*)\.htm$ index.php?action=$1&url=$2 [L]

N'ayant pas de code de réecriture pour les lettres dans mon htaccess du genre ([0-9]+)-([-a-zA-Z0-9_]+) je me demande si la solution à mon problème n'est pas par la.....

Est ce que quelqu'un pourrait proposer un code de réecriture ?

Merci d'avance

Lien vers le commentaire
Partager sur d’autres sites

Je ne comprends rien à ton post, et pourtant le l'ai lu trois fois.

Que veux-tu dire par "$fonction" ??

Que veux-tu dire par "$toto appelle "machin" qui se trouve dans le champ d'une table ça fonctionne pas." ??

Est-ce que "$toto" est une fonction ? Est-ce que "machin" est un argument de cette fonction ?

Et pour ta réécriture, les lettres sont prises en compte par le (.*) ... le . signifiant "n'importe quel caractère"

Difficile de proposer de nouvelles règles sans savoir ce qu'il faut réécrire !

Lien vers le commentaire
Partager sur d’autres sites

Bonjour Dan,

Oups désolé si j'étais pas très clair

Pour être plus clair:

$result = $mysql->query('SELECT ville,www,codepostal,nom_dept,numero_dept FROM mairie WHERE ville='.$id);

Avec WHERE ville j'appelle la ville "123456" ça marche

Avec WHERE ville j'appelle "Marseille" ça marche pas !

C'est pour cette raison que je pense avoir un problème avec les lettres dans l'url rewriting puisque ça marche avec les chiffres

Je suis clair ? ou on comprend toujours rien :)

Lien vers le commentaire
Partager sur d’autres sites

Dans tes requêtes mysql, il faut mettre des quotes autour des chaines de caractères, or tu n'en as pas...

C'est la syntaxe des SELECT, UPDATE, INSERT ... et cela n'a rien à voir avec la réécriture :P

Donc une syntaxe telle que

SELECT ville,www,codepostal,nom_dept,numero_dept FROM mairie WHERE ville=123

est correcte. C'et pour cette raison que ça marche dans ton exemple.

Et si tu veux rechercher marseille tu devras l'écrire comme ceci

SELECT ville,www,codepostal,nom_dept,numero_dept FROM mairie WHERE ville='marseille'

idem si tu dois rechercher 123 comme chaîne de caractères et non comme entier.

SELECT ville,www,codepostal,nom_dept,numero_dept FROM mairie WHERE ville='123'

Il te manque les quotes dans ton exemple... :P

Dan

Lien vers le commentaire
Partager sur d’autres sites

J'aurai vraiment aimé que ce soit ça :)

Mais

$result = $mysql->query('SELECT ville,www,codepostal,nom_dept,numero_dept FROM mairie WHERE ville='.$id');

Provoque une erreur :(

et mon code de départ ne fonctionne que avec des chiffres !!

$result = $mysql->query('SELECT ville,www,codepostal,nom_dept,numero_dept FROM mairie WHERE ville='.$id);

Je me suis peut etre pas bien expliqué voici un peu plus de code

if($id) {

$id = addslashes($id);
//donne le result de la ville mais ne fonctionne que avec des chiffres et pas avec des lettres
$result = $mysql->query('SELECT ville,www,codepostal,nom_dept,numero_dept FROM mairie WHERE ville='$id);
if($result) {
list($ville,$www,$cp,$nom_dept,$numero_dept)=mysql_fetch_row($result);
//donne le resultat de la region
$result2 = $mysql->query('SELECT region FROM cartedefrance WHERE numero_dept =\''.$numero_dept.'\'');
if($result2) {
list($region)=mysql_fetch_row($result2);
}
//donne le titre de la page mairie et .$ville affiche le nom de la ville et code postal après Mairie//
$page->settitle('Mairie '.$ville.' '.$cp.' ');

Modifié par thierryfrancois
Lien vers le commentaire
Partager sur d’autres sites

C'est tout simplement un problème de syntaxe :!:

Essaye ceci :

$result = $mysql->query("SELECT ville,www,codepostal,nom_dept,numero_dept FROM mairie WHERE ville=' ".$id." ' ");

J'ai laissé les espaces autour des " et ' pour la clarté, mais supprime-les ! :P

Cela doit donner ceci que tu peux copier/coller :

$result = $mysql->query("SELECT ville,www,codepostal,nom_dept,numero_dept FROM mairie WHERE ville='".$id."'");

Si tu te mélanges les pinceaux avec les quotes, tu peux toujours t'assurer de la syntaxe correcte de ton SELECT en remplaçant $mysql->query() par print.

print "SELECT ville,www,codepostal,nom_dept,numero_dept FROM mairie WHERE ville='".$id."'";

Affichera bien, si $id="marseille"

SELECT ville,www,codepostal,nom_dept,numero_dept FROM mairie WHERE ville='marseille'

donc avec les quotes autour de la valeur de ta variable !

Et là ce sera correct :!:

Lien vers le commentaire
Partager sur d’autres sites

Dan,

J'ai modifié les quotes mais je n'obtiens toujours pas de résultat :( sauf quand je remplace dans ma base "marseille" par "123456" avec des chiffres ça marche mais pas avec des lettres. Comme je ne peux pas remplacer le nom de toutes les villes par des chiffres il faut absolument trouver pourquoi ;)

J'ai bien cherché avant de poster encore sur le forum....je ne comprends pas pourquoi je peux faire appel uniquement à des chiffres dans la base :mad2:

Pour plus d'infos voici le code complet de mes 2 pages : mairies.php et mairie.php Merci d'avance.

mairies.php= Page qui donne la liste des mairies que se trouve dans un département

mairie.php = page qui affiche les informations d'une seule ville lorsqu'on a cliqué sur une ville dans la liste des mairies de la page mairies.php

code de la page mairies.php

<?php
$page->settitle('Toutes les Mairies de votre département');
//affiche dans la page mairies.php le numero du département//
$pid = $id;
if($pid) {
// Corse //
if($id=='2a' || $id=='2b') {$pid=$id;}
else {$pid=($id);}
if($pid) {
//affiche dans page mairies.php le numero du departement
$result = $mysql->query("SELECT numero_dept, nom_dept, region, adresse, telephone, fax, email, www FROM cartedefrance WHERE numero_dept='".$pid."'");
if($result && mysql_num_rows($result)>0) {
$infos = mysql_fetch_array($result);
//donne le titre de la page mairies.php
$page->settitle('Mairies '.$infos['nom_dept'].' '.str_pad($infos['numero_dept'],2,'0',STR_PAD_LEFT)); }}
//affiche la liste des villes dans la page mairies
$dpt = addslashes($dpt);
$result = $mysql->query("SELECT id,ville,www,codepostal FROM mairie WHERE numero_dept='".$pid."'ORDER BY ville");
if($result) {
$page->addhtml('<h2>Liste des mairies du département '.$infos['nom_dept'].' ('.str_pad($infos['numero_dept'],2,'0',STR_PAD_LEFT).')</h2>');
$page->addhtml('<h3>Mairies : '.$infos['nom_dept'].' ('.str_pad($infos['numero_dept'],2,'0',STR_PAD_LEFT).')</h3>');
$page->addhtml('<div id="informations"><ul>');
//appelle dans la base les infos qui s'affiche dans la liste des mairies sur la page mairies.php
while(list($id,$ville,$www,$cp)=mysql_fetch_row($result)) {
//affiche les villes dans la liste des villes de la page mairies.php mais aussi url rewrite pour la page mairie.php pour le résultat sur la page mairie avec une seule ville
$page->addhtml('<li><a href="'.$page->path.'mairie/mairie-'.$ville.'.htm">'.$ville.'</a> ('.$cp.')</li>'); }
$page->addhtml('</ul></div>');
}}
?>

Code de la page mairie

<?php
if($id) {$id = addslashes($id);
//donne le resultat de la ville à voir
$result = $mysql->query("SELECT id,ville,www,codepostal,nom_dept,numero_dept FROM mairie WHERE ville='".$id."'");
if($result) {list($id,$ville,$www,$cp,$nom_dept,$numero_dept)=mysql_fetch_row($result);
//donne le resultat de la region et passe par cartedefrance pour trouver le departement qui correspond à la région
$result2 = $mysql->query("SELECT region FROM cartedefrance WHERE numero_dept ='".$numero_dept."'");
if($result2) { list($region)=mysql_fetch_row($result2);}
//donne le titre de la page mairie.php
$page->settitle('Mairie '.$ville.' '.$cp.' ');
//affiche les infos dans la page mairie.php
$page->addhtml('<div id="titre">');
$page->addhtml('<h2>Mairie : '.$ville.'</h2>');
$page->addhtml('<h3>Ville de : '.$ville.'</h3>');
$page->addhtml('</div>');
$page->addhtml('<div id="informations"><ul>');
$page->addhtml('<li>Code postal de la mairie: '.$cp.'</li>');
$page->addhtml('<li>Visitez le site Internet de la mairie : <a href="'.$www.'">'.$www.'</a></li>');
$page->addhtml('<li>Cette Mairie est dans la region: <a href="'.$page->path.'conseil-regional/conseil-regional-'.urlencode($region).'.htm"> '.$region.'</a></li>');
$page->addhtml('</ul></div>');

}}
?>

Je me suis acharné sur un problème de syntaxe pour suivre tes recommandations mais j'ai pas trouvé un truc faux dans mon code

Lien vers le commentaire
Partager sur d’autres sites

  • 3 semaines plus tard...

Après avoir cherché inutilement partout et notamment dans ces 2 très long posts

1-Mysql

2-Php

La solution est bien dans l'url rewriting qui ne donnait aucun résultat avec des lettres

Merci a tous ceux qui m'ont aidé et voici la solution pour ceux qui auront un jour le même problème

Au départ j'avais cette ligne dans mon htaccess:

RewriteRule ^(.*)/(.*)-([0-9]+)\.htm$ index.php?action=$1&url=$2&id=$3 [L]

L'ouverture de mon post était :

N'ayant pas de code de réecriture pour les lettres dans mon htaccess du genre ([0-9]+)-([-a-zA-Z0-9_]+) je me demande si la solution à mon problème n'est pas par la.....

Est ce que quelqu'un pourrait proposer un code de réecriture ?

Finalement en supprimant cette ligne

RewriteRule ^(.*)/(.*)-([0-9]+)\.htm$ index.php?action=$1&url=$2&id=$3 [L]

et en remplaçant par :

RewriteRule ^(.*)/(.*)-([a-zA-Z_-]+)\.htm$ index.php?action=$1&url=$2&id=$3 [L]

Tout fonctionne parfaitement :whistling:

bonne journée

Modifié par thierryfrancois
Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...