Annonces


#1 07/01/07 10:24:06

Malcolm
4d0p73z 14 1337 A7717ud3 !
Equipe Modérateurs
Lieu: unreal://Index.ut2:31337
OS: Linux Debian
Date d'inscription: 03/03/04
Messages: 3435
Site web

[PHP] pb de récupération de valeur ...

Salut,
pour une fois je pose une question tongue
ça fait une bonne 10aine d'heures que je cherche, mais je ne comprends toujours pas ... Je retape mon site d'anatomie, et dans les cours, il y a des schémas.
Chaque schéma est inscrit dans la base de données avec un identifiant (clé primaire), puis une url, un titre, etc. et dans mon code source (HTML), lui aussi dans une table SQL, j'insère des marqueurs pour les schémas. Le but du jeu est de remplacer ces marqueurs par des vignettes de schémas. (l'intérêt est double : pouvoir afficher une vignette du schéma ou bien prévoir une version imprimable de la page, ceci sans pour autant se soucier du nombre de schémas dans la page, vu que c'est "lu" automatiquement)

Explication concrète :
-----------------------

je mets mes "marqueurs" sous forme d'un pseudo BBCode comme ceci : [schema]45[/schema] où le chiffre (45 ici) est l'identifiant dans la base de données du schéma.

Avant l'affichage de la page, je récupère ce chiffre à l'aide d'une expresstion rationnelle comme suit :

Code:

$thispage['content'] = eregi_replace("\[schema\] ?([^\[]*) ?\[/schema\]",Schema('\\1') , $thispage['content']);

Ma fonction "Schema" pour le moment ne me retourne que le chiffre :

Code:

function Schema($schema)
{
    return "=> ".$schema." <=";
}

et lors de l'affichage de ma page, ça marche nickel : j'ai bien mon => 45 <=

Seulement si je modifie ma fonction ainsi :

Code:

function Schema($schema)
{
    return "=> ".($schema+1)." <=";
}

j'obtiens : =>  <= c.à.d. que le chiffre a disparu ... et je ne comprends pas pourquoi.

Si je le caste en entier, que ce soit par un sprintf("%d",$schema); ou par un (int) $schema, j'obtiens => 0 <= et je cherche pourquoi ... Si quelqu'un a une idée ... Merci !


La nature est bien faite : quand mon nez est bouché, ce sont mes pieds qui sentent ...
http://zeffklop.free.fr/singe.gif FYI RTFM ASAP => Tux : La Légende <=
http://www.php-astux.info/images/newslettux2-468x60.pngNewsletTux

Grand défenseur de la Langue Française tongue

TOP Hors ligne

  • Signaler
  • Citer
  • Ajouter à la citation

#2 07/01/07 11:49:51

Ju
ju@jabber.sk
Equipe Admin
Lieu: Boston, Texas
OS: Linux Debian
Date d'inscription: 26/01/04
Messages: 5878
Envoyer un MP

  Email  Site web

Re: [PHP] pb de récupération de valeur ...

PHP n'étant pas un langage strictement typé, tu ne devrais pas avoir à convertir le type.
Cependant, essai intval($schema).
Sinon, faudra chercher du côté de l'ordre des opération de eregi_replace avec ta fonction je pense.



TOP Hors ligne

  • Signaler
  • Citer
  • Ajouter à la citation

#3 07/01/07 12:22:24

Malcolm
4d0p73z 14 1337 A7717ud3 !
Equipe Modérateurs
Lieu: unreal://Index.ut2:31337
OS: Linux Debian
Date d'inscription: 03/03/04
Messages: 3435
Site web

Re: [PHP] pb de récupération de valeur ...

justement, c'est pour ça que j'ai essayé avec un sprintf ou un (int) en me disant que le pauvre typage du PHP me dispensait de ce genre de bidouille. Mais vu que ça ne donne rien ... L'intval me retourne 0 aussi.
Bon je vais essayer de trouver une autre combine ...


La nature est bien faite : quand mon nez est bouché, ce sont mes pieds qui sentent ...
http://zeffklop.free.fr/singe.gif FYI RTFM ASAP => Tux : La Légende <=
http://www.php-astux.info/images/newslettux2-468x60.pngNewsletTux

Grand défenseur de la Langue Française tongue

TOP Hors ligne

  • Signaler
  • Citer
  • Ajouter à la citation

#4 07/01/07 13:19:54

