Problème if et raisonnement

Par Serg77, il y a 10 ans


Bonjour j'ai un petit problème avec mes if, je m'explique

j'ai ce code :

if(!empty($_GET['id']) && empty($_GET['s'])) { echo "toto"; } else if (!empty($_GET['s']) && $_GET['s'] == "show" && !empty($_GET['id'])) { echo "ZOOM"; } else { //Redirection header('Location: index.php'); exit; }

si il y a rien alors on affiche toto profil.php?id=4 -> toto

si il y a show alors on affiche profil.php?id=4&s=show -> show

Si il y a n'importe quoi dans le show alors redirection

Mais j'ai un problème, si je fais profil.php?id=4&s= (j'ajoute rien)

Alors il m'affiche la première condition, comment faire pour dire que si il y a rien dans le s alors on redirige mais sans pour autant géné les autres conditions.

7 réponses

lionel-gaming, il y a 10 ans

Bonjour, je ne suis pas un pro, mais d'après se que je vois ton code et répétitif et ne peut être éviter, car au final si tu regarde bien ta première condition peut être remplacer par la deuxième et donc avoir qu'un seule condition d'après se que tu dit ^^ car au final si j'ai bien compris tu veux que lorsque $_GET['s'] est vide alors tu rediriges peut importe si $_GET['id'] est vide ou pas.
Donc ton code pourrais resembler à ceci:

if (!empty($_GET['s']) && $_GET['s'] == "show" && !empty($_GET['id'])) { echo "ZOOM"; } else { //Redirection header('Location: index.php'); exit; }

En espérent avoir bien compris ton attente, et avoir répondu à cette dernière ^^

Serg77, il y a 10 ans

Salut, merci pour ta réponse mais c'est pas ce que je veux, par exemple je veux que si le membre est sur profil.php?id=4 il y a son profil d'affiché (toto) et si il va dans profil.php?id=4&s=show alors on affiche le show (zoom)
et si il y a rien sans le s ou alors qu'il ajoute autre chose que le show alors redirige. :)

Genki, il y a 10 ans

Ceci fonctionne pour moi :

if (!empty($_GET['id']) && !isset($_GET['s'])) { echo "toto"; } elseif ($_GET['s'] == "show" && !empty($_GET['id'])) { echo "ZOOM"; } else { //Redirection header('Location: index.php'); exit; }
lionel-gaming, il y a 10 ans

D'accord, alors après avoir regarder sur php.net je pense que la solution pour ton problème est la suivante:

if(!empty($_GET['id']) && !isset($_GET['s'])) { echo "toto"; } else if (!empty($_GET['s']) && $_GET['s'] == "show" && !empty($_GET['id'])) { echo "ZOOM"; } else { //Redirection header('Location: index.php'); exit; }

"isset" vérifi si la variable existe et est différente de null, pour plus d'information je t'invites à visiter php.net et rechercher la fonction isst()

Serg77, il y a 10 ans

Good merci les gars, j'ai le résultat que je veux.

miniapple, il y a 10 ans

Pour être sûr que cela redirige l'utilisateur vers index.php, il faut s'assurer que le header(); est declaré avant n'importe quel output est envoyé que ce soit du HTML ou des lignes blanches d'un fichier. Par exemple, ce code va générer une erreur car il y a une balise html en haut.

<html> <?php header('http://www.exemple.com'); exit; ?>

Ensuite, on fait un exit; pour arrêter l'exécution du script. Voici quelque liens pour la référence:

  1. header
  2. exit
Serg77, il y a 10 ans

D'accord, donc à chaque header('Location:') je dois faire un exit ?