Version complète: sur le forum Webmaster Hub : appelle dans la base id=chiffre+lettre ne fonctionne pas
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > SQL
MonWeb
Bonjour,

J'appelle dans ma base le id=19

CODE
INSERT INTO `cartedefrance` VALUES (20,'19','Corrèze');
et ça fonctionne

J'appelle dans ma base le id=2a ou 2b

CODE
INSERT INTO `cartedefrance` VALUES (21,'2a','Corse du sud');
ça fonctionne pas
CODE
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
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
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
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
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
Essaye comme ceci :
CODE
$requete = mysql_query("INSERT INTO `cartedefrance` VALUES (22,'2b','Haute Corse')") or die(mysql_error());
MonWeb
Si j'utilise

CODE
$requete = mysql_query("INSERT INTO `cartedefrance` VALUES (22,'2b','Haute Corse')") or die(mysql_error());


J'obtiens ça

CODE
Column count doesn't match value count at row 1


Mon script php original est comme ça:

CODE
/* 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));
}
}

Portekoi
Tu es sur qu'il n'y a que 3 colonnes dans ta table?

Essaie ceci :

CODE

$requete = mysql_query("INSERT INTO `cartedefrance` (id, numero_dept, nom_dept) VALUES (22,'2b','Haute Corse')") or die(mysql_error());
MonWeb
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
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
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
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
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
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'

CITATION
Sinon, je cherche à comprendre pourquoi tu insères dans ta base à chaque affichage de ta page ??


Pas compris la question
captain_torche
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 :
SQL
SELECT * FROM cartedefrance WHERE id = 22
MonWeb
Stp explique moi si j'ai pas compris smile.gif

Si on parle de INSERT INTO c'est parce que tu m'a demandé dans un post plus haut d'essayer un truc

CITATION
$requete = mysql_query("INSERT INTO `cartedefrance` VALUES (22,'2b','Haute Corse')") or die(mysql_error());


CITATION
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 wink.gif

Meme code que plus haut ci dessous


CODE
/* 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
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
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:
CODE
RewriteRule ^(.*)/(.*)-([0-9]+)\.htm$ index.php?action=$1&url=$2&id=$3 [L]


L'ouverture de mon post était :

CITATION
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

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


et en remplaçant par :

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


Tout fonctionne parfaitement whistling.gif

bonne journée
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.