url rewriting, changer "%20" en: " -"

Eléphanteau du PHP | 19 Messages

07 mars 2008, 13:30

Bonjour, désolé si certain ont l'mpression d'avoir déja vu ce post, en fai il est diferent.
Steph29 m'a déja resolu ma premiere partie du probleme, mais je me rend compte qu'une autre partie est encore là.
En fait, ce script me permet de mettre en place des liens sur mon index representant des villes.
les liens apparaissent donc comme par exemple:

Code : Tout sélectionner

NICE, CANNES, AIX EN PROVENCE
, nikel, mais lorsque le nom aparait dans mon url, pour nice, cannes, c'est ok, mais

Code : Tout sélectionner

AIX%20EN%20PROVENCE
y'a un tit soucis, j'aurais voulu qu'il sorte comme ça: AIX-EN-PROVENCE , et comme je l'ai dit dans l'autre post, je suis un peu debutant et sais pas trop comment faire :oops: :shock: :oops:
Je demande humblement encore une fois un tit coup de main.
<?php 
$sql = ("SELECT DISTINCT ville FROM livraison_fleurs ORDER BY ville"); 
$result = mysql_query($sql); 

echo '<ul>'; 

while ($row = mysql_fetch_assoc($result)) { 
echo '<li><a href="article-'.$row['ville'].'.html">'.$row['ville'].'</li>';   
} 

echo '</ul>'; 
?>

Eléphant du PHP | 175 Messages

07 mars 2008, 13:37

le plus simple aurait ete de continuer a la suite de l'autre post ;)


soit on formate le lein au format url (traitera tout les caracteres)
echo '<li><a href="article-'.urlencode($row['ville']).'.html">'.$row['ville'].'</li>';
soit on remplace specifiquement les espaces
echo '<li><a href="article-'.preg_replace("/ /","-",$row['ville']).'.html">'.$row['ville'].'</li>';
mais le plus simple ce serait de balader des identifiants plutot que le nom des villes
echo '<li><a href="article-'.$row['id_ville'].'.html">'.$row['ville'].'</li>';
les requetes sont plus optimisees et moins de risque d'erreur.
As tu un identifiant unique sur tes villes?

Edit: désolé chef :twisted:
Modifié en dernier par steph29 le 07 mars 2008, 13:49, modifié 1 fois.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

07 mars 2008, 13:40

Modération :
patrick777 et steph29, afin d'améliorer la lisibilité de vos messages,
pensez à utiliser les balises [code] ou [php] (selon le langage utilisé).

Elles sont disponibles au-dessus de la zone de saisie de ton message
lorsque tu postes un nouveau message.

Des indications sont disponibles sur la manière de mettre en forme vos messages dans la FAQ
;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 19 Messages

07 mars 2008, 16:06

C'est vrai que c'etait plus simple à la suite :) mais vu que le sujet était résolu, je pensais
que probablement ça ne fonctionerait pas.
Merci encore pour ton aide.
Avec ton premier code, ça marche mais ça remplace les "%20" en "+", et je prefere pas

Avec ton deuxieme code, ça remplace "%20" par "-" mais ça ne m'affiche pas sur la page
la liste de fleuristes que cela devrait m'afficher ( nom, adresse' code postal, ville)

et ton troisieme code,cela m'affiche "article-" dans l'url mais pas la ville à la suite, et pasla liste des fleuristes sur la page.

je n'ai pas d'identifiant unique pour mes villes, elles ont un identifiant, mais meme si ce sont les memes villes, l'identifiant est diferent à chaque fois.
et je ne pense pas etre capable de changer ça!

:roll:

ViPHP
ViPHP | 1996 Messages

08 mars 2008, 03:36

Et si tu les remplace avant de les cliquer : je m'explique :
while ($row = mysql_fetch_assoc($result)) {
echo '<li><a href="article-'.str_replace(" ","-",$row['ville']).'.html">'.$row['ville'].'</li>';
}

echo '</ul>';
?>
La fonction str_replace va te remplacer tout tes espaces par le"-" (un peu comme le preg_replace). Attention tous les espaces sont concernés !

