Sélection entre deux dates
Fermé
binousha_1022
Messages postés
41
Date d'inscription
mercredi 11 décembre 2019
Statut
Membre
Dernière intervention
25 juin 2020
-
Modifié le 30 janv. 2020 à 13:29
binousha_1022 Messages postés 41 Date d'inscription mercredi 11 décembre 2019 Statut Membre Dernière intervention 25 juin 2020 - 31 janv. 2020 à 11:19
binousha_1022 Messages postés 41 Date d'inscription mercredi 11 décembre 2019 Statut Membre Dernière intervention 25 juin 2020 - 31 janv. 2020 à 11:19
A voir également:
- Sélection entre deux dates
- Nombre de jours entre deux dates excel - Guide
- Itinéraire google map entre deux adresses - Guide
- Deux ecran pc - Guide
- Un ecouteur sur deux marche ✓ - Forum Audio
- Comment faire deux colonnes indépendantes dans word - Guide
4 réponses
Bonjour,
isset retourne un booléen, donc
En attendant que d'autres complètent sur le problème de sécurité de ta requête, une valeur dont le format attendu est strict est à contrôler avant de passer ça à une reqête sql.
isset retourne un booléen, donc
$conditionn'a aucun sens.
En attendant que d'autres complètent sur le problème de sécurité de ta requête, une valeur dont le format attendu est strict est à contrôler avant de passer ça à une reqête sql.
binousha_1022
Messages postés
41
Date d'inscription
mercredi 11 décembre 2019
Statut
Membre
Dernière intervention
25 juin 2020
30 janv. 2020 à 16:04
30 janv. 2020 à 16:04
Merci pour votre réponse mais si vous pouvez me corriger le code svp, je suis débutante en php donc je ne comprends pas certaines théories.
Bonjour,
Lorsque tu fais
Ces 2 variables ne contiennent pas les valeurs de $POST, mais les retour de isset, donc tu devrais tester si $_POST['datedeb'] et $_POST['datefin'] existent et contiennent quelque chose, et contrôler également si les valeurs des dates sont bien de format attendu.
On pourrait penser à faire un contrôle avec une regex (désolé, je fais ça en interactif).
Mais comme il est nécessaire de vérifier que la date est valide, autant passer ça directement à DateTime.
Si le $date_fr n'a pas un format valide, alors ça jettera une erreur, voir date_get_last_errors() ou encore faire ça dans un bloc try catch.
Bon, je préférerai que quelqu'un d'autres réponde, je ne suis pas du tout un très bon connaisseur de php ^^
Lorsque tu fais
$datedeb = isset($_POST['datedeb']) ; $datefin = isset($_POST['datefin']) ;
Ces 2 variables ne contiennent pas les valeurs de $POST, mais les retour de isset, donc tu devrais tester si $_POST['datedeb'] et $_POST['datefin'] existent et contiennent quelque chose, et contrôler également si les valeurs des dates sont bien de format attendu.
if( !empty($_POST['datedeb']) && !empty($_POST['datefin']) ) { // Contrôler également que les 2 variables sont de format attendu }
On pourrait penser à faire un contrôle avec une regex (désolé, je fais ça en interactif).
php > $date_fr = '31/01/2000'; php > echo preg_match('`^\d{2}/\d{2}/\d{4}$`', $date_fr); 1
Mais comme il est nécessaire de vérifier que la date est valide, autant passer ça directement à DateTime.
php > $date_fr = '31/01/2000'; php > $date = DateTime::createFromFormat('d/m/Y', $date_fr); php > echo $date->format('Y-m-d'); 2000-01-31
Si le $date_fr n'a pas un format valide, alors ça jettera une erreur, voir date_get_last_errors() ou encore faire ça dans un bloc try catch.
Bon, je préférerai que quelqu'un d'autres réponde, je ne suis pas du tout un très bon connaisseur de php ^^
jordane45
Messages postés
38424
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 février 2025
4 734
>
trifou
31 janv. 2020 à 11:03
31 janv. 2020 à 11:03
Bonjour,
Tu t'en sors pas mal... et la réponse est déjà faite (juste en dessous )
je préférerai que quelqu'un d'autres réponde, je ne suis pas du tout un très bon connaisseur de php ^^
Tu t'en sors pas mal... et la réponse est déjà faite (juste en dessous )
trifou
>
jordane45
Messages postés
38424
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 février 2025
31 janv. 2020 à 11:07
31 janv. 2020 à 11:07
Oui, je me suis endormi sur la rédaction de ma réponse, désolé je n'avais pas vu la tienne XD
jordane45
Messages postés
38424
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 février 2025
4 734
31 janv. 2020 à 10:32
31 janv. 2020 à 10:32
Bonjour,
Si tu veux comprendre (et corriger) ton code...
Commence par faire un ECHO de ta variable $sql.
Puis, copie le code de la requête ainsi obtenu directement dans l'interface de requête de ta bdd ( via l'onglet SQL de phpmyadmin par exemple)
Regarde ce que ta requête retourne et fonctionne ....
Si elle te retourne le résultat désiré... montre le nous.
Si ça t'affiche une erreur..et bien essais de la corriger....
NB: Tu as également un souci dans ton code php à la ligne 37
Une comparaison en PHP .. c'est avec DEUX (ou trois selon ce que tu veux faire) symboles EGALE .. mais là .. je ne vois pas pourquoi tu veux faire cette comparaison ...
Tu as un autre souci....
ISSET ... te retournera TRUE ou FALSE en fonction de si la variable EXISTE ou NON.
Donc tes variables $datedeb et $datefin ne contiendront JAMAIS les dates.. juste un booleen indiquant l'existante de ces variables en POST
Toi ce que tu veux c'est :
et par conséquent.. ta ligne 37 devient tout simplement
Histoire qu'à l'avenir tu évites ce genre d'erreurs... je t'invite fortement à lire ET A APPLIQUER le contenu de ce lien :
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
Si tu veux comprendre (et corriger) ton code...
Commence par faire un ECHO de ta variable $sql.
Puis, copie le code de la requête ainsi obtenu directement dans l'interface de requête de ta bdd ( via l'onglet SQL de phpmyadmin par exemple)
Regarde ce que ta requête retourne et fonctionne ....
Si elle te retourne le résultat désiré... montre le nous.
Si ça t'affiche une erreur..et bien essais de la corriger....
NB: Tu as également un souci dans ton code php à la ligne 37
if(isset($_POST['datedeb']) && $datefin = isset($_POST['datefin'])){
Une comparaison en PHP .. c'est avec DEUX (ou trois selon ce que tu veux faire) symboles EGALE .. mais là .. je ne vois pas pourquoi tu veux faire cette comparaison ...
Tu as un autre souci....
$datedeb = isset($_POST['datedeb']) ; $datefin = isset($_POST['datefin']) ;
ISSET ... te retournera TRUE ou FALSE en fonction de si la variable EXISTE ou NON.
Donc tes variables $datedeb et $datefin ne contiendront JAMAIS les dates.. juste un booleen indiquant l'existante de ces variables en POST
Toi ce que tu veux c'est :
$datedeb = !empty($_POST['datedeb']) ? $_POST['datedeb'] : NULL ; $datefin = !empty($_POST['datefin']) ? $_POST['datefin'] : NULL;
et par conséquent.. ta ligne 37 devient tout simplement
if($datedeb && $datefin )
Histoire qu'à l'avenir tu évites ce genre d'erreurs... je t'invite fortement à lire ET A APPLIQUER le contenu de ce lien :
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
binousha_1022
Messages postés
41
Date d'inscription
mercredi 11 décembre 2019
Statut
Membre
Dernière intervention
25 juin 2020
Modifié le 31 janv. 2020 à 11:33
Modifié le 31 janv. 2020 à 11:33
Merci à Trifou et Jordane45, je vais appliquer vos corrections et vous revenir. Merci