[RESOLU] Récuperer le contenu d'una variable et $GET

Mammouth du PHP | 643 Messages

22 avr. 2016, 15:23

Salut à tous.
J'arrange des details sur le site nottament l'url rewriting

Je récupère actuellement mes valeurs avec $_REQUEST['loisir'])
$_REQUEST['loisir']) vaut = 10 par exemple

Du coup j'ai l'url suivante:
http://monsite.fr/toutes-les-actu-10.html

mon htaccess.
RewriteCond %{HTTP_HOST} ^www\.monsite.fr$
RewriteRule ^(.*) http://monsite.fr/$1  [QSA,L,R=301]

# -- la ligne en question ci-dessous --
RewriteRule ^toutes-les-actu-([A-Za-z0-9_-]+).html$ actu.php?loisir=$1

RewriteRule ^toutes-les-actu.html actu.php
#RewriteRule ^([A-Za-z0-9_-]+).html$ $1.php

Je souhaite la valeur de 10 qui vaut pour l'exemple: bricolage
et ainsi obtenir l'url suivante : toutes-les-actu-bricolage.html au lieu de toutes-les-actu-10.html

Dans mon code je récupère la valeur bricolage comme ça:
ucfirst($aLoisirs[$_REQUEST['loisir']])
et le numéro comme ça:
$_REQUEST['loisir']
comment résoudre le problème svp, Merci à vous

Mammouth du PHP | 2703 Messages

22 avr. 2016, 15:26

en testant $_REQUEST['loisir'] avec http://php.net/ctype_digit

Mammouth du PHP | 643 Messages

22 avr. 2016, 15:38

Heu je ne vois pas comment l'exemple :
<?php
$strings = array('1820.20', '10002', 'wsl!12');
foreach ($strings as $testcase) {
  if (ctype_digit($testcase)) {
    echo "La chaîne $testcase ne contient que des entiers.\n";
  } else {
    echo "La chaîne $testcase ne contient pas que des entiers.\n";
  }
}
?>
peut permettre d'avoir l'url souhaité et modifier ainsi mon htaccess...

Mammouth du PHP | 2703 Messages

22 avr. 2016, 15:52

RewriteRule ^toutes-les-actu-([A-Za-z0-9_-]+).html$ actu.php?loisir=$1
donc ton .htaccess permet déjà d'avoir 10 ou bricolage.
une solution plus simple pourrait être d'avoir
RewriteRule ^toutes-les-actu-([0-9]+).html$ actu.php?idloisir=$1
RewriteRule ^toutes-les-actu-([A-Za-z_-]+).html$ actu.php?aLoisirs=$1

Mammouth du PHP | 643 Messages

22 avr. 2016, 23:44

Alors en fait ui 10 est bien accessible mais pas bricolage par exemple.
Faut que ca filtre ma requete biensur qui va avec:
$_REQUEST['departement'] = !empty($_REQUEST['departement']) ? $_REQUEST['departement'] : NULL;
	$_REQUEST['departement'] = !empty($_SESSION['membre']) && empty($_REQUEST['departement']) && empty($_REQUEST['region']) ? $_SESSION['membre']['id_departements'] :$_REQUEST['departement'];
	
    $sql = "SELECT * FROM `loisirs`  JOIN `regions` ON `regions`.`region_id` = `loisirs`.`id_region` WHERE `loisirs`.`date_fin_sortie` > NOW() AND `loisirs`.`valide` = 1";
	
  	$sql .= !empty($_REQUEST['region']) ? ' AND `regions`.`url` = "'.$_REQUEST['region'].'"' : NULL; // region
    $sql .= !empty($_REQUEST['departement']) ? ' AND `loisirs`.`id_departements` = '.$_REQUEST['departement'] : NULL; // dep
    $sql .= !empty($_REQUEST['loisir']) ? ' AND `loisirs`.`id_type_loisirs` = "'.$_REQUEST['loisir'].'"' : NULL; // loisir

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

26 avr. 2016, 15:46

Bonjour,

Dans ton fichier htaccess, la ligne RewriteRule ^toutes-les-actu-([A-Za-z0-9_-]+).html$ actu.php?loisir=$1 va capturer la dernière chaine de caractères alphanumérique passée dans l'url avant le ".html"

Déjà sur ce point : le "point" est un caractère spécial des expressions régulières qui correspond à n'importe quel caractère. Pour désigner le caractère "." il faut protéger celui-ci : "\."

Quoi qu'il en soit, avec cette condition
"toutes-les-actu-bricolage.html" sera redirigée vers actu.php?loisir=bricolage
"toutes-les-actu-10.html" sera redirigée vers actu.php?loisir=10

