Discussion:
Problème PHP / Mysql sur une date et une seule
(trop ancien pour répondre)
Didier
2020-01-26 22:01:54 UTC
Permalink
Bjr,
J'ai une petite appli en php, qui gère une base MySQL avec une seule
table. J'ai une colonne date dans la table.
Depuis plusieurs années, tout roule.
Mais ... les enregistrements dont la date est 2020-01-10 sont bien
enregistrés, et tous vus depuis PHP My Admin.
Par contre mon script php me mélange un peut tout à l'affichage et ne me
montre pas tous les enregistrements.
La requète est :
select * from ecritures order by date asc limit <ici un nombre>
Si je remplace, via PHP MyAdmin, les dates 2020-01-10 par 2020-01-11,
tout rentre dans l'ordre. Et aucun problème sur aucune autre date (comme
je l'ai dit depuis plusieurs années).
Si vous aviez des pistes de recherche à me proposer, je suis preneur.
Merci.
Didier.
Eric Demeester
2020-01-29 08:03:08 UTC
Permalink
Bonjour,
Post by Didier
J'ai une petite appli en php, qui gère une base MySQL avec une seule
table. J'ai une colonne date dans la table.
Une colonne qui s'appelle 'date', une colonne dont le type est 'DATE',
les deux ?
Post by Didier
select * from ecritures order by date asc limit <ici un nombre>
Si je remplace, via PHP MyAdmin, les dates 2020-01-10 par 2020-01-11,
tout rentre dans l'ordre. Et aucun problème sur aucune autre date (comme
je l'ai dit depuis plusieurs années).
Si vous aviez des pistes de recherche à me proposer, je suis preneur.
Je ne vois pas trop pourquoi le problème se produit uniquement avec
cette date, je le soupçonne d'être ailleurs :)

Pourrais-tu donner ici la structure précise de ta table (onglet
structure dans phpMyAdmin), ainsi que le code PHP de ta requête SQL ?
Didier
2020-01-29 08:48:43 UTC
Permalink
Post by Eric Demeester
Bonjour,
Post by Didier
J'ai une petite appli en php, qui gère une base MySQL avec une seule
table. J'ai une colonne date dans la table.
Une colonne qui s'appelle 'date', une colonne dont le type est 'DATE',
les deux ?
Oui je sais, je n'aurais pas dû, mais ça fonctionne ..
Post by Eric Demeester
Je ne vois pas trop pourquoi le problème se produit uniquement avec
cette date, je le soupçonne d'être ailleurs :)
Pourrais-tu donner ici la structure précise de ta table (onglet
structure dans phpMyAdmin), ainsi que le code PHP de ta requête SQL ?
Voici la structure (je n'ai mis que le nom et le type, je ne sais pas
trop comment mettre tout ça en forme sur le post) :
# Nom Type
1 idPrimaire int(20)
2 date date
3 libelle varchar(256)
4 montant_cr double
5 montant_deb double
6 retire tinyint(4)

