Insert into en boucle

Fermé
kapoue_12 Messages postés 3 Date d'inscription jeudi 22 avril 2010 Statut Membre Dernière intervention 25 avril 2010 - 22 avril 2010 à 00:13
 olivier stern - 25 avril 2010 à 17:38
Hello,

Je souhaites faire une boucle d'enregistrement dans ma BDD avec en variable un changement de date (hormis l'id bien sur qui lui s'incrémente tout seul).

L'histoire est la suivante, je demande la date de début des vacances ainsi que la date de fin, je veux ensuite enregistrer en BBD autant de ligne que de jours de congés.

Exemple : en congés du 21 au 23 avril, 23 - 21 = 2 auquel je rajoute 1. Facile. Je souhaites donc enregistrer en BDD 3 lignes avec comme $date_jour_vacances 21.04.2010, 22.04.2010 et 23.04.2010. Le reste restant plus ou moins vide.

Ma question est la suivante : comment faire 3 INSERT INTO de suite en incrémentant $date_jour_vacances de 1 à chaque tour ?

Le code d'enregistrement unique :

mysql_query("INSERT INTO en_vacances VALUES('', '$date_debut_2', '$date_fin_2', '$date', '$date_jour_vacances', '$matin_1', '$matin_2', '$matin_3', '$matin_4', '$matin_5', '$apres_midi_1', '$apres_midi_2', '$apres_midi_3', '$apres_midi_4', '$apres_midi_5')") or die(mysql_error()); echo "Enregistrement OK";


Merci,
David


5 réponses

Olivier Stern
22 avril 2010 à 02:24
une boucle for, ou while.
pour incrementer tu peux écrire
$date_jour_vacances++;
ou
$date_jour_vacances += 1;
ou encore
$date_jour_vacances = $date_jour_vacances + 1;
tout ceci est équivalent.

Olivier
0
Olivier Stern
22 avril 2010 à 02:27
for ($i = $debut ; $i <= $fin ; $i++)
insert_base($i,$parametre_supplementaire)

ou insert_base est ta fonction d'insertion.
Par exemple
0
Olivier Stern
22 avril 2010 à 02:28
insert_base($i,$parametre_supplementaire) ;
il manquait le ;
0
kapoue_12 Messages postés 3 Date d'inscription jeudi 22 avril 2010 Statut Membre Dernière intervention 25 avril 2010
22 avril 2010 à 17:00
Hello

Merci pour ton aide. Je n'ai pas encore commencé la boucle parce que la date me pose un pb. Une soustraction dans le même mois est simple, par contre une soustraction du 3 juin au 24 mai donne un résultat bizarre. Je cherche un moyen de transformer une date en nombre de jour, aujourd'hui nous sommes le 111eme jour de l'année, mais comment trouver le nombre du 3 juin ?

idate, getdate etc... rien ne semble convenir :(

David
0
Olivier Stern
22 avril 2010 à 17:33
Bonjour, pour faire des opération arithmétiques sur les dates, il faut utilisé le timestamp. Ce chiffre reprñesente le nombre de seconde écoulées depuis le premier janvier 1970.
Donc il faut convertir ta date en timestamp, faire les opération de soustraction, et la reconvertir ensuite en date.
Tu peux même la stoker directement en timestamp, il s'agit toujours d'une date !!!
Regarde du côté de date_timestamp_set et date_timestamp_get.
si tu as un pb...
0
kapoue_12 Messages postés 3 Date d'inscription jeudi 22 avril 2010 Statut Membre Dernière intervention 25 avril 2010
25 avril 2010 à 12:31
Hello

Merci pour votre aide

J'ai transformer les dates en timestamp, fait les calculs et retransformer au format date avant d'enregistrer en BDD. La lecture de la BDD est plus simple dans ce format, pour un humain

Par contre j'ai un soucis avec mon fichier de modification. J'ai un fichier de création (qui est maintenant terminé), le fichier de modification affiche les champs et un bouton Envoyer doit envoyer la valeur des champs en BDD. Le bouton fonctionne bien mais à l'ouverture du fichier l'enregistrement se fait, du coup les champs en BDD sont vidés (l'enregistrement se fait avant la récupération des valeurs). Suis certain que c'est un truc tout bête mais je ne vois rien qui cloche :/

David
0

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

Posez votre question
olivier stern
25 avril 2010 à 17:38
Oui c'est tout bête en fait.
Ton document comporte un formulaire j'imagine qui contient des champs. le script va donc lire et afficher le formulaire, puis lire le code propre à l'insertion en bdd.
Voila ce qu'il faut faire : soit s'éparer le form et l'update dans deux docs différent, et faire pointer ton formulaire sur la page de modification (n'oublie pas d'échapper les valeurs saisies !)
Autre façon aussi : tout sur le même document mais avec qqch comme ça;

<?php
function display_form()
{
LE CODE DE TON FORM AVEC PHP SELF COMME ACTION ET POST COMME METHODE
}
function update_bdd($data)
{
TES COMMANDES
}

/*corps du script:*/

if (!isset($_POST['submit']))
display_form();
else
update_bdd($_POST)
?>


Voilà. Il serait mieux de laver le $_POST avant de l'envoyer au casse puipe dans la fonction d'insert. donc une petite fonction dédiée a la vérification du format et l'échappement ne serait pas de trop.

Olivier Stern
0