Il te faut dans les deux cas utiliser $_GET['loisir'] pour récupérer ta valeur (ou $_REQUEST) et adapté ton traitement en fonction de valeur récupérée : si c'est un nombre ou si c'est une chaine. A vue de nez, si c'est une chaine, il faut que tu puisses dire quelque part que si la valeur reçue est "bricolage", alors c'est la page d'id 10 qu'il faut ouvrir...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 643 Messages

28 avr. 2016, 07:20

Salut à tous.
Je reviens vers vous, j'essaie toujours de solutioner mon problème j'ai essayer de faire plus simple.
le problème reste le même :
toutes-les-actu-bricolage.html ( ne filtre pas mes requete en gros il dit que bricolage n'est pas défini)
mais
toutes-les-actu-10.html ( marche correctement)

Coté code:
$h1 .= !empty($region_id) ? 'les infos : ' .$aRegion[$region_id] : NULL; // La région
$h1 .= !empty($_REQUEST['loisir']) &&  empty($_REQUEST['departement'])  &&  empty($_REQUEST['ville']) ? ' <a href="actu-'.$_REQUEST['loisir'].'.html">actu de ' .ucfirst($aLoisirs[$_REQUEST['loisir']]).'</a>': NULL;
Coté htaccess.
# -- actu + région + type
RewriteRule ^actu/([A-Za-z0-9_-]+)-([A-Za-z0-9_-]+).html$ list.php?region=$1&loisir=$2

# -- actu + région -------------------
RewriteRule ^actu/([A-Za-z0-9_-]+).html$ list.php?region=$1

Mon array:
$aLoisirs = array ( 2 => 'couture', 3 => 'service', 4 => 'ménage', 5 => 'garde', 6 => 'animaux', 7 => 'occasion', 8 => 'neuf', 9 => 'Divers', 10 => 'bricolage', 11 => 'astuce', 13 => 'systemed', 14 => 'autres',  17 => 'encore',  18 => 'encore', 23 => 'encore'  );
Donc en gros ça marche que si je met la numéro de l'array mais pas la valeur associé à celui-ci...................
Merci encore

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

28 avr. 2016, 09:07

Bonjour,

SI $_REQUEST['loisir'] contient un id, ton traitement qui se base sur l'id fonctionne...
Si $_REQUEST['loisir'] contienne une chaine, ton traitement qui se base sur l'id ne peut pas fonctionner...

Adapte ton traitement pour détecter si tu reçois un chiffre ou une chaine et faire ce qui doit être fait dans un cas comme dans l'autre :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 643 Messages

28 avr. 2016, 09:15

coment adapter le traitement pour cela justement svp ? merci a vs

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

28 avr. 2016, 09:31

Il te faut déjà distinguer si $_REQUEST['loisir'] est un nombre ou pas. Si c'est un nombre, rien à changer à ton traitement, tu utilises la valeur récupérée.

Si c'est une chaine, alors tu peux utiliser array_search() pour retrouver la clé associée à cette valeur dans ton tableau. Ainsi pour "bricolage", cette méthode te retournera 10 et tu pourras reprendre ton traitement comme si un nombre avait été spécifié dans l'url :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 643 Messages

28 avr. 2016, 16:30

J'ai fait ceci du coup:
//mon array
$aLoisirs = array ( 2 => 'couture', 3 => 'service', 4 => 'ménage', 5 => 'garde', 6 => 'animaux', 7 => 'occasion', 8 => 'neuf', 9 => 'Divers', 10 => 'bricolage', 11 => 'astuce', 13 => 'systemed', 14 => 'autres',  17 => 'encore',  18 => 'encore', 23 => 'encore'  );

// Ca renvoi une chaine par exemple: bricolage
	echo 'On affiche le loisir demandé: ' .$_REQUEST['loisir'];
	
	//test
	$key = array_search ($_REQUEST['loisir'],$aLoisirs); // $key = 2;
	echo 'le numéro de loisir' .$key;
mais $key ne renvoi rien

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

29 avr. 2016, 11:31

Si $key ne contient rien, c'est que array_search() n'a pas trouvé de correspondance dans ton tableau pour la valeur $_REQUEST['loisir']

As-tu vérifier cette dernière ? et est-elle bien présente en l'état dans ton tableau $aLoisirs ? (par exemple tu as une valeur "Divers" avec un D majuscule. Si $_REQUEST['loisir'] contient "divers", aucun résultat ne sera retourné.

Tu peux d'ailleurs tester simplement la méthode :
$key = array_search ('bricolage', $aLoisirs);
  echo 'le numéro de loisir : ' .$key;
Si celle-ci te retourne 10, c'est que $_REQUEST['loisir'] ne contient pas l'information attendue

Par ailleurs, tu as 3 valeurs "encore", seule la première clé sera retournée par array_search()
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...