[RESOLU] Je vous soumet une énigme à résoudre...

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Je vous soumet une énigme à résoudre...

Re: [RESOLU] Je vous soumet une énigme à résoudre...

par Angela81 » 29 août 2012, 19:22

Merci :mrgreen:

Re: [RESOLU] Je vous soumet une énigme à résoudre...

par moogli » 29 août 2012, 18:55

c'est super simple avec ce que j'ai mis, il te suffit de modifier le masque.

Tu as déjà celui pour la plus part des cas, pour les anglais c'est plutôt
$français = 'nous sommes le %A %d %B %Y et il est %T'
$anglais  = 'Today is %A, %B %d %Y and it is %r';
if($locale == 'fr_FR')
   $lng = $français;
if($locale == 'en_EN')
    $lng = $anglais;
setlocale(LC_TIME, $locale);
echo  strftime($lng, strtotime('now'));
$locale est définie a partir de ton système de changement de langue.

A partir de la tu aura la date que tu veux :)


@+

Re: [RESOLU] Je vous soumet une énigme à résoudre...

par Angela81 » 29 août 2012, 17:53

eh les copains ! ne vous faites pas une indigestion cérébrale pour moi, ça n'en vaut pas la peine !!! :D

Tant que j'y suis, je vous explique pourquoi je voulais faire mes
 if ('$date_m' ==01) $date_m2 = 'janvier';
        if ('$date_m' ==02) $date_m2 = 'février';
        if ('$date_m' ==03) $date_m2 = 'mars';
        if ('$date_m' ==04) $date_m2 = 'avril';
        if ('$date_m' ==05) $date_m2 = 'mai';
        if ('$date_m' ==06) $date_m2 = 'juin';
        if ('$date_m' ==07) $date_m2 = 'juillet';
        if ('$date_m' ==08) $date_m2 = 'aout';
        if ('$date_m' ==09) $date_m2 = 'septembre';
        if ('$date_m' ==10) $date_m2 = 'octobre';
        if ('$date_m' ==11) $date_m2 = 'novembre';
        if ('$date_m' ==12) $date_m2 = 'decembre';  
c'est parce que mon site va être, au final, en multi-langue. et pour ça, j'aurais transformé ma liste de "if...." ci dessus en :
   if ('$date_m' ==01) $date_m2 = 'TEXT_janvier';
           ......
           if ('$date_m' ==12) $date_m2 = 'TEXT_decembre'; 
les 'TEXT_janvier', ..., 'TEXT_decembre' se transformant "tous seuls" en janvier (si c'est un visiteur francophone), enero (si c'est un visiteur qui cause espagnol), january (pr un anglophone), etc... C'est pour cela que je voulais éviter les "formules magiques" qui m'affichent automatiquement le mois de la date actuelle. Voilà, vous savez le pourquoi du comment de mon idée farfelue ! mais vu la galère que ça va être pour faire ça, il vaut peut-être mieux que je reste avec l'affichage jj - mm - YYYY avec le texte devant qui change de langue quand même. Au moins tous mes visiteurs comprendront, quelque que soient leurs langues !

Re: [RESOLU] Je vous soumet une énigme à résoudre...

par moogli » 29 août 2012, 17:32

ouch, effectivement boullette :oops:

Re: [RESOLU] Je vous soumet une énigme à résoudre...

par sirakawa » 29 août 2012, 17:12

Autant ne pas réutiliser la roue.
Il vaut peut être mieux "réutiliser la roue." que de la réinventer.

Re: [RESOLU] Je vous soumet une énigme à résoudre...

par moogli » 29 août 2012, 13:13

dans le cas qui nous intérresse plutot comme ça php-debutant/vous-soumet-une-enigme-res ... ml#p394072

Autant ne pas réutiliser la roue.

sinon autre alternative avec un tableau indexé numériquement et date('n').

le tabelau apport l'avantage de lever le problème de l'encodage, ceci dit avec la locale devrait pas y en avoir, mais la j'ai pas testé.


quand au print "$date_m2"; j'ai déjà donné mon avis avant :s ^^


@+

autre solution

par sirakawa » 29 août 2012, 12:30

C'est tellement plus simple ainsi:
<?php // autre affichage de la date / heure courante

$date_d = date("d"); // creation de $date_d
$date_m = date("m");
$date_Y = date("Y"); // creation de $date_Y
$heure = date("H:i");
$mois = array( "01"=>"janvier","02"=>"f&eacute;vrier", "08"=>"ao&ucirc;t");
$date_m2 = $mois[$date_m];
 print "$date_m2";
 ?>

Re: [RESOLU] Je vous soumet une énigme à résoudre...

par moogli » 29 août 2012, 12:10

Et "septembre", il sortait d'ou ? Moi, je n'ai toujours pas trouvé l'énigme...

A moins d'une blague avec changement de mois sur la machine...
Yop, je sais pas trop, faut voir du coté de l'auto cas de php je pense

parce que
if ('$date_m' ==01) $date_m2 = 'janvier';
        if ('$date_m' ==02) $date_m2 = 'février';
        if ('$date_m' ==03) $date_m2 = 'mars';
        if ('$date_m' ==04) $date_m2 = 'avril';
        if ('$date_m' ==05) $date_m2 = 'mai';
        if ('$date_m' ==06) $date_m2 = 'juin';
        if ('$date_m' ==07) $date_m2 = 'juillet';
        if ('$date_m' ==08) $date_m2 = 'aout';
        if ('$date_m' ==09) $date_m2 = 'septembre';
        if ('$date_m' ==10) $date_m2 = 'octobre';
        if ('$date_m' ==11) $date_m2 = 'novembre';
        if ('$date_m' ==12) $date_m2 = 'decembre';
