Intervalle de dates en SQL (via PHP) [Résolu/Fermé]

Signaler
-
 Thore -
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

8 réponses

Messages postés
160
Date d'inscription
jeudi 19 juin 2014
Statut
Membre
Dernière intervention
3 juin 2016
15
Code ?
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.
Messages postés
160
Date d'inscription
jeudi 19 juin 2014
Statut
Membre
Dernière intervention
3 juin 2016
15
remplacez:

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

par

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

Ta solution ne fonctionne pas, elle me donne une erreur.
Messages postés
160
Date d'inscription
jeudi 19 juin 2014
Statut
Membre
Dernière intervention
3 juin 2016
15
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
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.
Messages postés
160
Date d'inscription
jeudi 19 juin 2014
Statut
Membre
Dernière intervention
3 juin 2016
15
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 ?
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.