[RESOLU] Date dans url

Mammouth du PHP | 643 Messages

21 nov. 2016, 22:03

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'

Mammouth du PHP | 1967 Messages

22 nov. 2016, 09:25

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, ....
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Mammouth du PHP | 643 Messages

22 nov. 2016, 18:29

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

Eléphanteau du PHP | 16 Messages

22 nov. 2016, 18:45

Pourquoi tu ne rajoute dans form , action="lapageactuelle.php" pour recuperer plus facilement tes valeurs?

Mammouth du PHP | 643 Messages

22 nov. 2016, 19:42

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;

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

22 nov. 2016, 19:56

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"
Quand tout le reste a échoué, lisez le mode d'emploi...

Mammouth du PHP | 643 Messages

22 nov. 2016, 20:20

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

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

22 nov. 2016, 20:37

Il te donne quoi le var_dump sur la page http://127.0.0.1/test/actu/rhone-alpes/ ... aujourdhui ?
Quand tout le reste a échoué, lisez le mode d'emploi...

Mammouth du PHP | 643 Messages

22 nov. 2016, 20:40

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;

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

23 nov. 2016, 00:25

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
Quand tout le reste a échoué, lisez le mode d'emploi...

Mammouth du PHP | 643 Messages

23 nov. 2016, 18:27

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]

Mammouth du PHP | 643 Messages

23 nov. 2016, 18:46

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 ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

23 nov. 2016, 18:49

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
Quand tout le reste a échoué, lisez le mode d'emploi...

Mammouth du PHP | 643 Messages

23 nov. 2016, 18:56

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

Mammouth du PHP | 643 Messages

23 nov. 2016, 19:02

Bon Juste un gros "LoL"
Le problème venait mon ordre dans mon htaccess pour l'url rewrite.