Tu parles aussi de
Avec ton deuxieme code, ça remplace "%20" par "-" mais ça ne m'affiche pas sur la page
la liste de fleuristes que cela devrait m'afficher ( nom, adresse' code postal, ville)
Ca vient d'où ?
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Eléphanteau du PHP | 19 Messages

08 mars 2008, 15:07

Citation:
Avec ton deuxieme code, ça remplace "%20" par "-" mais ça ne m'affiche pas sur la page
la liste de fleuristes que cela devrait m'afficher ( nom, adresse' code postal, ville)
Ca vient d'où ?
En fait, sur ma page fleuristes, j'ai mis ce code pour recuperer les adresses de mes fleuristes presents dans ma bdd, alors, je pense que je dois changer quelque chose, parceque avec de villes à un seule mot, forcément ça me les récupere, mais avec des noms de villes à plusieurs mots, du fait que des "-" sont présents entre les mots, apparement ça ne reconnait plus le nom des villes, et donc, ça ne me sort plus les adresses.

Je ne sais pas quoi faire! :roll:
<?php 
$ville = $_GET['ville'];  

$sql = ("SELECT nom,adresse,code_postal,ville FROM livraison_fleurs WHERE ville='$ville' ORDER BY nom"); 
$result = mysql_query($sql); 

while ($row = mysql_fetch_assoc($result)) { 
echo '<ul>'; 
echo '<li>'.$row['nom'].'</li>'; 
echo '<li>'.$row['adresse'].'</li>'; 
echo '<li>'.$row['code_postal'].'</li>'; 
echo '<li>'.$row['ville'].'</li>'; 
echo '<li>'.$row['mail'].'</li>'; 
echo '</ul>'; 
} 
?>

Merci pour ton code.
Si je pouvais trouver comment faire pour le deuxieme soucis, ça serait bien, mais je n'y arriverais pas tout seul, un tit coup de main ou de pied, ne serait pas de refus.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

08 mars 2008, 15:12

Modération :
patrick777, tu as déjà été averti par Ryle concernant l'utilisation des balises [code] et [php].

Il serait domage que nous soyons obligé de fermer ce message parce que tu ne prends pas garde aux avertissements, surtout parce que tu es en cours de résolution de ton problème.

Merci de prendre cet avertissement comme le dernier avant fermeture.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

ViPHP
ViPHP | 1996 Messages

08 mars 2008, 16:12

OkOk je viens de comprendre. Bah tu les enlèves les "-" c'est tout...

Essaye :
<?php 
$ville = str_replace("-"," ",$_GET['ville']);  

//si les magic quotes ne sont pas activés :
//va voir sur http://fr.php.net/addslashes
$ville = addslashes($ville); //par prudence comme cela vient de l'URL

$sql = ("SELECT nom,adresse,code_postal,ville FROM livraison_fleurs WHERE ville='$ville' ORDER BY nom"); 
$result = mysql_query($sql); 

while ($row = mysql_fetch_assoc($result)) { 
echo '<ul>'; 
echo '<li>'.$row['nom'].'</li>'; 
echo '<li>'.$row['adresse'].'</li>'; 
echo '<li>'.$row['code_postal'].'</li>'; 
echo '<li>'.$row['ville'].'</li>'; 
echo '<li>'.$row['mail'].'</li>'; 
echo '</ul>'; 
} 
?>
Dans ce cas : même chose fais attention toute ville avec un "-" à l'origine sera remplacé par un espace. Je pense qu'il serait plus judicieux de mettre un underscore "_" (tiret bas) au lieu d'un tiret haut. Ainsi, au moins tu es sûr qu'aucune ville ne pourra être affectée si elle comprend déjà un tiret dans son nom d'origine.
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Eléphanteau du PHP | 19 Messages

08 mars 2008, 16:55

Merci, ça marche nickel :D :D :D
ça a l'ai tellement simple pour toi :P j'ai tellement à apprendre sur PHP, BDD, .htaccess, je ne sais pas si je vais m'en sortir un jour!

Désolé messieurs les modérateurs...

Derniere chose qui me pose soucis, je ne m'en était pas rendu compte, maintenant j'ai le meme soucis avec les accents!! par exemple, pour un lien pointant de ma page d'index vers ma page fleuristes, les villes sont en majuscules,

donc par exemple, pour la ville de TRIGUÈRES

