Aller au contenu

appelle dans la base id=chiffre+lettre ne fonctionne pas


Sujets conseillés

Posté

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

Posté

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.

Posté

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'

Posté

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

Posté (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é par thierryfrancois
Posté

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());

Posté

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 ?

Posté

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

Posté

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...

Posté

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.

Posté

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

Posté

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

Posté

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

Posté

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

  • 3 semaines plus tard...
Posté (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 :whistling:

bonne journée

Modifié par thierryfrancois

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...