Page 1 sur 1

Date dans url

Posté : 21 nov. 2016, 22:03
par yoann38
Salut à tous
Voila j'essai de trier mes actu avec la possiblité via un formulaire de les trier par :
Toutes
Aujourd'hui
Demain
Ce week end.

Mais je bloque quelque par, il me dit que la variable est vide et pourtant il me semble bien l'avoir définis ...
Code:
<?php
$typeDate = $_POST["date"];
$typeDate = (in_array($typeDate, array("aujourdhui", "demain", "we"))) ? $typeDate : "aujourdhui";
echo $typeDate;
?>

 <?php 
	 $sql = 'SELECT * FROM `loisirs`  JOIN regions ON regions.region_id = loisirs.id_region WHERE loisirs.date_fin_sortie > NOW() AND loisirs.valide = 1';
	if (!empty($_REQUEST['region'])) {
		$sql .= ' AND regions.url = \''.$_REQUEST['region'].'\'';
	}
	if (!empty($_REQUEST['departement'])) {
		$sql .= ' AND loisirs.id_departements = '.$_REQUEST['departement'];
	}
	if (!empty($_REQUEST['loisir'])) {
		$sql .= ' AND loisirs.genre_loisir = \''.$_REQUEST['loisir'].'\'';
	}
	
	if (!empty($_REQUEST['ville'])) {
		$sql .= ' AND loisirs.city = \''. getRealValue($_REQUEST['ville']). '\'';
	}
	
switch ($typeDate) :
default:
case "aujourdhui" :
$requete = "SELECT * FROM `loisirs`  JOIN regions ON regions.region_id = loisirs.id_region WHERE loisirs.date_fin_sortie= '".date('Y-m-d h:i:s',strtotime('today'))."'";
break;

case "demain":
$requete = "SELECT * FROM `loisirs`  JOIN regions ON regions.region_id = loisirs.id_region WHERE loisirs.date_fin_sortie = '".date('Y-m-d h:i:s',strtotime('tomorrow'))."'";
break;

case "we" :
$requete = "SELECT * FROM `loisirs`  JOIN regions ON regions.region_id = loisirs.id_region WHERE loisirs.date_fin_sortie BETWEEN '".date('Y-m-d h:i:s',strtotime('next Saturday'))."' AND ".date('Y-m-d h:i:s',strtotime('next Monday'))."'"; //démarre à minuit
break;
endswitch;
	
	// Execution de la requete
	$req = $bdd->query($sql);


// Et enfin mon petit formulaire:
 <div class="filter-tabs">

<form method="post" >
Aujourd'hui <input type="radio" name="date" value="aujourdhui" >
Demain <input type="radio" name="date" value="demain" >
Ce week-end <input type="radio" name="date" value="we" >
<input type="submit" value"=Envoyer" >
</form>
</div>
Je me retrouve avec mes 2 requetes que j'aimerais combiner mais ne vois comment faire:
echo des requetes par exemple:

echo $sql:
SELECT * FROM `loisirs` JOIN regions ON regions.region_id = loisirs.id_region WHERE loisirs.date_fin_sortie > NOW() AND loisirs.valide = 1 AND regions.url = 'rhone-alpes' AND loisirs.city = 'Bourg En Bresse'
echo $requete:
SELECT * FROM `loisirs` JOIN regions ON regions.region_id = loisirs.id_region WHERE loisirs.date_fin_sortie= '2016-11-21 12:00:00'

Re: Date dans url

Posté : 22 nov. 2016, 09:25
par Spols
Il y a 2 problème distinct je pense

Il te dit que ta variable est pas définie car tu cherche à la récupèrer à chaque fois, et pas seulement quand un formulaire est envoyer, tu devrais tester son existence avant de la récupèrer et gerer le cas de la première éxécution du script.

Pour la combinaison des requètes, tu peux utiliser le même genre de construction que tes régions, département etc.

Utilise ton switch pour ajouter ta clause sur loisirs.date_fin_sortie et un vrai cas défaut pour > NOW()
ensuite tu ajoute au besoin des filtre de régions, département, ....

Re: Date dans url

