Regex php interdire mot dans chaine

Résolu/Fermé
oxonium - 21 juin 2010 à 02:50
 oxonium - 21 juin 2010 à 18:28
Bonjour,
voilà mon problème :
je n'arrive pas à interdire l'occurrence d'un mot dans une chaine de caractère.
Je souhaiterais interdire le mot "login" qui suit la chaine "admin/" mais permettre à d'autre mots suivant cette même chaine d'être acceptées.
Voilà un exemple pour être plus clair :
j'ai différentes url de type :
www.monsite.com/admin/login.html
www.monsite.com/admin/interface_utilisateur.html
www.monsite.com/admin/gestionnaire.html

je souhaiterais que les 2 dernières url soit acceptées mais pas la 1ère.
j'ai tenté un :
preg_match("#admin/(^login)#", $_SERVER['REQUEST_URI'])
mais j'avoue ne pas être une lumière en regex.
J'ai eu beau chercher sur google, je n'ai pas trouvé ce que je cherchais réellement.
Merci d'avance

1 réponse


if (strpos($_SERVER['REQUEST_URI'], "admin/login.html") === false) {
     header('Location: index.php');
}

# ton code ici
0
Dr Zoidberg Messages postés 529 Date d'inscription jeudi 28 juin 2007 Statut Membre Dernière intervention 12 juin 2015 100
21 juin 2010 à 08:48
J'allais le dire :). Il ne faut pas utiliser preg_match pour des requêtes aussi simples c'est beaucoup plus lourd.
Il faut en priorité utiliser les fonctions de chaines PHP https://www.php.net/manual/fr/ref.strings.php
0
Bonjour,
je me suis mal exprimé, ce que je cherche à faire c'est activer une fonction timer qu'une fois la page de login validé.
Autrement dit ma fonction va s'activer juste après avoir validé le formulaire de login et ma variable de session $_SESSION["temps"] sera effective à ce moment là et continuera de l'être si l'on reste dans la partie admin.
Pour résumer ma fonction doit s'activer dès qu'elle rencontre une page admin/qqch.html autre que login.
d'où l'interdiction de l'occurrence "login".
Voilà le code de la fonction (qui est fonctionnelle mis à part la partie où je vous questionne :) ) :
public function timer() {
if(preg_match("#admin/^(login)#", $_SERVER['REQUEST_URI'])) {
$_SESSION['temps'] = mktime(0, 0, date('s'), date('m'), date('d'), date('y') );
if((mktime(0, 0, 10, date('m'), date('d'), date('y') ) - $_SESSION['temps']) == 0) {
session_destroy();
} elseif((mktime(0, 0, 10, date('m'), date('d'), date('y') ) - $_SESSION['temps']) < 0) {
$_SESSION['message_login'] = "Vous avez été déconnecté !";
echo (mktime(0, 0, 10, date('m'), date('d'), date('y') ) - $_SESSION['temps']);
} else{
echo (mktime(0, 0, 10, date('m'), date('d'), date('y') ) - $_SESSION['temps']);
}
}
}

PS : le else est inutile c'est juste pour avoir un affichage que je fais ça, et le elseif sera remplacé en else une fois la fonction fonctionnelle. La durée de la session est de 10sec afin de vérifier assez rapidement si je suis bien déloggé une fois le temps écoulé.
Configuration: Mac OS X / Safari 533.4
0
Merci à vous deux, j'ai trouvé la solution :) avec strpos. Je donne le code au cas ou ça intéresse quelqu'un :
if(strpos($_SERVER['REQUEST_URI'], "admin/") && !strpos($_SERVER['REQUEST_URI'], "login.html")) { //CODE }
0