L'url s'affiche avec la bonne ville, nikel http://www.monsite.com/fleuriste-TRIGUèRE.html
mais là dans la page ou j'ai placé mon code
<?php echo $_GET['ville']; ?>
la ville s'affiche comme ça : TRIGUÈRES

et là ou j'ai ma liste de fleuristes normalement sous le nouveau code ;) ci dessous rien ne s'affiche,
par contre nikel avec les tirets.

<?php  
$ville = str_replace("-"," ",$_GET['ville']);   

$sql = ("SELECT nom,adresse,code_postal,ville FROM livraison_fleurs WHERE ville='$ville' ORDER BY nom");  
$result = mysql_query($sql);  

while ($row = mysql_fetch_assoc($result)) {  
echo '<ul>';  
echo '<li>'.$row['nom'].'</li>';  
echo '<li>'.$row['adresse'].'</li>';  
echo '<li>'.$row['code_postal'].'</li>';  
echo '<li>'.$row['ville'].'</li>';  
echo '<li>'.$row['mail'].'</li>';  
echo '</ul>';  
}  
?>
:idea: Je sais, je ne suis pas une lumiere...
:roll:

Mammouth du PHP | 959 Messages

09 mars 2008, 16:35

tu peux peut-être utiliser url_encode() et url_decode()

regarde sur la doc ;)

ViPHP
ViPHP | 1996 Messages

10 mars 2008, 16:22

Alors soit tu fais comme chrislabricole soit tu t'abstiens des accents dans les nom de ville (comme ils sont écris en majuscule). Tu peux utiliser pour cela toujours str_replace :
$ville = str_replace("é","e",$ville);
Tiens voici une petite fonction que j'utilise souvent que j'ai créé à partir des données trouvées sur ce forum :
function remplace_caractere_accentue ($chaine) {

$remplacement = array ( "A","A","A","A","A","A","C","E","E","E","E","I","I","I","I","N","O","O","O","O","O",
                        "U","U","U","U","Y","a","a","a","a","a","a","c","e","e","e","e","i","i","i","i","n",
                        "o","o","o","o","o","u","u","u","u","y","y");
$accentue     = array ( "À","Á","Â","Ã","Ä","Å","Ç","È","É","Ê","Ë","Ì","Í","Î","Ï","Ñ","Ò","Ó","Ô","Õ","Ö",
                        "Ù","Ú","Û","Ü","Ý","à","á","â","ã","ä","å","ç","è","é","ê","ë","ì","í","î","ï","ñ",
                        "ò","ó","ô","õ","ö","ù","ú","û","ü","ý","ÿ");

$chaine = str_replace($accentue, $remplacement,$chaine);

return $chaine;

}
Ainsi cela te donnera :

$ville = remplace_caractere_accentue ($ville);
$ville = str_replace ("-"," ",$ville);
Et normalement cela devrait marcher... mais en modifiant la requête sql par :

Code : Tout sélectionner

WHERE ville LIKE '%$ville%'
EDIT : cette méthode est simple mais pas la plus économique en travaille de calcul :wink:

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Eléphanteau du PHP | 19 Messages

11 mars 2008, 22:03

Merci les zouzous, vous etes des tueurs, je n'ai pas le temps de bosser sur le net jusqu'a samedi je crois, juste le temps de regarder mes mails et d'aller me coucher...

Je crois que je vais changer directement les lettres avec accents directement dans ma bdd, ça sera peut etre moins gourmand en calcul.

En tout cas, je vais essayer tout ça des que j'ai le temps avec vos codes et je vous tiendrais au courant.
Et pis apres, je mettrais un flag comme etant resolu.

Encore merci à vous pour votre aide :D :D :D :D miri mirci mirci

Eléphanteau du PHP | 19 Messages

29 mars 2008, 20:01

Salut,

Je suis en Pologne en ce moment, je n ai donc pas eu trop l occasion de travailler sur le net, neamoins, j ai change les caracteres dans ma bdd, don tout est ok.
Je vous remercie beaucoup de votre aide.


Patrick

ViPHP
ViPHP | 1996 Messages

29 mars 2008, 20:53

En plus les accents polonais c'est pas du facile 8-)
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr