Jump to content
Sign in to follow this  
MonWeb

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

Rate this topic

Recommended Posts

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

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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'

Share this post


Link to post
Share on other sites

Qu'est ce qui fonctionne pas? As tu une erreur?

Si cela ne marche pas, tu dois forcément avoir un message ou autre...

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Essaye comme ceci :

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

Share this post


Link to post
Share on other sites

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

Edited by thierryfrancois

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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 ?

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Edited by thierryfrancois

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...