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


Genki
Réponse acceptée

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
Réponse acceptée

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()

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
Auteur

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. :)

Serg77
Auteur

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

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
Auteur

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