Page 1 sur 1

Sortie de script involontaire

Posté : 04 mars 2008, 16:19
par Anémone
Bonjour,

Désolée, il y a eu un raté, une première partie de ce message est peut-être déjà partie.
Bon, voila le souci:
$condition=NULL;
$autrecondition=NULL;
if ($condition && $autrecondition)
{echo "Hello world";}
else
{echo "Rien"} // Rien en effet, je sors du script si $condition ou $autrecondition prend la valeur NULL
Comment faire pour rester dans le script, quand bien même l'une ou l'autre de ces 2 variables prendrait-elle la valeur NULL?
Merci

Re: Sortie de script involontaire

Posté : 04 mars 2008, 16:22
par h0_noMan
Comment faire pour rester dans le script, quand bien même l'une OU l'autre de ces 2 variables prendrait-elle la valeur NULL?
Merci
Tu l'as dit toi même.

Posté : 04 mars 2008, 16:43
par Anémone
Non, ce n'est pas exactement le souci.
Lorsque ni $condition ni $autrecondition ne prennent la valeur NULL, "Hello world" s'imprime, mais si l'une ou l'autre prend la valeur NULL, "Rien" ne s'imprime pas, je quitte le script et c'est bien ce qui m'ennuie.
Ou alors j'inverse les instructions. "Rien" s'imprime si $condition ou $autrecondition prend la valeur NULL, et "Hello world" s'imprime dans le cas contraire, soit:
$condition=NULL;
$autrecondition=NULL;
if ($condition OR $autrecondition)
{echo "Rien!;}
else
{echo "Hello, world";}
Est-ce ce que tu me suggères?

Posté : 04 mars 2008, 17:02
par Ryle
Est-ce le code que tu utilises réellement ou est-ce juste une simplification de celui-ci ?

La valeur NULL est interprétée comme fausse par php. Ainsi ton premier code affichera toujours la chaine "Rien", ce n'est même pas la peine d'aller chercher plus loin...

Ensuite, je pense que php est suffisament digne de confiance en ce qui concerne ce genre d'opération pour ne rentrer dans ton que si tes conditions A ET B sont vraies et pas dans le cas ou l'une, ou l'autre, ou les deux sont fausse.

Donc à ta place, c'est sur la véritable valeur de mes conditions que je m'interrogerais et à mon avis, si tu rentres dans le if() et pas dans le else, c'est qu'elles ne sont ni nulle, ni fausse. Le mieux pour t'en convaincre est sans doute de les afficher avec un echo avant le if :
echo "Condition A : " . ($conditionA) ."<br>";
echo "Condition B : " . ($conditionB) ."<br>";
Si la condition est vraie, tu auras un 1, si elle est nulle ou fausse, tu n'auras pas de valeur...

Posté : 04 mars 2008, 17:03
par h0_noMan
Perso, j'ai du mal a te comprendre.

Essaie d'effectuer une table, en indiquant les sorties voulues en fonction des conditions.

Code : Tout sélectionner

┌──────────┬──────────┬─────────┐ │ COND_1 │ COND_2 │ SORTIE │ ├──────────┼──────────┼─────────┤ │ faux │ faux │ .... │ │ faux │ vrai │ .... │ │ vrai │ faux │ .... │ │ faux │ faux │ .... │ └──────────┴──────────┴─────────┘

Posté : 04 mars 2008, 17:21
par Anémone
C'est bien une simplification de mon code, alors je précise celui-ci:
if (!isset($condition))
{echo "la condition n'est pas vérifiée";
$condition = NULL;
}
if (!isset($autrecondition))
{echo "l'autre condition n'est pas vérifiée";
$autrecondition = NULL;
}
if ($condition && $autrecondition)
{echo "les 2 conditions sont vérifiées";}
else
{ //Rien du tout, si l'une ou l'autre des conditions n'est pas vérifiée, le script s'arrête, et ce n'est pas 
//ce que je veux
ET à y bien réfléchir, je ne peux pas vérifier si ($condition OR $autrecondition) et changer l'ordre des instructions; j'ai besoin que le script s'exécute dans cet ordre

Posté : 04 mars 2008, 17:26
par d0m
Eh bien tel quel tu restes dans le script,
if ($condition && $autrecondition)
{echo "les 2 conditions sont vérifiées";} 
en effet si les 2 sont vraies, le message s'affiche, sinon il ne s'affiche pas.
Mais le script ne s'arrête dans aucun des cas puisque tu ne l'as pas explicitement spécifié.
Mais tous ce que tu mettras en dessous hors de la condition s'effectuera.

Tu n'as rien à faire pour rester dans le script puisque tu n'as ni redirection, ni exit(),...

Posté : 04 mars 2008, 17:32
par Anémone
Il se trouve justement que rien de ce que je mets "en dessous hors de la condition" ne s'effectue. L'erreur viendrait donc d'ailleurs? Bon je vais tout revérifier,
Merci de m'avoir répondu,

Bien cordialement,


Anémone

Posté : 04 mars 2008, 18:20
par Ryle
Et pourquoi vouloir à tout prix simplifier et ne pas nous donner le morceau de code réel qui vraissemblablement pose problème ? (pas tout le code, mais juste la partie concernée).

Ce serait sans doute beaucoup plus simple pour te demander de tester telle ou telle valeur ou te dire "il manque une parenthese autour d'un OU, du coup la condition est lue comme ci au lieu de comme ça..." :)

On veut du concret, avec de vraies valeurs ronthoudjiou ! ;)