Et la requête dans mon code php :
$req_ecr="select * from ecritures order by ".$tri." ".$sens." limit
".$decalage.",".$limite;
$tri indique la colonne sur laquelle les lignes sont triées (à la
demande de l'utilisateur)
$sens indique le sens du tri
$decalage correspond à la pagination de l'affichage
$limite correspond au nombre de lignes à afficher par page

Merci.
Didier.
Didier
2020-01-29 09:36:31 UTC
Permalink
Post by Didier
Post by Eric Demeester
Bonjour,
Post by Didier
J'ai une petite appli en php, qui gère une base MySQL avec une seule
table. J'ai une colonne date dans la table.
Une colonne qui s'appelle 'date', une colonne dont le type est 'DATE',
les deux ?
Oui je sais, je n'aurais pas dû, mais ça fonctionne ..
Post by Eric Demeester
Je ne vois pas trop pourquoi le problème se produit uniquement avec
cette date, je le soupçonne d'être ailleurs :)
Pourrais-tu donner ici la structure précise de ta table (onglet
structure dans phpMyAdmin), ainsi que le code PHP de ta requête SQL ?
Voici la structure (je n'ai mis que le nom et le type, je ne sais pas
#     Nom         Type
1     idPrimaire     int(20)
2     date         date
3     libelle     varchar(256)
4     montant_cr     double
5     montant_deb     double
6     retire     tinyint(4)
$req_ecr="select * from ecritures order by ".$tri." ".$sens." limit
".$decalage.",".$limite;
$tri indique la colonne sur laquelle les lignes sont triées (à la
demande de l'utilisateur)
$sens indique le sens du tri
$decalage correspond à la pagination de l'affichage
$limite correspond au nombre de lignes à afficher par page
Merci.
Didier.
En complément, ça vient de se reproduire avec la date du 2020-01-20.
Didier.
Eric Demeester
2020-01-29 16:44:08 UTC
Permalink
Bonjour,
Post by Didier
# Nom Type
1 idPrimaire int(20)
2 date date
Déjà, je te suggère de remplacer le nom 'date' de la colonne 2, par
exemple par 'la_date', parce que même si tu dis que ça fonctionne, et je
te crois, utiliser un mot réservé comme nom de variable finit un jour ou
l'autre par avoir des effets de bord imprévisibles, dont, qui sait, le
problème rencontré.
Post by Didier
$req_ecr="select * from ecritures order by ".$tri." ".$sens." limit ".$decalage.",".$limite;
C'est peut-être une erreur de copié/collé, mais je pense qu'il manque un
« " » pour terminer ta chaîne.

Par ailleurs, quand ta chaîne est entourée par des « " », tu peux y
inclure directemenr des variables sans avoir besoin de les concaténer.

$req_ecr = "SELECT * FROM ecritures ORDER BY $tri $sens...";
Post by Didier
$tri indique la colonne sur laquelle les lignes sont triées (à la
demande de l'utilisateur)
Ok.
Post by Didier
$sens indique le sens du tri
Donc 'ASC' ou 'DESC', j'imagine.

Essaye (normalement les passages à la ligne ne posent pas de problème et
ça permet de clarifier ce qu'on écrit) :

$req_ecr = "SELECT * FROM ecritures
ORDER BY $tri $sens
LIMIT $decalage, $limite";

Si le problème persiste, suis les conseils d'Olivier et méfie-toi des
conversions sauvages de variables non typées.
Olivier Miakinen
2020-01-29 10:24:12 UTC
Permalink
Post by Didier
Bjr,
Oui, bjr aussi Ddr.
Post by Didier
J'ai une petite appli en php, qui gère une base MySQL avec une seule
table. J'ai une colonne date dans la table.
Depuis plusieurs années, tout roule.
Mais ... les enregistrements dont la date est 2020-01-10 sont bien
enregistrés, et tous vus depuis PHP My Admin.
Si c'était un problème de base de données, je t'aurais suggéré de poser
la question sur fr.comp.applications.sgbd. Mais puisque tout va bien
depuis PHP My Admin le problème doit être ailleurs.
Post by Didier
Par contre mon script php me mélange un peut tout à l'affichage et ne me
montre pas tous les enregistrements.
select * from ecritures order by date asc limit <ici un nombre>
Si je remplace, via PHP MyAdmin, les dates 2020-01-10 par 2020-01-11,
tout rentre dans l'ordre. Et aucun problème sur aucune autre date (comme
je l'ai dit depuis plusieurs années).
Comme te l'a répondu Éric, il n'y a aucune raison pour que le problème se
produise sur une date donnée et pas les autres. D'ailleurs tu l'as toi-même
reproduit avec une autre date.

Du coup, il doit y avoir un souci dans ton code PHP.
Post by Didier
Si vous aviez des pistes de recherche à me proposer, je suis preneur.
En voici une. Vu que PHP est faiblement typé, il arrive que des conversions
automatiques de nombres en chaînes de caractères, ou l'inverse, soient à
l'origine de bugs bizarres. Du coup, recherche dans ton code tous les
endroits où tu traites de nombres (sous forme de chaînes ou autres).

En particulier, regarde les endroits où tu manipules la date avant de
l'afficher.
--
Olivier Miakinen
Didier
2020-01-29 17:53:15 UTC
Permalink
Post by Olivier Miakinen
Post by Didier
Bjr,
Oui, bjr aussi Ddr.
Post by Didier
J'ai une petite appli en php, qui gère une base MySQL avec une seule
table. J'ai une colonne date dans la table.
Depuis plusieurs années, tout roule.
Mais ... les enregistrements dont la date est 2020-01-10 sont bien
enregistrés, et tous vus depuis PHP My Admin.
Si c'était un problème de base de données, je t'aurais suggéré de poser
la question sur fr.comp.applications.sgbd. Mais puisque tout va bien
depuis PHP My Admin le problème doit être ailleurs.
Post by Didier
Par contre mon script php me mélange un peut tout à l'affichage et ne me
montre pas tous les enregistrements.
select * from ecritures order by date asc limit <ici un nombre>
Si je remplace, via PHP MyAdmin, les dates 2020-01-10 par 2020-01-11,
tout rentre dans l'ordre. Et aucun problème sur aucune autre date (comme
je l'ai dit depuis plusieurs années).
Comme te l'a répondu Éric, il n'y a aucune raison pour que le problème se
produise sur une date donnée et pas les autres. D'ailleurs tu l'as toi-même
reproduit avec une autre date.
Du coup, il doit y avoir un souci dans ton code PHP.
Post by Didier
Si vous aviez des pistes de recherche à me proposer, je suis preneur.
En voici une. Vu que PHP est faiblement typé, il arrive que des conversions
automatiques de nombres en chaînes de caractères, ou l'inverse, soient à
l'origine de bugs bizarres. Du coup, recherche dans ton code tous les
endroits où tu traites de nombres (sous forme de chaînes ou autres).
En particulier, regarde les endroits où tu manipules la date avant de
l'afficher.
Merci à vous deux de vous être penchés sur mon problème.
Je pense que les deux dates concernées le sont par pur hasard.
En effet, après avoir modifié le nom du champ 'date' par 'datevaleur',
rien de changé toujours la même erreur.
J'ai fait afficher la requête dans ma page html, puis je l'ai
copiée/collée dans l'onglet sql de phpmyadmin : résultat ok.
Et j'ai essayé un truc tout bête : je limite à 20 le nombre de lignes
affichées à l'écran, avec une gestion 'page suivante' et 'page
précédente', qui nécessite un petit calcul de pagination.
Ayant 58 lignes à afficher, j'ai fixé la limite par écran à 70, et tout
est ok. J'ai donc juste un pb de calcul de la pagination, du moins on
dirait.
Comme aurit Boris Vian, "j'y retourne immédiatement" ;-)
Encore merci.
Didier.

Continuer la lecture sur narkive:
Loading...