Regex php interdire mot dans chaine

Résolu
oxonium -  
 oxonium -
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
A voir également:

1 réponse

Siluni
 

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   Statut Membre Dernière intervention   100
 
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
Oxydium
 
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
oxonium
 
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