s'il fournit septembre ça veux dire que l'auto cast considère que la chaîne '$date_m' est égale à 09 (sans tenir compte du type donc)

avec un test simple
<?php
$chaine = '$date_m';
$chainecast = (int)$chaine;
$chiffre = 9;
echo '<pre>';
debug_zval_dump($chaine);
echo '</pre><hr />';
echo '<pre>';
debug_zval_dump($chainecast);
echo '</pre><hr />';
echo '<pre>';
debug_zval_dump($chiffre);
echo '</pre><hr />';
if ('$date_m' == $chiffre)
	echo 'ouch';
else 
	echo 'ça va !';
le résultat est
string(7) "$date_m" refcount(2)

long(0) refcount(2)

long(0) refcount(2)

ouch
donc php stock bien le premier en chaîne de caractères.
et le chiffre en long mais il ne garde que zéro comme valeur (je ne sais pas pourquoi)

Le cast de la chaine de caractère en entier retourne zéro (je ne sais pas pourquoi non plus)

Donc le test compare une chaîne de caractère à zéro, ce qui revient avec, l'auto cast à comparer zéro avec zéro.
le test est donc vrai :)

Maintenant pourquoi septembre ?

c'est simple.
Le teste est vrai pour tout les cas de janvier à septembre, car à chaque fois la zval contient zéro ! (ceci a cause du zéro en tête).
les tests étant fait tous les un à la suite des autres date_m2 passe successivement de janvier à septembre.

pour les trois derniers mois, on compare 10, 11 ou 12 à zéro. ces tests ne peuvent pas être vrai.

Le problème ici est lié
- à une mauvaise utilisation de la syntaxe php : d'une manière générale il ne faut pas mettre des variables dans les chaines de caractères. la preuve ici au lieu de " angela à utilisée des ' et ça fou la merde. la concaténation sert à ça, de plus même "$var" n'est pas défendable, aucun intérêt de faire fonctionner le parse de chaîne de caractère pour rien :)
- A un cast, qui peux se comprendre, une chaine de caractère ce n'est pas un chiffre, cette chaine ne commence pas par un chiffre, donc valeur par défaut zéro !

voila pourquoi septembre :)

Si tu veux t'en convaincre utilise un debugguer et regarde où passe le script :)

C'est pour cela que souvent les gens préfères les systèmes typé y a moins de soucis de se genre :)

@+

Re: [RESOLU] Je vous soumet une énigme à résoudre...

par Mazarini » 29 août 2012, 11:15

Et "septembre", il sortait d'ou ? Moi, je n'ai toujours pas trouvé l'énigme...

A moins d'une blague avec changement de mois sur la machine...

Re: Je vous soumet une énigme à résoudre...

par Angela81 » 29 août 2012, 10:13


mais c'est pas la demande original Angela81 à déjà de quoi faire ;)


@+
Tout à fait ! merci à vous tous pour vos lumières.
Bonne journée !

Re: Je vous soumet une énigme à résoudre...

par moogli » 28 août 2012, 10:02

Chez moi ca marche ^^.
mwé mais c'est pas le plus important essai sur une machine sous win XP :)

y a aussi des dernières réponses hier :)

mais c'est pas la demande original Angela81 à déjà de quoi faire ;)


@+

Re: Je vous soumet une énigme à résoudre...

par schim59 » 28 août 2012, 10:00

Chez moi ca marche ^^.

Sinon tu fais comme le site php france :

"Dernière visite le Aujourd’hui, 08:08"

LOL

Re: Je vous soumet une énigme à résoudre...

par moogli » 28 août 2012, 09:23

ton code indique une erreur : constante inconnue car fr_FR n'est pas une constante php (et tu ne la définie pas avant)

donc setlocale(LC_TIME,'fr_FR');

Attention ceci est soumis aux locales installées, elle n'ont pas toujours le même nom :)

mais le principe est bon.

par contre tu peux le faire en une fois pas besoin d'autant de ligne.
<?php
echo  strftime('nous sommes le %A %d %B %Y et il est %H:%M:%S', strtotime('now'));
?>
fonctionne parfaitement

Attention vérifie (au moins une fois) que setlocale ne retourne false, pour être sur de la locale utilisée :)


@+

Re: Je vous soumet une énigme à résoudre...

par schim59 » 28 août 2012, 08:02

Bonjour,

Je me lance :

 setlocale(LC_TIME,fr_FR);
$datetime = strftime('%A %d %B %Y', strtotime('now'));
$heure=$heure = date("H:i");
Print("Nous sommes le $datetime et il est $heure");
Bon codage.
http://php.net/manual/fr/function.strftime.php
Et le résultat : http://ilovephp.dedicom.eu/

Re: Je vous soumet une énigme à résoudre...

par xTG » 28 août 2012, 06:46

Histoire d'expliciter :
$var = 3;
If( '$var' == 3 )
  // $var = 3
If( $var == 3)
  // 3 = 3