Ajout d'une plage de données
Résolu/Fermé
Ysabe_l
Messages postés
12461
Date d'inscription
vendredi 12 avril 2013
Statut
Contributeur
Dernière intervention
28 avril 2024
-
4 juin 2013 à 17:52
Ysabe_l Messages postés 12461 Date d'inscription vendredi 12 avril 2013 Statut Contributeur Dernière intervention 28 avril 2024 - 10 juin 2013 à 17:25
Ysabe_l Messages postés 12461 Date d'inscription vendredi 12 avril 2013 Statut Contributeur Dernière intervention 28 avril 2024 - 10 juin 2013 à 17:25
A voir également:
- Ajout d'une plage de données
- Frédéric cherche à faire le buzz sur les réseaux sociaux. il a ajouté une image de manchots sur une image de plage. retrouvez l'image originale de la plage. que cachent les manchots ? - Forum Musique / Radio / Clip
- Effacer les données de navigation - Guide
- Célia doit nettoyer le tableau ci-dessous pour l’ajouter à la base de données de son entreprise. les données sont ensuite traitées automatiquement. quelles sont les 4 cellules qui risquent de poser problème ? ✓ - Forum Excel
- Reinstaller windows sans perte de données - Guide
- Exemple base de données access à télécharger gratuit - Forum Access
18 réponses
Ysabe_l
Messages postés
12461
Date d'inscription
vendredi 12 avril 2013
Statut
Contributeur
Dernière intervention
28 avril 2024
274
4 juin 2013 à 20:56
4 juin 2013 à 20:56
Autant pour moi, tout à l'heure avec un autre truc je n'avais pas d'erreur, avec ce code là j'ai bien une erreur :
Fatal error: Call to a member function add() on a non-object in C:\messites\wamp\www\studio-nice\admin\nouvelle_reservation.php on line 97
la ligne 97 étant la suivante
Fatal error: Call to a member function add() on a non-object in C:\messites\wamp\www\studio-nice\admin\nouvelle_reservation.php on line 97
la ligne 97 étant la suivante
$date->add(new DateInterval('P1D'));
Ysabe_l
Messages postés
12461
Date d'inscription
vendredi 12 avril 2013
Statut
Contributeur
Dernière intervention
28 avril 2024
274
6 juin 2013 à 16:59
6 juin 2013 à 16:59
Je fais un p'tit up
jeremy.s
Messages postés
1226
Date d'inscription
lundi 28 mars 2011
Statut
Membre
Dernière intervention
2 septembre 2013
79
6 juin 2013 à 17:06
6 juin 2013 à 17:06
Salut !
Je pense avoir trouvé ton erreur :
$date = new DateTime(); // tu déclare un datetime : Très bien
$date = $date_arrivee; // C'est quoi $date_arrivee ?
A mon avis c'est ce que tu as récupéré du formulaire, donc un string.
Donc ton $date n'est plus un datetime, mais un string !
Sinon ton algo est très bien, quand tes $date, $date_depart serront bien des objet datetime le code fonctionnera parfaitement :)
Je pense avoir trouvé ton erreur :
$date = new DateTime(); // tu déclare un datetime : Très bien
$date = $date_arrivee; // C'est quoi $date_arrivee ?
A mon avis c'est ce que tu as récupéré du formulaire, donc un string.
Donc ton $date n'est plus un datetime, mais un string !
Sinon ton algo est très bien, quand tes $date, $date_depart serront bien des objet datetime le code fonctionnera parfaitement :)
Ysabe_l
Messages postés
12461
Date d'inscription
vendredi 12 avril 2013
Statut
Contributeur
Dernière intervention
28 avril 2024
274
6 juin 2013 à 17:14
6 juin 2013 à 17:14
Oui $date_arrive et $date_depart sont issus du formulaire (date d'arrivée et date de départ).
Donc dans la saisie, la personne écrit bien en format date 2013-01-20, dans la base de données j'ai défini que le champ est au format date. Mais quand il récupère la variable issue du formulaire il ne l'interprète pas comme une date, donc il va falloir le lui préciser !
Alors du coup je vois maintenant parfaitement le soucis mais va falloir que je réfléchisse pour le résoudre (non je ne demande pas la solution, j'aime trouver par moi même).
Une histoire de stringtotime si je me souviens bien, je vais regarder ça ce soir et si c'est bon je passerai en résolu.
Merci en tout cas de ton aide, maintenant j'ai compris l'erreur !
D'ailleurs en toute logique si j'arrive à bien faire en sorte que $date_arrive et $date_depart soient des dates je n'aurais plus besoin de mettre mon $date = new DateTime(); puisqu'il le saura que c'est une date.
Donc dans la saisie, la personne écrit bien en format date 2013-01-20, dans la base de données j'ai défini que le champ est au format date. Mais quand il récupère la variable issue du formulaire il ne l'interprète pas comme une date, donc il va falloir le lui préciser !
Alors du coup je vois maintenant parfaitement le soucis mais va falloir que je réfléchisse pour le résoudre (non je ne demande pas la solution, j'aime trouver par moi même).
Une histoire de stringtotime si je me souviens bien, je vais regarder ça ce soir et si c'est bon je passerai en résolu.
Merci en tout cas de ton aide, maintenant j'ai compris l'erreur !
D'ailleurs en toute logique si j'arrive à bien faire en sorte que $date_arrive et $date_depart soient des dates je n'aurais plus besoin de mettre mon $date = new DateTime(); puisqu'il le saura que c'est une date.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
jeremy.s
Messages postés
1226
Date d'inscription
lundi 28 mars 2011
Statut
Membre
Dernière intervention
2 septembre 2013
79
6 juin 2013 à 17:18
6 juin 2013 à 17:18
Alors regarde la doc du constructeur de DateTime, tu auras la réponse :)
Pour le strtotime c'est effectivement ce qu'il faut.
Ton format de date est prèske bon il me semble, à voir dans la fonction strtotime !
Et non tu n'as pas forcément besoin de $date du coup.
$date_d = ton objet de date qui correspont à $date_depart
$date_a = ton objet de date qui correspond à $date_arrivee
while($date_a <= $date_d)
{
insert into
$date_a->add(new DateInterval('P1D'));
}
Pour le strtotime c'est effectivement ce qu'il faut.
Ton format de date est prèske bon il me semble, à voir dans la fonction strtotime !
Et non tu n'as pas forcément besoin de $date du coup.
$date_d = ton objet de date qui correspont à $date_depart
$date_a = ton objet de date qui correspond à $date_arrivee
while($date_a <= $date_d)
{
insert into
$date_a->add(new DateInterval('P1D'));
}
Ysabe_l
Messages postés
12461
Date d'inscription
vendredi 12 avril 2013
Statut
Contributeur
Dernière intervention
28 avril 2024
274
6 juin 2013 à 22:34
6 juin 2013 à 22:34
Bon pour donner des nouvelles je n'y arrive pas du tout, mais je pense que demain ça ira mieux après une bonne nuit.
jeremy.s
Messages postés
1226
Date d'inscription
lundi 28 mars 2011
Statut
Membre
Dernière intervention
2 septembre 2013
79
6 juin 2013 à 22:50
6 juin 2013 à 22:50
Alors voila la doc du constructeur de DateTime :
https://www.php.net/manual/fr/datetime.construct.php
En premier paramètre il prend une chaine de caractères correspondant à une date au format yyyy-mm-dd (Ce que tu as, ca tombe bien ;-)
Je t'ai peut être donné trop d'indice, toi qui voulais cherché par toi même =/
En tout cas ne supprime pas ton while ! Il est très bien !
tu as juste à refaire l'instantion de $date et de $date_depart ;-)
https://www.php.net/manual/fr/datetime.construct.php
En premier paramètre il prend une chaine de caractères correspondant à une date au format yyyy-mm-dd (Ce que tu as, ca tombe bien ;-)
Je t'ai peut être donné trop d'indice, toi qui voulais cherché par toi même =/
En tout cas ne supprime pas ton while ! Il est très bien !
tu as juste à refaire l'instantion de $date et de $date_depart ;-)
Ysabe_l
Messages postés
12461
Date d'inscription
vendredi 12 avril 2013
Statut
Contributeur
Dernière intervention
28 avril 2024
274
7 juin 2013 à 09:56
7 juin 2013 à 09:56
J'avais bien trouvé la doc mais j'étais trop fatiguée pour comprendre hier soir je crois. Je regarderai ça ce soir mais moins tard ^^
Et oui j'ai fais exprès de mettre dans ce format de date je sais que c'est plus international et donc ça passe toujours mieux.
Je posterai mon code quand j'aurais réussi à le faire marcher.
Merci encore de ton aide.
Et oui j'ai fais exprès de mettre dans ce format de date je sais que c'est plus international et donc ça passe toujours mieux.
Je posterai mon code quand j'aurais réussi à le faire marcher.
Merci encore de ton aide.
jeremy.s
Messages postés
1226
Date d'inscription
lundi 28 mars 2011
Statut
Membre
Dernière intervention
2 septembre 2013
79
7 juin 2013 à 14:40
7 juin 2013 à 14:40
Ca marche :)
Ysabe_l
Messages postés
12461
Date d'inscription
vendredi 12 avril 2013
Statut
Contributeur
Dernière intervention
28 avril 2024
274
10 juin 2013 à 13:03
10 juin 2013 à 13:03
Et bien voilà, j'ai passé des heures à me prendre la tête dessus, alors que ce n'était pas fondamentalement compliqué. Mais j'ai réussi !!
Donc si ça peut un jour intéresser quelqu'un qui tombera dessus la fonction donne ça :
Merci encore de ton aide jeremy.s !
Donc si ça peut un jour intéresser quelqu'un qui tombera dessus la fonction donne ça :
$date_d = new DateTime($date_depart); $date = new DateTime($date_arrivee); while ($date <= $date_d) // pour tous les jours entre l'arrivée et le départ ajout dans la base de données comme réservé { try { $requete = $DB->prepare('INSERT INTO occupation (date, statut) VALUES (:date, "reserve")'); $date = date_format($date, 'Y-m-d'); $requete->execute(array('date'=>$date)) or die(print_r($requete->errorInfo())); } catch(PDOException $e) { echo 'Erreur ajout à la base de données'; } $date = new DateTime($date); $date->add(new DateInterval('P1D')); }
Merci encore de ton aide jeremy.s !
jeremy.s
Messages postés
1226
Date d'inscription
lundi 28 mars 2011
Statut
Membre
Dernière intervention
2 septembre 2013
79
10 juin 2013 à 14:44
10 juin 2013 à 14:44
Bah voilà :)
Par contre un truc me dérange, ton objet $date est un peu manipulé de Datetime à String, c'est pas spécialement propre ni judicieux :
$date_d = new DateTime($date_depart);
$date = new DateTime($date_arrivee);
while ($date <= $date_d) // pour tous les jours entre l'arrivée et le départ ajout dans la base de données comme réservé
{
try
{
$requete = $DB->prepare('INSERT INTO occupation (date, statut) VALUES (:date, "reserve")');
$date = date_format($date, 'Y-m-d');
$requete->execute(array('date'=>$date)) or die(print_r($requete->errorInfo()));
}
catch(PDOException $e)
{
echo 'Erreur ajout à la base de données';
}
$date = new DateTime($date);
$date->add(new DateInterval('P1D'));
}
Ce que tu peux faire :
$date_d = new DateTime($date_depart);
$date = new DateTime($date_arrivee);
while ($date <= $date_d) // pour tous les jours entre l'arrivée et le départ ajout dans la base de données comme réservé
{
try
{
$requete = $DB->prepare('INSERT INTO occupation (date, statut) VALUES (:date, "reserve")');
$requete->execute(array('date'=>$date->format('Y-m-d'))) or die(print_r($requete->errorInfo()));
}
catch(PDOException $e)
{
echo 'Erreur ajout à la base de données';
}
$date->add(new DateInterval('P1D'));
}
Par contre un truc me dérange, ton objet $date est un peu manipulé de Datetime à String, c'est pas spécialement propre ni judicieux :
$date_d = new DateTime($date_depart);
$date = new DateTime($date_arrivee);
while ($date <= $date_d) // pour tous les jours entre l'arrivée et le départ ajout dans la base de données comme réservé
{
try
{
$requete = $DB->prepare('INSERT INTO occupation (date, statut) VALUES (:date, "reserve")');
$date = date_format($date, 'Y-m-d');
$requete->execute(array('date'=>$date)) or die(print_r($requete->errorInfo()));
}
catch(PDOException $e)
{
echo 'Erreur ajout à la base de données';
}
$date = new DateTime($date);
$date->add(new DateInterval('P1D'));
}
Ce que tu peux faire :
$date_d = new DateTime($date_depart);
$date = new DateTime($date_arrivee);
while ($date <= $date_d) // pour tous les jours entre l'arrivée et le départ ajout dans la base de données comme réservé
{
try
{
$requete = $DB->prepare('INSERT INTO occupation (date, statut) VALUES (:date, "reserve")');
$requete->execute(array('date'=>$date->format('Y-m-d'))) or die(print_r($requete->errorInfo()));
}
catch(PDOException $e)
{
echo 'Erreur ajout à la base de données';
}
$date->add(new DateInterval('P1D'));
}
Ysabe_l
Messages postés
12461
Date d'inscription
vendredi 12 avril 2013
Statut
Contributeur
Dernière intervention
28 avril 2024
274
10 juin 2013 à 16:50
10 juin 2013 à 16:50
Alors figure toi que ça me dérangeait aussi mais que je ne voyais pas du tout comment résoudre ça !
Donc voilà même pas besoin de poser la question que j'ai la réponse. T'es trop fort.
Merci encore :)
Donc voilà même pas besoin de poser la question que j'ai la réponse. T'es trop fort.
Merci encore :)
jeremy.s
Messages postés
1226
Date d'inscription
lundi 28 mars 2011
Statut
Membre
Dernière intervention
2 septembre 2013
79
10 juin 2013 à 17:05
10 juin 2013 à 17:05
Le date_format tu l'utilisais bien, et tu n'es pas obligé de toujours passé par des variables, il suffit de regarder quel type veut chaque fonction, et quel type renvois chaque fonction ;-)
Le execute veut un tableau de string, et date_format te renvois un string, donc voilà :) Pas besoin de changer de type $date, il ne changera pas quand tu utilises date_format :)
Le execute veut un tableau de string, et date_format te renvois un string, donc voilà :) Pas besoin de changer de type $date, il ne changera pas quand tu utilises date_format :)
Ysabe_l
Messages postés
12461
Date d'inscription
vendredi 12 avril 2013
Statut
Contributeur
Dernière intervention
28 avril 2024
274
10 juin 2013 à 17:10
10 juin 2013 à 17:10
Ben je ne sais pas ce que j'ai fichu (j'ai fait tellement de tests !) mais quand j'ai cru avoir testé comme ça et avoir eu un message d'erreur c'est pour ça que j'étais partie sur ces transformations.
jeremy.s
Messages postés
1226
Date d'inscription
lundi 28 mars 2011
Statut
Membre
Dernière intervention
2 septembre 2013
79
10 juin 2013 à 17:13
10 juin 2013 à 17:13
Ya rien de faux disons, mais c'est pas spécialement très clair quand on débute de faire comme j'ai fait.
C'est défois préférable de faire comme tu as fait, mais en passant par une variable intermédiaire tout en gardant l'objet que l'on utilise :) C'est plus clair et plus compréhensible quand on débute
C'est défois préférable de faire comme tu as fait, mais en passant par une variable intermédiaire tout en gardant l'objet que l'on utilise :) C'est plus clair et plus compréhensible quand on débute
Ysabe_l
Messages postés
12461
Date d'inscription
vendredi 12 avril 2013
Statut
Contributeur
Dernière intervention
28 avril 2024
274
10 juin 2013 à 17:19
10 juin 2013 à 17:19
J'avoue que le php je l'ai appris sur le tas en stage (avec Internet pour seule aide) de 4 seulement de 4 semaines et ... avec des bouts de codes existants qui étaient obsolètes et utilisant beaucoup de techniques pas très élégantes. Alors forcément maintenant que j'essaye de me lancer sur un vrai site pour moi j'ai un peu de mal à adapter mon peu de connaissances. Oui je sais un bon gros tuto, mais je n'ai juste pas le temps de me plonger vraiment dedans en ce moment. Mais j'ai déjà imprimé tout le tuto du site du zéro que je lirai cet été.
Heureusement qu'il y a des gens prêts à aider !
Heureusement qu'il y a des gens prêts à aider !
jeremy.s
Messages postés
1226
Date d'inscription
lundi 28 mars 2011
Statut
Membre
Dernière intervention
2 septembre 2013
79
10 juin 2013 à 17:22
10 juin 2013 à 17:22
Le site grafikart propose des tuto vidéos très instructifs ;-) Mais il faut déjà avoir des bases du langage, ce n'est pas vraiment pour partir de 0.
Et puis les vidéos c'est plus motivant qu'un roman de 50 pages sur un écran ;-)
Et puis les vidéos c'est plus motivant qu'un roman de 50 pages sur un écran ;-)
Ysabe_l
Messages postés
12461
Date d'inscription
vendredi 12 avril 2013
Statut
Contributeur
Dernière intervention
28 avril 2024
274
10 juin 2013 à 17:25
10 juin 2013 à 17:25
C'est sur ce site que j'ai suivi l'explication pour créer un calendrier, que j'ai ensuite modifié selon mes besoins bien sur.
Tu as raison qu'il y a pas mal de choses intéressantes dessus, après j'ai tendance à privilégier le papier qu'on peut consulter partout aux vidéos consultables uniquement sur un ordinateur connecté à Internet.
Mais tu vais quand même retourner y faire un tour (toujours cet été, quand j'aurai enfin du temps).
Tu as raison qu'il y a pas mal de choses intéressantes dessus, après j'ai tendance à privilégier le papier qu'on peut consulter partout aux vidéos consultables uniquement sur un ordinateur connecté à Internet.
Mais tu vais quand même retourner y faire un tour (toujours cet été, quand j'aurai enfin du temps).