TibaL
tibal@jabber.fr
OS: Linux Debian
Date d'inscription: 05/02/04
Messages: 2684
Envoyer un MP

  Email  Site web

Re: [PHP] pb de récupération de valeur ...

Ce que je propose peut paraître idiot, mais essaye un coup :

Code:

function Schema($schema)
{
    return ("=> ".($schema+1)." <=");
}

http://tibalfr.free.fr/pub/avatars/sms.gif

TOP Hors ligne

  • Signaler
  • Citer
  • Ajouter à la citation

#5 07/01/07 14:04:56

Malcolm
4d0p73z 14 1337 A7717ud3 !
Equipe Modérateurs
Lieu: unreal://Index.ut2:31337
OS: Linux Debian
Date d'inscription: 03/03/04
Messages: 3435
Site web

Re: [PHP] pb de récupération de valeur ...

0 aussi. (alors que ma valeur d'arrivée vaut bien 45)


La nature est bien faite : quand mon nez est bouché, ce sont mes pieds qui sentent ...
http://zeffklop.free.fr/singe.gif FYI RTFM ASAP => Tux : La Légende <=
http://www.php-astux.info/images/newslettux2-468x60.pngNewsletTux

Grand défenseur de la Langue Française tongue

TOP Hors ligne

  • Signaler
  • Citer
  • Ajouter à la citation

#6 07/01/07 14:40:25

TibaL
tibal@jabber.fr
OS: Linux Debian
Date d'inscription: 05/02/04
Messages: 2684
Envoyer un MP

  Email  Site web

Re: [PHP] pb de récupération de valeur ...

Malcolm a écrit:

0 aussi. (alors que ma valeur d'arrivée vaut bien 45)

Es tu certain que $schema ne contient pas d'espace ?

Essaie aussi :

Code:

function Schema($schema)
{
    $nb = intval($schema)+1;
    return ("=> ".$nb." <=");
}

http://tibalfr.free.fr/pub/avatars/sms.gif

TOP Hors ligne

  • Signaler
  • Citer
  • Ajouter à la citation

#7 07/01/07 15:13:46

Malcolm
4d0p73z 14 1337 A7717ud3 !
Equipe Modérateurs
Lieu: unreal://Index.ut2:31337
OS: Linux Debian
Date d'inscription: 03/03/04
Messages: 3435
Site web

Re: [PHP] pb de récupération de valeur ...

ça m'affiche 1. Et non, mon nombre n'a pas d'espace vu que si je l'affiche seul, il n'y a pas d'espace (même dans le code source)

Edit : ce qui est curieux, c'est queje ne l'aie pas en tant que nombre ...

voici un autre test :

Code:

function Schema($schema)
{
   return (is_numeric($schema)) ? "=> ".$schema." <=" : "NaN";
}

et ça m'affiche "NaN".
alors que $schema vaut bien 45. Je me demande s'il n'y a pas une couille ASCII ou qqch du genre, mais bon, les nombres en majuscule, c'est des blagues style mika he


La nature est bien faite : quand mon nez est bouché, ce sont mes pieds qui sentent ...
http://zeffklop.free.fr/singe.gif FYI RTFM ASAP => Tux : La Légende <=
http://www.php-astux.info/images/newslettux2-468x60.pngNewsletTux

Grand défenseur de la Langue Française tongue

TOP Hors ligne

  • Signaler
  • Citer
  • Ajouter à la citation

#8 07/01/07 17:15:43

Ju
ju@jabber.sk
Equipe Admin
Lieu: Boston, Texas
OS: Linux Debian
Date d'inscription: 26/01/04
Messages: 5878
Envoyer un MP

  Email  Site web

Re: [PHP] pb de récupération de valeur ...

Dis-nous ce que ça dit si tu fais :

Code:

function Schema($schema)
{
   var_dump($schema);
}


TOP Hors ligne

  • Signaler
  • Citer
  • Ajouter à la citation

#9 07/01/07 20:32:03

Malcolm
4d0p73z 14 1337 A7717ud3 !
Equipe Modérateurs
Lieu: unreal://Index.ut2:31337
OS: Linux Debian
Date d'inscription: 03/03/04
Messages: 3435
Site web

Re: [PHP] pb de récupération de valeur ...

si je fais un print_r($schemas) il affiche juste un \1 (rapport à ma regexp ss doute)
si je fais un var_dump($schema) il affiche string(2) \1

d'où sort le 45 alors ...?


La nature est bien faite : quand mon nez est bouché, ce sont mes pieds qui sentent ...
http://zeffklop.free.fr/singe.gif FYI RTFM ASAP => Tux : La Légende <=
http://www.php-astux.info/images/newslettux2-468x60.pngNewsletTux

Grand défenseur de la Langue Française tongue

TOP Hors ligne

  • Signaler
  • Citer
  • Ajouter à la citation

#10 07/01/07 20:50:00

Ju
ju@jabber.sk
Equipe Admin
Lieu: Boston, Texas
OS: Linux Debian
Date d'inscription: 26/01/04
Messages: 5878
Envoyer un MP

  Email  Site web

Re: [PHP] pb de récupération de valeur ...

Premier cas :
1) eregi_replace commence par exécuter Schema('\\1').
2) Pour lui il a donc cette fonction :