Posté : 22 nov. 2016, 18:29
par yoann38
Re,
Alors voilà ce que j'ai fait j'ai commencé par vérifié si typeDate était vide ou pas et suivant la case coché attribué la bonne requete.
Puis je améliorer ou pas, selons vous.
PS: Mon url ne change pas suivant les filtres j'aurais passé en GET au lieu de POST justement, mais la requete ne s'éxecute pas ainsi
<?php 
	 $sql = 'SELECT * FROM `loisirs`  JOIN regions ON regions.region_id = loisirs.id_region WHERE loisirs.date_fin_sortie > NOW() AND loisirs.valide = 1';
	if (!empty($_REQUEST['region'])) {
		$sql .= ' AND regions.url = \''.$_REQUEST['region'].'\'';
	}
	if (!empty($_REQUEST['departement'])) {
		$sql .= ' AND loisirs.id_departements = '.$_REQUEST['departement'];
	}
	if (!empty($_REQUEST['loisir'])) {
		$sql .= ' AND loisirs.genre_loisir = \''.$_REQUEST['loisir'].'\'';
	}
	
	if (!empty($_REQUEST['ville'])) {
		$sql .= ' AND loisirs.city = \''. getRealValue($_REQUEST['ville']). '\'';
	}
	
	// Parametre date *** travail en cours
    if(empty($_POST["date"])) { $_POST["date"] = NULL;}
    $typeDate = $_POST["date"];
    $typeDate = (in_array($typeDate, array("aujourdhui", "demain", "we"))) ? $typeDate : NULL;
	
	// Gestion par date rapide
	switch ($typeDate) :
	default:
	case "Toutes" :
	$sql .= "";
	break;
	
	case "aujourdhui" :
	$sql .= " AND loisirs.date_fin_sortie <= '".date('Y-m-d h:i:s',strtotime('today'))."'";
	break;
	
	case "demain":
	$sql .= " AND loisirs.date_fin_sortie <= '".date('Y-m-d h:i:s',strtotime('tomorrow'))."'";
	break;
	
	case "we" :
	$sql .= " AND loisirs.date_fin_sortie <= '".date('Y-m-d',strtotime('next Saturday'))."' AND loisirs.date_fin_sortie >= ".date('Y-m-d',strtotime('next Monday'))."'"; //démarre à minuit
	break;
	endswitch;
Et le formulaire:
<form method="post" >
Toutes <input type="radio" name="date" value="toutes" >
Aujourd'hui <input type="radio" name="date" value="aujourdhui" >
Demain <input type="radio" name="date" value="demain" >
Ce week-end <input type="radio" name="date" value="we" >
<input type="submit" value"Envoyer" >
</form>
Merci à vous

Re: Date dans url

Posté : 22 nov. 2016, 18:45
par Vapegnast
Pourquoi tu ne rajoute dans form , action="lapageactuelle.php" pour recuperer plus facilement tes valeurs?

Re: Date dans url

Posté : 22 nov. 2016, 19:42
par yoann38
J'aimerais faire ça en GET
Mais je bloque $_GET["date"] est vide a priori

Code en $_GET:
Formulaire
<form  method="GET">
Toutes <input type="radio" name="date" value="toutes" >
Aujourd'hui <input type="radio" name="date" value="aujourdhui" >
Demain <input type="radio" name="date" value="demain" >
Ce week-end <input type="radio" name="date" value="we" >
<input type="submit" value"Envoyer" >
</form>
<?php 
	 $sql = 'SELECT * FROM `loisirs`  JOIN regions ON regions.region_id = loisirs.id_region WHERE loisirs.date_fin_sortie > NOW() AND loisirs.valide = 1';
	if (!empty($_REQUEST['region'])) {
		$sql .= ' AND regions.url = \''.$_REQUEST['region'].'\'';
	}
	if (!empty($_REQUEST['departement'])) {
		$sql .= ' AND loisirs.id_departements = '.$_REQUEST['departement'];
	}
	if (!empty($_REQUEST['loisir'])) {
		$sql .= ' AND loisirs.genre_loisir = \''.$_REQUEST['loisir'].'\'';
	}
	
	if (!empty($_REQUEST['ville'])) {
		$sql .= ' AND loisirs.city = \''. getRealValue($_REQUEST['ville']). '\'';
	}
	
	// Parametre date *** travail en cours
    if(empty($_GET["date"])) { $_GET["date"] = NULL;}
    $typeDate = $_GET["date"];
  
	
	// Gestion par date rapide
	switch ($typeDate) :
	default:
	case "Toutes" :
	$sql .= "";
	break;
	
	case "aujourdhui" :
	$sql .= " AND loisirs.date_fin_sortie <= '".date('Y-m-d h:i:s',strtotime('today'))."'";
	break;
	
	case "demain":
	$sql .= " AND loisirs.date_fin_sortie <= '".date('Y-m-d h:i:s',strtotime('tomorrow'))."'";
	break;
	
	case "we" :
	$sql .= " AND loisirs.date_fin_sortie <= '".date('Y-m-d',strtotime('next Saturday'))."' AND loisirs.date_fin_sortie >= ".date('Y-m-d',strtotime('next Monday'))."'"; //démarre à minuit
	break;
	endswitch;

	echo 'test'. $_GET["date"].'<br>';
	echo $sql;

Re: Date dans url

Posté : 22 nov. 2016, 19:56
par @rthur
Bonjour,

Fait un var_dump($_GET) au début de ta page PHP ça va t'afficher toutes les variables que tu récupères en GET ça peut t'aider pour debuguer.

Petite coquille, il te manque un égal ici : value"Envoyer"

