MonWeb Posté 2 Septembre 2008 Posté 2 Septembre 2008 Bonjour, J'appelle dans ma base le id=19 INSERT INTO `cartedefrance` VALUES (20,'19','Corrèze'); et ça fonctionne J'appelle dans ma base le id=2a ou 2b INSERT INTO `cartedefrance` VALUES (21,'2a','Corse du sud'); ça fonctionne pas INSERT INTO `cartedefrance` VALUES (22,'2b','Haute Corse'); ça fonctionne pas En toute logique id=2a ou 2b ne fonctionne pas à cause de la lettre Est ce qu'on peut mettre une lettre dans le "id" ? J'ai aussi essayé ça en php pour forcer le pid=id mais ça marche pas /* Corse */ if($id=='2a' || $id=='2b') {$pid=$id;} else {$pid=round($id);} Merci pour votre aide
captain_torche Posté 2 Septembre 2008 Posté 2 Septembre 2008 Tout dépend du type que tu as mis en ID. Logiquement, il doit s'agir d'un INT, qui n'accepte que des valeurs numériques. Je te conseille de garder le schéma tel quel, avec un ID auto-incrémenté, et de rajouter un champ de type varchar(2) pour les numéros de département.
MonWeb Posté 2 Septembre 2008 Auteur Posté 2 Septembre 2008 pour plus d'info sur la structure de ma base INSERT INTO `cartedefrance` VALUES (22,'2b','Haute Corse'); id=22 avec int(10) UNSIGNED numero_dept= '2b' avec char(3) nom_dept= 'Haute Corse' avec varchar(100) J'aimerai appeller directement numero_dept qui est utilisé avec l'urlrewriting pour faire apparaitre le N° de département, ça marche avec les autres départements sauf avec la corse 2a et 2b Il n'existe pas un script php pour donner une exception ? genre : if nom_dept= 'Haute Corse' = numero_dept=2b ou if id=22 numero_dept= '2b'
Portekoi Posté 2 Septembre 2008 Posté 2 Septembre 2008 Qu'est ce qui fonctionne pas? As tu une erreur? Si cela ne marche pas, tu dois forcément avoir un message ou autre...
MonWeb Posté 2 Septembre 2008 Auteur Posté 2 Septembre 2008 J'ai pas de message d'erreur Ma page cartedefrance.php appelle des resultats sur les départements exemple INSERT INTO `cartedefrance` VALUES (20,'19','Corrèze'); donne des résultats sur ce département (adresse, N° de tel ect...) si j'appelle INSERT INTO `cartedefrance` VALUES (22,'2b','Haute Corse'); ça ne fonctionne pas a cause du 2b et je reste bloqué sur ma page cartedefrance.php sans message d'erreur
captain_torche Posté 2 Septembre 2008 Posté 2 Septembre 2008 Essaye comme ceci : $requete = mysql_query("INSERT INTO `cartedefrance` VALUES (22,'2b','Haute Corse')") or die(mysql_error());
MonWeb Posté 2 Septembre 2008 Auteur Posté 2 Septembre 2008 (modifié) Si j'utilise $requete = mysql_query("INSERT INTO `cartedefrance` VALUES (22,'2b','Haute Corse')") or die(mysql_error()); J'obtiens ça Column count doesn't match value count at row 1 Mon script php original est comme ça: /* Corse */if($id=='2a' || $id=='2b') {$pid=$id;} else {$pid=round($id);} //if($pid='22') {$id='2a';}if($pid) { $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); show_cartedefrance($infos); $page->settitle('Mon titre réecrit '.$infos['nom_dept'].' '.str_pad($infos['numero_dept'],2,'0',STR_PAD_LEFT)); }} Modifié 2 Septembre 2008 par thierryfrancois
Portekoi Posté 2 Septembre 2008 Posté 2 Septembre 2008 Tu es sur qu'il n'y a que 3 colonnes dans ta table? Essaie ceci : $requete = mysql_query("INSERT INTO `cartedefrance` (id, numero_dept, nom_dept) VALUES (22,'2b','Haute Corse')") or die(mysql_error());
MonWeb Posté 2 Septembre 2008 Auteur Posté 2 Septembre 2008 Oui il y a bien plus que 3 colonnes dans ma base (voir mon post ci dessus) Et tout fonctionne bien sauf quand j'appelle dans ma base numero_dept= 2a et 2b donc le problème est la lettre ? Que dois je mettre comme valeur dans ma base pour que les lettres soient acceptées ?
Dan Posté 2 Septembre 2008 Posté 2 Septembre 2008 Je disais des bêtises donc j'ai édité mon post... Donc, tu as un champ numero_dept qui permet de recevoir 3 caractères. Assure-toi que la longueur est suffisante, car si tu utilises l'UTF-8 un caractère peut prendre plus que 8 bits. Change ton champ numero_dept en char(8) par exemple. Dan
MonWeb Posté 2 Septembre 2008 Auteur Posté 2 Septembre 2008 Bonjour Dan, J'ai essayé avec le champ numero_dept en char(8) mais pas de changement, je reste sur la page cartedefrance.php (sans erreur affiché) quand j'appelle 2a et 2b alors que tout les autres départements fonctionnent...
MonWeb Posté 2 Septembre 2008 Auteur Posté 2 Septembre 2008 Par contre ce script me donne une erreur "Duplicate entry '22' for key 1" $result = $mysql->query("INSERT INTO cartedefrance (id, numero_dept, nom_dept) VALUES (22,'2b','Haute Corse')") or die(mysql_error()); Il semble que id 22 soit confondu avec numero_dept=22 car dans ma base j'ai: VALUES (22,'2b','Haute Corse', VALUES (24,'22','Côtes d\'Armor', Pourtant le script appelle bien numero_dept ? et pas id.
captain_torche Posté 2 Septembre 2008 Posté 2 Septembre 2008 Tu n'as aucune autre valeur de ta base avec un ID de 22 ? Sinon, je cherche à comprendre pourquoi tu insères dans ta base à chaque affichage de ta page ??
MonWeb Posté 2 Septembre 2008 Auteur Posté 2 Septembre 2008 et oui je trouve ça bizzarre..... j'ai bien verifié et ma veule valeur ID=22 est numero_dept='2b' et nom_dept='Haute Corse' Sinon, je cherche à comprendre pourquoi tu insères dans ta base à chaque affichage de ta page ?? Pas compris la question
captain_torche Posté 2 Septembre 2008 Posté 2 Septembre 2008 Donc, tu as déjà un ID égal à 22 (correspondant à la haute-corse). Le code que tu nous donnes insère des données en base (INSERT INTO), sur un emplacement déjà existant; il ne peut pas créer d'élément avec un ID égal à 22, parce qu'il en existe déjà un. Pour l'affichage sur tes pages, tu devrais utiliser une requête de type SELECT : SELECT * FROM cartedefrance WHERE id = 22
MonWeb Posté 2 Septembre 2008 Auteur Posté 2 Septembre 2008 Stp explique moi si j'ai pas compris Si on parle de INSERT INTO c'est parce que tu m'a demandé dans un post plus haut d'essayer un truc $requete = mysql_query("INSERT INTO `cartedefrance` VALUES (22,'2b','Haute Corse')") or die(mysql_error()); Pour l'affichage sur tes pages, tu devrais utiliser une requête de type SELECT :SQLSELECT * FROM cartedefrance WHERE id = 22 Je crois que je fais exactement comme ça avec SELECT, si tu regarde mon code qui se trouve dans ma page cartedefrance.php et déjà indiqué dans mes posts plus haut Meme code que plus haut ci dessous /* Corse */if($id=='2a' || $id=='2b') {$pid=$id;} else {$pid=round($id);} //if($pid='22') {$id='2a';}if($pid) { $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); show_cartedefrance($infos); $page->settitle('Mon titre réecrit '.$infos['nom_dept'].' '.str_pad($infos['numero_dept'],2,'0',STR_PAD_LEFT));}} Ce code fonctionne pour tout les départements (plus de 90) sauf avec 2a et 2b, en déduction logique si j'avais un problème de code il ne fonctionnerait pas pour plus de 90 requetes differentes. Mais je bloque sur ce 2a et 2b, ma base refuse d'accepter les lettres !!! Merci d'avance
MonWeb Posté 5 Septembre 2008 Auteur Posté 5 Septembre 2008 Ci dessus j'affirme que mon code Php n'a pas de problème et j'avais tord ! En modifiant mon script Php, la base me repond pour le département 2a et 2b, la base n'a pas de problème et l'appel Alphanumérique n'est pas le problème. Mais mon script Php est toujours faux !!! La suite dans la partie PHP du forum http://www.webmaster-hub.com/index.php?showtopic=43037 Merci à tous ceux qui m'ont aidé dans ce post
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