OVH Cloud OVH Cloud

test ==

4 réponses
Avatar
yvon.thoravalNO-SPAM
je découvre un pb sur mon code, pb qui n'apparaît pas avec Camino mais
avec Firefox, bizarre.

j'ai une funcion verifyAll(...) qui retourne true/false
suivant que les trois champs de ma form sont ok ou non :

<code>
function verifyAll($l, $e, $o, $c) {
return verifyLogin($l) && verifyEmail($e) && verifyOs($o, $c);
}
</code>

avec, pour chaque verifyXxxx(...) quelque chose de similaire à :
<code>
function verifyLogin($l) {
return preg_match('/^[a-z0-9|_|-| ]{8,}$/i', $l);
}
</code>

cette fonction est utilisée dans un test :
<code>
$nextaction="$_SERVER[PHP_SELF]";
if (verifyAll($login, $pass, $os, $choose) === true) {
$nextaction="envoi.php";
}
</code>


en fait je rencontre TROIS problèmes :

- 1 - nextaction ne bascule pas de "$_SERVER[PHP_SELF]" à "envoi.php" ;
- 2 - si je fais un echo de verifyAll(...), la valeur retournée est 1 et
non pas true ;
- 3 - j'ai suspecté preg_match de retourner un entier plutôt qu'un
booléen (nb de fois où ça match mais on s'arrête à la première fois)
(valeur retournée = pseudo type : mixed).

A cause de cela j'ai changé mon code en :

<code>
function verifyLogin($l) {
if (preg_match('/^[a-z0-9|_|-| ]{8,}$/i', $l)) {
return true;
}
return false;
}
</code>

ce qui me paraît plus correct, je suis sûr d'avoir un booleen dans
verifyAll...

mais bon, ça ne marche pas mieux et je ne pige pas où est mon erreur ni
pourquoi echo verifyAll m'affiche 1 au lieu de true, sans doute y a
t'il, pour un echo, une traduction de type automatique ?

NB : j'ai remplacé :
if (verifyAll($login, $pass, $os, $choose) === true) {

par :
if (verifyAll($login, $pass, $os, $choose) === 1) {

(ou avec ==)

sans plus de succès.

je ne connais pas la function permettant de de retrouver le type d'une
variable :

genre :

echo var_type($myvar); //boolean ou autre...

--
yt

4 réponses

Avatar
Olivier Miakinen

en fait je rencontre TROIS problèmes :

- 1 - nextaction ne bascule pas de "$_SERVER[PHP_SELF]" à "envoi.php" ;


Pourtant, cela devrait fonctionner. Il contient quoi, nextaction ?

Tu peux plus simplement écrire « $nextaction = $_SERVER['PHP_SELF']; »
mais en principe cela devrait vraiment être équivalent.

- 2 - si je fais un echo de verifyAll(...), la valeur retournée est 1 et
non pas true ;


C'est normal. true est un booléen qui vaut 1, de même que false est un
booléen qui vaut 0.

- 3 - j'ai suspecté preg_match de retourner un entier plutôt qu'un
booléen [etc.]


Du coup, tout ce qui suit ne servait à rien, et amène la même réponse :
true vaut 1, c'est normal.

--
Olivier Miakinen
Non, monsieur le juge, je vous le jure : jamais je n'ai cité
Bruxelles dans ma signature.

Avatar
yvon.thoravalNO-SPAM
Olivier Miakinen <om+ wrote:


Pourtant, cela devrait fonctionner. Il contient quoi, nextaction ?


ça, c'est tout :
<code>
$nextaction=$_SERVER['PHP_SELF'];
if (verifyAll($login, $pass, $os, $choose) === true) {
$nextaction="envoi.php";
}
echo "choose : ".$choose." os : " .$os." nextaction : ".$nextaction."
verifyOs($os, $choose) : ".verifyOs($os, $choose)."<br/>";
</code>
l'echo me donne :
choose : Choisir os : Mac OS X nextaction : /register.php verifyOs(Mac
OS X, Choisir) : 1

et pourtant $nextaction ne passe pas à "envoi.php", je ne rentre pas
dans le if (verifyAll(...)) {...}

et ça, je viens de vérifier pour la n + unième fois, ca marche avec
camino (MacOS X) mais pas avec Firefox (MacOS X ET Xindows XP).
je ne comprend pas en quoi du code php peut-être browser dépendant ???
--
yt

Avatar
Olivier Miakinen

Olivier Miakinen <om+ wrote:


Pourtant, cela devrait fonctionner. Il contient quoi, nextaction ?


ça, c'est tout :
<code>
$nextaction=$_SERVER['PHP_SELF'];
if (verifyAll($login, $pass, $os, $choose) === true) {
$nextaction="envoi.php";
}


Toutes mes confuses, je n'avais pas lu l'intégralité du code, me
contentant des deux versions de la fonction VerifyLogin.

Effectivement ça me semble curieux, mais aussi je ne vois pas pourquoi
tu veux être plus royaliste que le roi, et vérifier que la valeur de
retour est non seulement non nulle, mais de plus de type booléen.

Ceci devrait faire ce que tu veux :

$nextaction=$_SERVER['PHP_SELF'];
if (verifyAll($login, $pass, $os, $choose) == true) {
$nextaction="envoi.php";
}

Et au fait, ceci aussi :

$nextaction=$_SERVER['PHP_SELF'];
if (verifyAll($login, $pass, $os, $choose)) {
$nextaction="envoi.php";
}


Pour paraphraser le PHP en français, je dirais que cette dernière
solution signifie « est-ce que les paramètres sont corrects », que la
précédente signifie « est-ce qu'il est vrai que les paramètres sont
corrects » alors que ta propre proposition signifiait « est-ce que la
question de savoir si les paramètres sont corrects est une proposition
booléenne dont la réponse est oui ». ;-)


Avatar
yvon.thoravalNO-SPAM
Olivier Miakinen <om+ wrote:

Pour paraphraser le PHP en français, je dirais que cette dernière
solution signifie « est-ce que les paramètres sont corrects », que la
précédente signifie « est-ce qu'il est vrai que les paramètres sont
corrects » alors que ta propre proposition signifiait « est-ce que la
question de savoir si les paramètres sont corrects est une proposition
booléenne dont la réponse est oui ». ;-)


J'adimre, bravo ! très jolie formulation ;-)

en fait le problème était ailleurs, comme d'hab' ;-)

mais j'ai un autre bugg php qqpart qui commence à m'échauffer les
burettes...
--
yt