conversion string en nombre pour effectuer une multiplication

Eléphanteau du PHP | 15 Messages

18 févr. 2009, 14:23

J'essaye de multiplier une variable par un nombre.
Cette variable venant d'un script php, j'ai converti le string en entier. Je fais ensuite ma multiplication et la surprise affichage du résultat 0 ??

Code : Tout sélectionner

$myNumJour=CalculNbreJourDsMois("1","3","2009"); //Résultat retourné par un 'return $toto' $nombre = intval($myNumJour); $test=2*$nombre; // Affiche 0
Une idée judicieuse ?

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Eléphant du PHP | 145 Messages

18 févr. 2009, 14:29

Bonjour zazadec, peux tu nous mettre le code php de ta fonction?

Et pourquoi ne pas renvoyer directement un entier de celle ci plutôt que de passer par une conversion?

Albat90 ;)
La culture, c'est comme la confiture, moins on en a, plus on l'étale.

Eléphanteau du PHP | 15 Messages

18 févr. 2009, 14:37

Ma petite fonction PHP:

Code : Tout sélectionner

function CalculNbreJourDsMois($jour, $mois, $annee) { $myNbjour="<script language='javascript'> document.write(GetNbrMemeJour(".$jour.",".$mois.",".$annee.")); </script>"; return $myNbjour; }
Ma petite fonction JS 'GetNbrMemeJour'

Code : Tout sélectionner

function GetNbrMemeJour(j_, m_, a_){ var RefMois; var D_Date = new Date(); var D_Jour = D_Date.getDay(); var D_Mois = D_Date.getMonth(); var D_Annee = D_Date.getFullYear(); var NbrJour = 0; //-- Init des Valeurs if( j_) D_Date.setDate(1); // on met la date au 1st if( m_!=null) D_Date.setMonth(m_); // on place le mois if( a_!=null) D_Date.setYear(a_); // on place l'année RefMois = D_Date.getMonth(); // le mois de réfèrence //-- On demande à JavaScript de faire le Boulot --// for( i=1; i <32 ;i++){ // Nbr Jour Max 31 D_Date.setDate(i); D_Mois = D_Date.getMonth(); // on récupère le mois D_NumJour = D_Date.getDay(); // la position du jour if( RefMois != D_Mois){ // On change de Mois break; } if( D_NumJour == j_) NbrJour++; } return( NbrJour); }
[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Eléphant du PHP | 145 Messages

18 févr. 2009, 16:22

Rebonjour,

je ne comprend pas très bien le mixe que tu fais entre javascript et php.
En effet, Javascript est utiliser pour un traitement dynamique et celui ci est exécuter du coté client. Donc si l'internaute désactive javascript, ton script ne fonctionnera plus.

De plus, javascript ne sert à rien dans ce genre de situation car php est non dynamique, tu n'aura donc aucune possibilités d'exécuter ton script en directe. Du moins, pas avant l'actualisation de ta page.

Et si j'ai bien compris ta demande, tu souhaite chercher le nombre de jour que possède un mois?
exemple :
Janvier => 31
Fevrier => 28
Mars => 31
Avril => 30
...

Si tu veux faire cela, pourquoi ne pas faire un tableau :
$nb_jour['janvier'] = 31;
$nb_jour['fevrier'] = 28;
$nb_jour['mars'] = 30;
$nb_jour['avril'] = 31;
...
Tiens moi au courant :)

Albat90 ;)
La culture, c'est comme la confiture, moins on en a, plus on l'étale.

Eléphanteau du PHP | 15 Messages

18 févr. 2009, 16:53

Le script JS me permet de calculer, non pas le nombre de jour dans un mois, mais le nombre de "dimanche" ou "lundi" ou "mardi" .... Ce script fonctionne correctement. C'est juste que la valeur qui m'est retourné est un string. Et donc je ne peux faire d'opération arithmétiques sur cette variable.
Comment faire pour passer cette variable comme un entier ?
Julien
------

Eléphant du PHP | 145 Messages

18 févr. 2009, 17:20

return( parseInt(NbrJour));???

Albat90 ;)
La culture, c'est comme la confiture, moins on en a, plus on l'étale.

Eléphanteau du PHP | 15 Messages

18 févr. 2009, 17:28

return( parseInt(NbrJour));???
Et non, marche pas. Il affiche toujours un résultat de 0. Il doit toujours le prendre en tant que string.
Julien
------

Eléphant du PHP | 145 Messages

18 févr. 2009, 17:50

Humm as tu tester d'afficher $nombre avant d'effectuer une opération?
Peut être que le problème ne vient pas du type de la variable mais plutôt de son affectation.
En effet, si tu affecte mal ta variable, elle prendra par defaut la valeur 0 en php. Et par conséquent, 0 * n'importe quoi te renverra toujours 0 :)

Albat90 ;)
La culture, c'est comme la confiture, moins on en a, plus on l'étale.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

18 févr. 2009, 19:21

Le script JS me permet de calculer, non pas le nombre de jour dans un mois, mais le nombre de "dimanche" ou "lundi" ou "mardi" .... Ce script fonctionne correctement. C'est juste que la valeur qui m'est retourné est un string. Et donc je ne peux faire d'opération arithmétiques sur cette variable.
Comment faire pour passer cette variable comme un entier ?
Un petit rappel : PHP et javascript n'interragissent pas ensemble !

PHP s'exécute sur le serveur et génère des pages html. Javascript s'exécute sur le poste client et permet de.. euh... plein de chose qu'on fait habituellement avec du javascript pour épater l'utilisateur :)

Tout ça pour dire que php ne peut appeler des fonctions javascript. Ta fonction CalculNbreJourDsMois() retourne bêtement et simplement la chaine "<script language='javascript'> document.write(GetNbrMemeJour(1,3,2009)); </script>" ... et forcément, tout ça multiplié par 2 bêêêh ca va pa ben loin... :)

Il faut soit redévelopper ta fonction en php de façon à ce que php puisse l'utiliser et retourner directement ton nombre de jour, soit faire ta multiplication en javascript où tu pourras utiliser cette fonction.
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 15 Messages

19 févr. 2009, 14:51

La nuit portant conseil, je suis arrivé à la même conclusion que toi : 'Multiplier en JS'.
Est ce que je peux faire 2 fonctions JS :
- Une pour trouver le nbre de Lundi, mardi ...
- Une pour faire la multiplication
ou alors tout faire dans la même fonction.

La matinée portant conseil, j'ai finalement transformé ma fonction JS en PHP. Pour voir le code aller sur ce topic http://www.phpfrance.com/forums/voir_re ... php#280008.

PS : Quand tu commences à en rêver la nuit, c'est pas bon ! :twisted: