MonWeb Posté 6 Septembre 2008 Posté 6 Septembre 2008 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 -MultiviewsRewriteEngine onRewriteRule ^(.*)\.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
Dan Posté 6 Septembre 2008 Posté 6 Septembre 2008 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 !
MonWeb Posté 6 Septembre 2008 Auteur Posté 6 Septembre 2008 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
Dan Posté 6 Septembre 2008 Posté 6 Septembre 2008 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 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... Dan
MonWeb Posté 6 Septembre 2008 Auteur Posté 6 Septembre 2008 (modifié) 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é 6 Septembre 2008 par thierryfrancois
MonWeb Posté 6 Septembre 2008 Auteur Posté 6 Septembre 2008 Si ça ne vient pas de l'url rewriting alors retour à la case depart ??? avec mon post non résolu dans la rubrique Php (on trouve plus d'info sur mon code qui bloque avec les lettres) ou je continu ici ?
Dan Posté 7 Septembre 2008 Posté 7 Septembre 2008 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 ! 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 :!:
MonWeb Posté 7 Septembre 2008 Auteur Posté 7 Septembre 2008 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 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 <?phpif($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
Dan Posté 8 Septembre 2008 Posté 8 Septembre 2008 Ta variable $id au début des deux fichiers, elle tombe d'où ? Du plafond ? Tu signales que c'est le code "complet" ....
MonWeb Posté 24 Septembre 2008 Auteur Posté 24 Septembre 2008 (modifié) 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 bonne journée Modifié 25 Septembre 2008 par thierryfrancois
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant