Intervalle de dates en SQL (via PHP)

Résolu/Fermé
Thore - 27 juil. 2014 à 12:38
 Thore - 27 juil. 2014 à 16:09
Bonjour,

J'ai un problème qui me gène concernant la réalisation d'une requête SQL en PHP.
J'ai un formulaire qui contient deux inputs type date, et j'aimerai récupérer les dates entrées pour que, côté PHP et SQL, on puisse retirer toutes les informations entrées entre ces deux dates.

Je procède comme ça en PHP pour la requête :
- je récupère les données entrées via $_POST['NomInput']
- j'utilise regex pour convertir mes dates au format AAAA-MM-JJ (pour la BDD)
- j'insère ces données dans la requête (je fais un BETWEEN ... AND)

Et lorsque je valide et que je test, aucune donnée ne sort alors qu'il en existe bien...

Quelqu'un a une idée ?
Merci par avance
A voir également:

8 réponses

zermat Messages postés 160 Date d'inscription jeudi 19 juin 2014 Statut Membre Dernière intervention 3 juin 2016 16
27 juil. 2014 à 13:40
Code ?
0
Ah oui, je l'ai encore oublié. ^^'

Je donne côté PHP :
$d_debut = $_POST['d_debut'];
$d_fin = $_POST['d_fin']; // on récupère les dates
	
$d_debut = preg_replace('#([0-3].)/([0-1].)/(2.{3})#', '$3-$2-$1', $d_debut); // on formate pour la BDD (AAA-MM-JJ)
$d_fin = preg_replace('#([0-3].)/([0-1].)/(2.{3})#', '$3-$2-$1', $d_fin);

$rep = $bdd->prepare('SELECT * FROM formulaire WHERE date BETWEEN :debut AND :fin');
$rep->execute(array('debut'=> $d_debut, 'fin' => $d_fin'));
// puis je récupère dans un echo


J'ai testé le code en saisissant moi-même les dates dans le code (donc passer par un query), et la requête fonctionne, donc le problème est au passage des dates.
0
zermat Messages postés 160 Date d'inscription jeudi 19 juin 2014 Statut Membre Dernière intervention 3 juin 2016 16
27 juil. 2014 à 14:11
remplacez:

$rep->execute(array('debut'=> $d_debut, 'fin' => $d_fin'));

par

$rep->execute(array(':debut'=> $d_debut, ':fin' => $d_fin'));
0
Tout d'abord merci pour ton aide.

Ta solution ne fonctionne pas, elle me donne une erreur.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
zermat Messages postés 160 Date d'inscription jeudi 19 juin 2014 Statut Membre Dernière intervention 3 juin 2016 16
27 juil. 2014 à 14:50
oui il y a un guillemet en plus :

$rep->execute(array(':debut'=> $d_debut, ':fin' => $d_fin')); //le guillemet à la fin

$rep->execute(array(':debut'=> $d_debut, ':fin' => $d_fin)); // ça c'est juste
0
Ah oui en effet, tout ça à cause d'un guillemet... Merci !

Mais maintenant que ça fonctionne, du moins que les dates sont prises en compte, quand j'exécute ma requête, ça me retourne rien du tout alors que j'ai du contenu dans ma BDD.

Une idée ? Pourtant j'ai bien fais attention de convertir mes dates au format anglais.
0
zermat Messages postés 160 Date d'inscription jeudi 19 juin 2014 Statut Membre Dernière intervention 3 juin 2016 16
27 juil. 2014 à 15:43
Ajouter

echo 'debut: ' . $d_debut . '<br>';
echo 'fin: ' . $d_fin . '<br>';

avant
$rep = $bdd->prepare('SELECT * FROM formulaire WHERE date BETWEEN :debut AND :fin');

pour verifiez qu'il s'agit bien du bon format.

et comment tu fais le fetch pour recuperer le resultat ?
0
Le problème venait de mes dates, j'aurai dû vérifier plus tôt mais aucune donnée n'est transférée. ^^

Merci pour ton aide.
0