Re: Date dans url

Posté : 22 nov. 2016, 20:20
par yoann38
Merci pour le égal ;)
Le var_dump me renvoie bien la région et la ville de la page concerné par exemple donc pas de problème
Si je clique sur un de mes filtres : toutes, aujourd'hui,demain....
Car par exemple une fois selectionné mon filtre je me retrouve bien avec une url du type:
http://127.0.0.1/test/actu/rhone-alpes/ ... aujourdhui

Le parametre se rajoute bien dans l'url mais je n'arrive pas a l'affichier via un simple echo ....
$_GET["date"] devrait faire l'affaire pourtant ....

Re: Date dans url

Posté : 22 nov. 2016, 20:37
par @rthur
Il te donne quoi le var_dump sur la page http://127.0.0.1/test/actu/rhone-alpes/ ... aujourdhui ?

Re: Date dans url

Posté : 22 nov. 2016, 20:40
par yoann38
array (size=2)
'region' => string 'rhone-alpes' (length=11)
'ville' => string 'grenoble' (length=8)

Aucune trace de date ....
PS:
Je pense pas que mon htaccess est quoi que ce soit avoir avec ça mais bon
je construit mon url ainsi :
Faut il rajouter quelque chose pour la date ?
# -- actu + région + ville
RewriteRule ^actu /([A-Za-z0-9_-]+)/([A-Za-z0-9_-]+).html$ actu .php?region=$1&ville=$2
On dirait que tout simplement le formulaire ne marche pas alors que le parametre se rajoute bien ds l'url ....:/

J'ai également essayé:
$_GET["date"] = (in_array($_GET["date"], array("toutes","aujourdhui", "demain", "we"))) ? $_GET["date"] : NULL;
	echo $_GET["date"];

	
	// Gestion par date rapide
	switch ($_GET["date"]) :
	default:
	case "Toutes" :
	$sql .= "";
	break;
	
	case "aujourdhui" :
	$sql .= " AND loisirs.date_fin_sortie <= '".date('Y-m-d h:i:s',strtotime('today'))."'";
	break;
	
	case "demain":
	$sql .= " AND loisirs.date_fin_sortie <= '".date('Y-m-d h:i:s',strtotime('tomorrow'))."'";
	break;
	
	case "we" :
	$sql .= " AND loisirs.date_fin_sortie <= '".date('Y-m-d',strtotime('next Saturday'))."' AND loisirs.date_fin_sortie >= ".date('Y-m-d',strtotime('next Monday'))."'"; //démarre à minuit
	break;
	endswitch;

Re: Date dans url

Posté : 23 nov. 2016, 00:25
par @rthur
Ah bah c'est tout simple, tu ne transmets pas tes paramètres en GET lors de ton url rewriting.

Une solution est visible là :
http://stackoverflow.com/a/18162822

Re: Date dans url

Posté : 23 nov. 2016, 18:27
par yoann38
Heu.... ca coince un peu la
sur la fin de la réécriture ....


RewriteRule ^sortie/([A-Za-z0-9_-]+)/([A-Za-z0-9_-]+).html$ sortie.php?region=$1&ville=$2&date={QUERY_STRING} [NC,L]

Re: Date dans url

Posté : 23 nov. 2016, 18:46
par yoann38
Je deviens fou en testant le bout de code ci-dessoius dans une page à part ca marche
mais si je fait un include du code ds ma page ca ne marche plus ....
<form  method="GET">
Toutes <input type="radio" name="test" value="toutes" >
Aujourd'hui <input type="radio" name="test" value="pierre" >
Demain <input type="radio" name="test" value="demain" >
Ce week-end <input type="radio" name="test" value="we" >
<input type="submit" value"Envoyer" >
</form>

<?php
if(empty($_GET['test'])) {
	$_GET['page']=NULL;
}else{
echo $_GET['test'];}
?>
Le probl-me vient de l'url rewriting ?

Re: Date dans url

Posté : 23 nov. 2016, 18:49
par @rthur
Fais un var_dump($_GET), c'est la seule façon fiable de savoir ce que ta page reçoit.
Si elle ne reçoit pas tes paramètres, c'est que tu as un problème de réécriture

Re: Date dans url

Posté : 23 nov. 2016, 18:56
par yoann38
J'ai bien conscience que c'est un problème de réécriture du coup j'ai :
RewriteRule ^actu/([A-Za-z0-9_-]+)/([A-Za-z0-9_-]+).html$ actu.php?region=$1&ville=$2?test={QUERY_STRING} [NC,L]

pour url normalement final sous la forme de :
127.0.0.1/evolution/actu/rhone-alpes/grenoble.html?test=demain

Re: Date dans url

Posté : 23 nov. 2016, 19:02
par yoann38
Bon Juste un gros "LoL"
Le problème venait mon ordre dans mon htaccess pour l'url rewrite.