Aller au contenu

que veut dire !@isset ?


Sujets conseillés

Posté

Bonjour, j'aimerais savoir la signification en français de ce bout de code. Merci

if((!@isset($_SESSION['pseudo'])) || ($_SESSION['pseudo']=="")){

c'est le !@isset qui me dérange.

Posté (modifié)

! --> pas egal

@ --> pour eviter d'afficher les messages d'erreur et autre warning

(si par exemple la variable de session pseudo n'est pas définie)

Modifié par Vincent
Posté

isset : si la variable est définie

! : NOT

!isset : si la variable n'est pas définie

@ : empêche l'affichage éventuel d'un message d'erreur

PS : Vincent, pas égal s'écrit != (NOT equal) ;)

Posté (modifié)

SI la variable $_SESSION['pseudo'] n'existe pas OU si elle est vide FAIRE :

isset() : retourne true si la variable existe. !isset() retourne true si la variable n'existe pas. Le @ évite les messages d'erreurs (inutile ici mais je peux me tromper).

N'oublie pas qu'il existe une excellente doc ;)

edit: Heureusement que le wifi a laché deux fois :-° . Sympa l'édition rapide.

Modifié par Reivilo
Posté

Sauf que...

Le arobase sert à ne pas afficher l'erreur que pourrait retourner la fonction.

Mais 'isset' ne retourne jamais d'erreur. Donc le arobase ne sert à rien.

Posté (modifié)

Je pense que le code que tu souhaites utiliser ne fonctionnera pas comme tu le souhaites :

if((!@isset($_SESSION['pseudo'])) || ($_SESSION['pseudo']==""))

Je ne suis pas sur, mais je pense que dans tous les cas, il y aura quelqu'un ici pour me reprendre. Je pense que malgré ton ISSET, php va évaluer la condition ($_SESSION['pseudo']=="") pour savoir si la condition entière présente dans ton if va être satisfaite ou non. Je te conseille de faire comme suit:

if(!isset($_SESSION['pseudo']))
{
$condition=true;
}
else
{
if ($_SESSION['pseudo']=="")
{
$condition=true;
}
else
{
$condition=false;
}
}
if ($condition==true)
{...}

Là, au moins, t'es sur que ta condition ($_SESSION['pseudo']=="") ne t'enverra pas das les roses car $_SESSION['pseudo'] existe forcément si elle doit être évaluée.

Modifié par Bourinho
Posté (modifié)

Son code était correct, car si $_SESSION['pseudo'] n'existe pas on continue sans évaluer la seconde condition alors que si elle (la variables) existe on vérifiera la seconde condition avant de continuer.

Modifié par petit-ourson
Posté

Ok, en fait je faisais une analogie avec un problème quasiment identique qui est le suivant :

if ((isset($_POST['Truc']))&&($_POST['Truc']==1))

Ca renvoit un message d'erreur ("WARNING") alors que l'on fait le isset avant...du coup, j'ai un peu de mal avec la chronologie dans les conditions PHP...

Posté
Ok, en fait je faisais une analogie avec un problème quasiment identique qui est le suivant :

if ((isset($_POST['Truc']))&&($_POST['Truc']==1))

Ca renvoit un message d'erreur ("WARNING") alors que l'on fait le isset avant...du coup, j'ai un peu de mal avec la chronologie dans les conditions PHP...

Bon.. C'est typiquement le cas où l'on peut utiliser le '@' :

if(@$_POST['truc']=="1")

Seulement, il faut se méfier, car php est assez permissif.

Pour lui, les valeurs '1', 1 et true peuvent avoir la même signification, suivant les cas.

Posté

Merci Anonymous!!!

Donc, si j'ai bien compris, la condition que tu proposes donne :

_vrai si $_POST['Truc']="1" (ou ce qu'on veut suivant ce que l'on a à tester...)

_faux sinon et on n'a pas de message d'erreur si $_POST['Truc'] n'existe pas!!!

Si c'est ça, ça m'arrange bien!!!!

Posté

Non, pas tout à fait.

La condition == (double égal) renvoie vrai si ce que tu compares peut être assimilé à 1.

Par exemple :

if($truc == 1) renvoit vrai si

$truc = '1' (1 en chaîne de caractères)

$truc = 1 (1 numérique)

$truc = true

Si tu veux vérifier une égalité stricte (même valeur ET même type), il faut utiliser une triple égalité (===)

Par exemple, si tu veux être sûr que $truc est égal à 1 numérique, il faudra utiliser

if($truc === 1)

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...