Aller au contenu

forcer une fonction sans annuler les autres


Sujets conseillés

Posté

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

Posté

Bizarre... pourquoi tu échappes les "\'" ?

/* Corse */
if($id=='2a' || $id=='2b') {$pid=$id;}
else {$pid=round($id);}

//on vérifie l'affichage
echo $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 :)

Posté (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'affichage
echo $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'affichage
echo $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é par thierryfrancois
Posté

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

Posté

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 :)

Posté (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'affichage
echo $pid . " <-- <br>";

C'est a dire 0

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

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

Posté

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)

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

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?

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

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).'\'');

??

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

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 ?

Posté
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 !!

Posté

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 ?

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