MonWeb Posté 5 Septembre 2008 Posté 5 Septembre 2008 Bonjour, J'ai un script qui me pose un problème /* Corse */if($id=='2a' || $id=='2b') {$pid=$id;} else {$pid=round($id);}if($pid) { $result = $mysql->query('SELECT numero_dept, nom_dept, region, adresse, telephone, fax, email, www FROM cartedefrance WHERE numero_dept = \''.$pid.'\'');} Ce script fonctionne correctement et appelle dans la base tous les départements sauf 2a et 2b !! Si j'ajoute une ligne comme ci dessous, je peux appeller le departement 2a et la base me repond correctement pour le département 2a Mais cette fonction annule la fonction pour les autres départements et je n'obtiens plus de résultat pour les autres départements. Au départ je pensais que le problème venait de la base à cause d'un appel alphanumerique, mais la ligne ci dessous confirme que ma base repond et que le problème vient du script Php. /* Corse */if($id=='2a' || $id=='2b'){$pid=$id;} else {$pid=round($id);} //j'ajoute cette ligne et la base me repond correctement mais cette fonction prime sur les autres départements if ($id='22' && $pid='2a')if($pid) { Est ce que quelqu'un a une idée pour corriger mon erreur ? pour que le script force une fonction pour le département 2a et 2b sans annuler la fonction pour le reste des départements. Merci d'avance
Portekoi Posté 5 Septembre 2008 Posté 5 Septembre 2008 Bizarre... pourquoi tu échappes les "\'" ? /* Corse */if($id=='2a' || $id=='2b') {$pid=$id;}else {$pid=round($id);}//on vérifie l'affichageecho $pid . " <-- <br>";if($pid) { $result = $mysql->query('SELECT numero_dept, nom_dept, region, adresse, telephone, fax, email, www FROM cartedefrance WHERE numero_dept = ''.$pid.'');} Test ca
MonWeb Posté 5 Septembre 2008 Auteur Posté 5 Septembre 2008 (modifié) Bizarre... pourquoi tu échappes les "\'" ? si j'enlève j'obtiens cette erreur Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in chemin.... on line 15 mais en utilisant /* Corse */if($id=='2a' || $id=='2b') {$pid=$id;}else {$pid=round($id);}//on vérifie l'affichageecho $pid . " <-- <br>";if($pid) { $result = $mysql->query('SELECT numero_dept, nom_dept, region, adresse, telephone, fax, email, www FROM cartedefrance WHERE numero_dept = \''.$pid.'\''); //on vérifie l'affichageecho $pid . " <-- <br>"; me donne la valeur 0 pour le département 2a !!!! alors qu'avec une ligne en plus comme if ($id='22' && $pid='2a') j'obtiens le bon résultat ! et la valeur du $pid ne correspond pas à 0 mais à 2a Modifié 5 Septembre 2008 par thierryfrancois
pluriels Posté 5 Septembre 2008 Posté 5 Septembre 2008 le problème ne vient-il pas plutôt de WHERE numero_dept = \''.$pid.'\''); J'aurais plutôt écrit la contrainte sur le champ nom_dept: SELECT numero_dept, nom_dept, region, adresse, telephone, fax, email, www FROM conseilgeneral WHERE nom_dept = '2a' Pour info, round('2a') renvoie 0 car 2a est une chaine de caractères
Portekoi Posté 5 Septembre 2008 Posté 5 Septembre 2008 Ah ok, tu utilises une class... Fais un : echo 'SELECT numero_dept, nom_dept, region, adresse, telephone, fax, email, www FROM conseilgeneral WHERE numero_dept = '.$pid; avant et après ta requête
MonWeb Posté 5 Septembre 2008 Auteur Posté 5 Septembre 2008 (modifié) echo 'SELECT numero_dept, nom_dept, region, adresse, telephone, fax, email, www FROM cartedefrance WHERE numero_dept = '.$pid; j'obtiens la meme chose que avec : //on vérifie l'affichageecho $pid . " <-- <br>"; C'est a dire 0 Modifié 5 Septembre 2008 par thierryfrancois
MonWeb Posté 5 Septembre 2008 Auteur Posté 5 Septembre 2008 (modifié) Pour info, round('2a') renvoie 0 car 2a est une chaine de caractères else {$pid=round($id);} si on enleve "round" les départements avec un 0 devant ne fonctionne plus et se retrouve dans la meme situation que 2a et 2b Pour simplifier j'ai enlevé =round et ajouté un 0 dans ma base devant les dpartement 1,2,3,4,5,6,7,8,9 J'ai donc maintenant else {$pid=($id);} a la place else {$pid=round($id);} et tout fonctionne sauf 2a et 2b Modifié 5 Septembre 2008 par thierryfrancois
Portekoi Posté 5 Septembre 2008 Posté 5 Septembre 2008 Justement, le round ne porte pas sur 2a ou 2b puisqu'il fait un test avant... Essaie ca : if($id=='2a' || $id=='2b') {$pid=$id;echo $pid . ' ---------- ' . $id . ' Premier choix';}else {$pid=round($id);echo $pid . ' ---------- ' . $id . ' ----------' . round($id) . ' Second choix';}
MonWeb Posté 5 Septembre 2008 Auteur Posté 5 Septembre 2008 avec ce code if($id=='2a' || $id=='2b') {$pid=$id;echo $pid . 'le pid qui est numero_dept dans ma base ' . $id . ' Premier choix';}else {$pid=($id);echo $pid . ' est le pid qui est numero_dept dans ma base ' . $id . ' est le id dans ma base' . ($id) . ' Second choix';} exemple pour le département 06 resultat = 06 est le pid qui est numero_dept dans ma base 06 et le id dans ma base est06 Second choix exemple pour le département 2a resultat= est le pid qui est numero_dept dans ma base et le id dans ma base est Second choix donc aucun resultat ! meme pas 0 puisque =round a été suprimé pour simplifier (voir mon post ci dessus)
Portekoi Posté 5 Septembre 2008 Posté 5 Septembre 2008 Donc quand $id = '2a', cela affiche quand même "Second choix?"
MonWeb Posté 5 Septembre 2008 Auteur Posté 5 Septembre 2008 (modifié) oui mais ne donne aucune valeur dans la base le id est = 21 pour numero_dept=2a dans la base le id est = 22 pour numero_dept=2a Modifié 5 Septembre 2008 par thierryfrancois
Portekoi Posté 5 Septembre 2008 Posté 5 Septembre 2008 Je comprends rien... Tu as deux fois le même ID ? De plus, $id contient quoi? 21 ou 2a ?? J'ai l'impression que ton $id contient l'ID de la base donc... comment veux tu que la requête fonctionne si $pid est égal à une chaine caractère?
MonWeb Posté 5 Septembre 2008 Auteur Posté 5 Septembre 2008 (modifié) si le script reconnait dans la base le id est = 6 pour numero_dept=06 (donc 6 est le id et 06 est $pid dans le script) dans la base le id est = 23 pour numero_dept=21 (donc 23 est le id et 21 est $pid dans le script) (Cotes d'Or) mais pas dans la base le id est = 21 pour numero_dept=2a (donc 21 est le id et 2a est $pid dans le script) dans la base le id est = 22 pour numero_dept=2b (donc 22 est le id et 2b est $pid dans le script) Pourquoi ne pas laisser le script comme ça en ajoutant une fonction qui donne une exception if id=21 alors pid==2a et pour le reste des départements $pid=($id); C'est possible ? Modifié 5 Septembre 2008 par thierryfrancois
Portekoi Posté 5 Septembre 2008 Posté 5 Septembre 2008 Et ca? /* Corse */if($id=='21'){ $pid = '2a'; } elseif ($id=='22') { $pid='2b'; } else {$pid=round($id);} if($pid) { $result = $mysql->query('SELECT numero_dept, nom_dept, region, adresse, telephone, fax, email, www FROM cartedefrance WHERE numero_dept = \''.$pid.'\''); } Mais pourquoi tu ne fais pas directement : $result = $mysql->query('SELECT numero_dept, nom_dept, region, adresse, telephone, fax, email, www FROM cartedefrance WHERE id = \''.round($id).'\''); ??
MonWeb Posté 5 Septembre 2008 Auteur Posté 5 Septembre 2008 (modifié) /* Corse */if($id=='21'){$pid = '2a';}elseif ($id=='22') {$pid='2b';}else {$pid=round($id);}if($pid) {$result = $mysql->query('SELECT numero_dept, nom_dept, region, adresse, telephone, fax, email, www FROM cartedefrance WHERE numero_dept = \''.$pid.'\'');} Ca fonctionne pour tout les départements sauf 2a et 2b il semble que elseif ($id=='22') {$pid='2b';} ne fonctionne pas Mais pourquoi tu ne fais pas directement : CODE$result = $mysql->query('SELECT numero_dept, nom_dept, region, adresse, telephone, fax, email, www FROM cartedefrance WHERE id = \''.round($id).'\''); Parce que je provoque une erreur pour le département 30 la base m'envoie les infos du département 91 parce qu'il prend id= dans la base et non plus numero_dept dans la base le id est = 30 pour numero_dept=91 (donc 30 est le id et 91 est $pid dans le script) donc je dois utiliser $result = $mysql->query('SELECT numero_dept, nom_dept, region, adresse, telephone, fax, email, www FROM cartedefrance WHERE numero_dept = \''.$pid.'\''); Modifié 5 Septembre 2008 par thierryfrancois
pluriels Posté 5 Septembre 2008 Posté 5 Septembre 2008 Pourquoi préfères-tu une requête sur l'id plutôt que sur nom_dept ? $nom_dept = '2a';$nom_dept = "02";ou encore$nom_dept="21";$mysql->query('SELECT numero_dept, nom_dept, region, adresse, telephone, fax, email, www FROM cartedefrance WHERE nom_dept = '$nom_dept'); Tu n'aurais pas besoin du round ou de gérer les 2a 2b ?
MonWeb Posté 5 Septembre 2008 Auteur Posté 5 Septembre 2008 Pourquoi préfères-tu une requête sur l'id plutôt que sur nom_dept ?CODE$nom_dept = '2a'; $nom_dept = "02"; ou encore $nom_dept="21"; $mysql->query('SELECT numero_dept, nom_dept, region, adresse, telephone, fax, email, www FROM cartedefrance WHERE nom_dept = '$nom_dept'); Tu n'aurais pas besoin du round ou de gérer les 2a 2b ? J'ai fais ce test /* Corse */if($id=='21'){$nom_dept='2a';}else if ($id=='22') {$nom_dept='2b';}else {$nom_dept=($id);}if($nom_dept) {$result = $mysql->query('SELECT numero_dept, nom_dept, region, adresse, telephone, fax, email, www FROM cartedefrance WHERE numero_dept = \''.$nom_dept.'\''); Ca ne change pas le problème du 2 a et 2b quand j'utilise $nom_dept a la place de $pid ca fonctionne mais pas avec 2a et 2b si je donne la valeur 210 a la place de 2a ça marche dans la base le id est = 21 pour numero_dept=2a (donc 21 est le id et 2a est $pid dans le script) Je change et remplace le 2a par 210 dans la base le id est = 21 pour numero_dept=210 (donc 21 est le id et 210 est $pid dans le script) Donc dès que j'introduis une lettre ça marche plus !!
Portekoi Posté 5 Septembre 2008 Posté 5 Septembre 2008 NON, regarde le where de la requête de pluriels... Il a mit nom_dept à la place de numero_dept...
MonWeb Posté 5 Septembre 2008 Auteur Posté 5 Septembre 2008 le script avec nom_dept ne marche pas car dès qu'on fait appel a autre chose que des chiffres ça ne marche plus /* Corse */if($id=='21'){$pid= '2a';}elseif ($id=='22') {$pid='2b';}else {$nom_dept=($id);}if($nom_dept) {$result = $mysql->query('SELECT numero_dept, nom_dept, region, adresse, telephone, fax, email, www FROM cartedefrance WHERE nom_dept = \''.$nom_dept.'\''); celui la non plus car dès qu'on fait appel a autre chose que des chiffres ça ne marche plus /* Corse */if($id=='21'){$pid= '2a';}elseif ($id=='22') {$pid='2b';}else {$pid=($id);}if($pid) {$result = $mysql->query('SELECT numero_dept, nom_dept, region, adresse, telephone, fax, email, www FROM cartedefrance WHERE nom_dept = \''.$pid.'\''); mais avec numero_dept ça marche parque qu'on fait appel a des chiffres sauf pour 2a et 2b parce qu'il y a des lettres /* Corse */if($id=='21'){$pid= '2a';}elseif ($id=='22') {$pid='2b';}else {$pid=($id);}if($pid) {$result = $mysql->query('SELECT numero_dept, nom_dept, region, adresse, telephone, fax, email, www FROM cartedefrance WHERE numero_dept = \''.$pid.'\''); Et si on insistait sur le forcage de 2a et 2b ( if($id=='21'){$pid= '2a';} ne force pas le département 2a à cause de la lettre a ) en ajoutant une fonction qui donne une exception C'est possible ?
Dan Posté 7 Septembre 2008 Posté 7 Septembre 2008 le script avec nom_dept ne marche pas car dès qu'on fait appel a autre chose que des chiffres ça ne marche plus Tout simplement parce que la syntaxe de ton SELECT n'est pas correcte ! Il FAUT des quotes autour de tout ce qui n'est pas numérique pur. Voir ce post : http://www.webmaster-hub.com/index.php?s=&...st&p=281120 Dan
MonWeb Posté 24 Septembre 2008 Auteur Posté 24 Septembre 2008 (modifié) La solution est bien dans l'url rewriting qui ne donnait aucun résultat avec des lettres (pour voir le post url rewriting complet ) Donc rien à voir avoir Php et Mysql.... Merci a tous ceux qui m'ont aidé et voici la solution ci dessous 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