Code:

$thispage['content'] = eregi_replace("\[schema\] ?([^\[]*) ?\[/schema\]", '=> \\1 <=' , $thispage['content']);

3) Il remplace \\1 par la première capture de ta regexp, soit 45.
4) Dans ton template, ton 45 est donc bien remplacé par => 45 <=.


Second cas avec le +1 :
1) eregi_replace commence par exécuter Schema('\\1').
2) Pour lui il a donc cette fonction :

Code:

$thispage['content'] = eregi_replace("\[schema\] ?([^\[]*) ?\[/schema\]", '=> 1 <=' , $thispage['content']);

(car \\1 est un string, donc ça vaut 0 donc +1 ça fait 1 smile)

3) Il remplace l'éventuel \\1 par la première capture de ta regexp, soit 45.
4) Evidemment il n'y avait plus de \\1 dans ton string de remplacement donc il a remplacé que dalle smile. Par contre le 1 apparait bien.


Conclusion :
J'avais bien raison, c'est une question d'ordre : eregi_replace commence par exécuter toutes les fonctions, puis fait son boulot. Voilà pourquoi j'avais jamais utilisé ta méthode qui serait pourtant bien pratique smile.



TOP Hors ligne

  • Signaler
  • Citer
  • Ajouter à la citation

#11 08/01/07 17:58:21

TibaL
tibal@jabber.fr
OS: Linux Debian
Date d'inscription: 05/02/04
Messages: 2684
Envoyer un MP

  Email  Site web

Re: [PHP] pb de récupération de valeur ...

Oh !!! Moi je croyais que tu testais la fonction toute seule... pas dans le contexte du script jap


http://tibalfr.free.fr/pub/avatars/sms.gif

TOP Hors ligne

  • Signaler
  • Citer
  • Ajouter à la citation

#12 08/01/07 21:04:29

Malcolm
4d0p73z 14 1337 A7717ud3 !
Equipe Modérateurs
Lieu: unreal://Index.ut2:31337
OS: Linux Debian
Date d'inscription: 03/03/04
Messages: 3435
Site web

Re: [PHP] pb de récupération de valeur ...

j'ai trouvé une autre façon de résoufre, en fait ... J'éclate mon contenu HTML et je recherche les lignes [schéma] pour en tirer la variable. D'elle, je mets le contenu du schéma, sans passer par une autre fonction. ça fait un peu moins propre, mais tant pis.


La nature est bien faite : quand mon nez est bouché, ce sont mes pieds qui sentent ...
http://zeffklop.free.fr/singe.gif FYI RTFM ASAP => Tux : La Légende <=
http://www.php-astux.info/images/newslettux2-468x60.pngNewsletTux

Grand défenseur de la Langue Française tongue

TOP Hors ligne

  • Signaler
  • Citer
  • Ajouter à la citation

#13 08/01/07 21:06:48

Ju
ju@jabber.sk
Equipe Admin
Lieu: Boston, Texas
OS: Linux Debian
Date d'inscription: 26/01/04
Messages: 5878
Envoyer un MP

  Email  Site web

Re: [PHP] pb de récupération de valeur ...

Suffit de récupérer les valeurs avec preg_match_all par exemple et de remplacer ensuite wink.




TOP Hors ligne

  • Signaler
  • Citer
  • Ajouter à la citation
Actuellement aucun autre membre et 1 invité sur ce topic
Membres : [S'enregistrer]

Pied de page du Forum

Pub hébergeur :


CtrlAltSuppr.com, forums officiels de JSAND partagés avec Geek&Hype

Powered by PunCAS (JSAND) based on PunBB
© Copyright 2002–2005 Rickard Andersson