Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 09/03/2010, 08h49   #1
Candidat au titre de Membre du Club
 
Inscription : mars 2010
Messages : 111
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 111
Points : 11
Points : 11
Par défaut problème boucle php

Bonjour,

j'ai un problème concernant ma boucle dont voici le code :

Code :
1
2
3
4
5
6
7
8
9
10
			<tr>
            	<td><label>Heure Debut : <input type='text' size = '2' name='heure' value='$heure_debut'/></label></td>
                <td><label>Heure Fin : <input type='text' size = '2' name='heure' value='$heure_fin'/></label></td>";
 
				while ($heure = $heure_debut<$heure_fin)
				{
					$heure=$heure+1;
				}
 
			echo "</tr>
Ce que je veux c'est récupérer dans la variable $heure, les heures d'intervalle entre $heure_debut et $heure_fin rentré dans mon formulaire. Si quelqu'un voit ou vient l'erreur? merci à vous!
johan0510 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/03/2010, 09h25   #2
Candidat au titre de Membre du Club
 
Inscription : mars 2010
Messages : 111
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 111
Points : 11
Points : 11
je m'explique d'avantage...

si je saisi par exemple :

heure début : 14h
heure fin : 17h

Il faut que je retienne en heure : 14-15-16

donc dans ma boucle je viens d'essayer de rajouter : next($heure);

mais cela ne fonctionne toujours pas
johan0510 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/03/2010, 10h12   #3
Nouveau Membre du Club
 
Développeur Web
Inscription : juin 2007
Messages : 77
Détails du profil
Informations personnelles :
Âge : 27

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : juin 2007
Messages : 77
Points : 26
Points : 26
Pour ma part, je commencerais par affecter mon heure de début à la variable $heure. Ensuite, je ferais ma boucle en faisant une simple comparaison (sans l'affectation).

Par contre dans le code que tu as fournis, à aucun moment tu ne récupère les différents valeurs que va prendre ta variable $heure. Tu ne fait que des affectations.

Voila ce que j'écrirais :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
echo "<tr>";
    echo "<td><label>Heure Debut : <input type='text' size = '2' name='heure' value='$heure_debut'/></label></td>";
    echo "<td><label>Heure Fin : <input type='text' size = '2' name='heure' value='$heure_fin'/></label></td>";
 
    $heure = $heure_debut;
    while ($heure < $heure_fin){
        $liste_heure[] = $heure;
        $heure++;
    }
 
echo "</tr>";
Bugger24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/03/2010, 10h25   #4
Candidat au titre de Membre du Club
 
Inscription : mars 2010
Messages : 111
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 111
Points : 11
Points : 11
merci de ta réponse bugger24, je viens d'essayer ton code mais sa m'affecte toujours la valeur de la variable $heure_fin.

je n'ai pas fournit le code complet de mon formulaire, je le poste maintenant pour y voir plus claire :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
<?php
include ('traitements.php');
connectDB();
 
	// Variables vides pour les valeurs par défaut des champs
	$date = date("d/m/Y", time()); $heure=""; $id_etat="";
 
 
	if (isset($_POST['envoi']))
	{
		//création de la requète d'insertion
		$date = htmlentities($_POST['date']); //htmlentities — Convertit tous les caractères éligibles en entités HTML //addslashes — Ajoute des antislashs dans une chaîne;
		$heure = htmlentities($_POST['heure']);
		$id_etat = $_POST['id_etat'];
 
		$typeDate = "#^[0-3]?[0-9]/[0-1]?[0-9]/[0-9]{4}$#";
 
		if (preg_match($typeDate, $date)) //preg_match — Expression rationnelle standard
		{
			$tabDateDeb = explode("/", $date); //explode — Coupe une chaîne en segments
			$timestampDebut = mktime(0, 0, 0, $tabDateDeb[1], $tabDateDeb[0], $tabDateDeb[2]); //mktime —  Retourne le timestamp UNIX d'une date 
			//Ce timestamp est un entier long, contenant le nombre de secondes entre le début de l'époque UNIX (1er Janvier 1970 00:00:00 GMT) et le temps spécifié. 
 
			$identifiantCommun = time();
			$timeDuJour = $timestampDebut;
 
			if($nbreJours <= 0) $nbreJours = 1;
 
			if(!empty($date) && !empty($heure) && !empty($id_etat))
				{
				for($i=0 ; $i<$nbreJours ; $i++) 
					{
					$req = "INSERT INTO evenements VALUES ('', ".date('d', $timeDuJour).", ".date('m', $timeDuJour).", ".date('Y', $timeDuJour).", $heure, $id_etat)";
					mysql_query($req) or die(mysql_error());
 
					$timeDuJour += 86400; // On augmente le timestamp d'un jour
					}
 
				mysql_close();
				$date = date("d/m/Y", time()); $heure=""; $id_etat="";
 
				echo '<ul><li>Evénement enregistré !</li></ul>';
				}
 
		}
	}
 
	echo "<h1>Ajouter un événement</h1>
 
    <form method='post' action='#'>
    	<table id='tabAjoutEvent'>
        	<tr>
            	<td>Date : <input type='text' size = '10' name='date' value='$date'/></td>
            </tr>
 
			<tr>
            	<td>Heure Debut : <input type='text' size = '2' name='heure_debut' value='$heure_debut'/></td>
                <td>Heure Fin : <input type='text' size = '2' name='heure_fin' value='$heure_fin'/></td>";
 
				$heure = $heure_debut;
				while ($heure < $heure_fin)
				{
				$liste_heure[] = $heure;
				$heure++;
				}
 
 
			echo "</tr>
 
			<td>Description de la piste : </td>
			<td><select name='id_etat'>";
 
            $sql = ('SELECT * FROM etat');
            $req = mysql_query($sql) or die(mysql_error());
            while($data = mysql_fetch_assoc($req))
            {
			$optionT = $data['id_etat'].' | '.$data['description_etat'];// concaténation des deux éléments de la table état
			echo '<option value='.$optionT.'>' .$optionT. '</option>';
            }
            mysql_close();
 
			echo "</select></td>
			</tr>
 
			<tr>
				<td><input name='reset' type='reset' value='Effacer'/></td>
            </tr>
 
			<tr>
				<td colspan='2'><input type='submit' name='envoi' value='Envoyer'/></td>
			</tr>
 
 
		</table>
    </form>
 
 	<br><a href='index.php'>Revenir à l'accueil</a>";
 
 
	echo "<h2>Les évènements dans la base de données</h2>";
	echo affichageEvenements();
?>
mon affectation se fait lors de cette requete :
Code :
$req = "INSERT INTO evenements VALUES ('', ".date('d', $timeDuJour).", ".date('m', $timeDuJour).", ".date('Y', $timeDuJour).", $heure, $id_etat)";
la table évènements avec le champ "heure" :
Code :
1
2
3
4
5
6
7
8
9
CREATE TABLE evenements(
id_evenement INT NOT NULL AUTO_INCREMENT,
jour_evenement VARCHAR(2) NOT NULL,
mois_evenement VARCHAR(2) NOT NULL,
annee_evenement VARCHAR(4) NOT NULL,
heure VARCHAR(2),
id_etat INT,
constraint Pk_evenements Primary key (id_evenement),
constraint Fk_evenements Foreign key (id_etat) References etat (id_etat))TYPE=InnoDB;
johan0510 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/03/2010, 11h40   #5
Membre actif
 
Avatar de shadypierre
 
Inscription : février 2009
Messages : 239
Détails du profil
Informations personnelles :
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : février 2009
Messages : 239
Points : 185
Points : 185
Normal tu utilise $heure, alors que al liste des heures est stocké dans le tableau $liste_heure

Si tu veux une chaine qui contienne les heures il faut remplacer $liste_heure[] dans ta boucle par $heure = $heure.$heure+1
Ou alors j'ai pas bien capté un truc

shadypierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/03/2010, 11h48   #6
Candidat au titre de Membre du Club
 
Inscription : mars 2010
Messages : 111
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 111
Points : 11
Points : 11
dans ma base de données je souhaite voir apparaitre :

Num Evenement - Date Evenement - Heure - Id_Etat
1 - 09/03/2010 - 10 - 1
2 - 09/03/2010 - 11 - 1
3 - 09/03/2010 - 12 - 1
4 - 09/03/2010 - 13 - 1

après avoir saisi dans mon formulaire
Date : 09/03/2010
Heure debut : 10
Heure fin : 14
Id Etat :1

plus compliqué que ça je pense
johan0510 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/03/2010, 13h39   #7
Membre actif
 
Avatar de shadypierre
 
Inscription : février 2009
Messages : 239
Détails du profil
Informations personnelles :
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : février 2009
Messages : 239
Points : 185
Points : 185
C'est donc dans ton insertion ds la base que tu dois faire une boucle pour insérer une ligne jusqu'a atteindre ton heure de fin.

ex :
heure de début = 1h
heure de fin = 5h

Code :
1
2
3
4
5
6
 
heure = heure de début
Tant que  (heure < heure de fin) Faire
     req = insert into...
     heure = heure + 1
Fin Tant Que
Ce code réalisara dans l'exemple 4 insert

Donc ta boucle doit être placé au niveau de l'insertion et nom du formulaire

ps : d'ou sort cette variable :
Code :
if($nbreJours <= 0) $nbreJours = 1;
???




EDIT :
Regarde la j'ai modif des trucs, mais ça fonctionnera pas en l'état j'ai look en vitesse (notament au niveau de l'ajout du +1 heure dans la boucle)
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
 
<?php
include ('traitements.php');
connectDB();
 
	$date = date("d/m/Y", time());
 
 
	if (isset($_POST['envoi']))
	{
		//création de la requète d'insertion
		$date = htmlentities($_POST['date']); //htmlentities — Convertit tous les caractères éligibles en entités HTML //addslashes — Ajoute des antislashs dans une chaîne;
		$heureDebut = htmlentities($_POST['heure_debut']);
		$heureFin = htmlentities($_POST['heure_fin']);
		$id_etat = $_POST['id_etat'];
 
		$typeDate = "#^[0-3]?[0-9]/[0-1]?[0-9]/[0-9]{4}$#";
 
		if (preg_match($typeDate, $date)) //preg_match — Expression rationnelle standard
		{
			$tabDateDeb = explode("/", $date); //explode — Coupe une chaîne en segments
			$timestampDebut = mktime(0, 0, 0, $tabDateDeb[1], $tabDateDeb[0], $tabDateDeb[2]); //mktime —  Retourne le timestamp UNIX d'une date 
			//Ce timestamp est un entier long, contenant le nombre de secondes entre le début de l'époque UNIX (1er Janvier 1970 00:00:00 GMT) et le temps spécifié. 
 
			$identifiantCommun = time();
			$timeDuJour = $timestampDebut;
 
			if(!empty($date) && !empty($heure) && !empty($id_etat))
				{
				$heure = $heureDebut
				// tant que l'heure de départ n'a pas atteint l'heure de fin on fait des insert
				while ($heure < $heureFin)
					{
					$req = "INSERT INTO evenements VALUES ()";
					mysql_query($req) or die(mysql_error());
 
					$heure = $heure + 1 // voir comment rajouter une heure à l'heure saisi car ce n'est pas frocement un int
					}
 
				mysql_close();				
				echo '<ul><li>Evénement enregistré !</li></ul>';
				}
		}
	}
 
	echo "<h1>Ajouter un événement</h1>
 
    <form method='post' action='#'>
    	<table id='tabAjoutEvent'>
        	<tr>
            	<td>Date : <input type='text' size = '10' name='date' value='$date'/></td>
            </tr>
 
			<tr>
            	<td>Heure Debut : <input type='text' size = '2' name='heure_debut'/></td>
                <td>Heure Fin : <input type='text' size = '2' name='heure_fin'/></td>
			</tr>
			<tr>
				<td>Description de la piste : </td>
				<td><select name='id_etat'>";
 
				$sql = ('SELECT * FROM etat');
				$req = mysql_query($sql) or die(mysql_error());
				while($data = mysql_fetch_assoc($req))
				{
				$optionT = $data['id_etat'].' | '.$data['description_etat'];// concaténation des deux éléments de la table état
				echo '<option value='.$optionT.'>' .$optionT. '</option>';
				}
				mysql_close();
 
				echo "</select></td>
			</tr>
 
			<tr>
				<td><input name='reset' type='reset' value='Effacer'/></td>
            </tr>
 
			<tr>
				<td colspan='2'><input type='submit' name='envoi' value='Envoyer'/></td>
			</tr>
		</table>
    </form>
 
 	<br><a href='index.php'>Revenir à l'accueil</a>";
 
 
	echo "<h2>Les évènements dans la base de données</h2>";
	echo affichageEvenements();
?>

Dernière modification par shadypierre ; 09/03/2010 à 13h51.
shadypierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/03/2010, 14h20   #8
Candidat au titre de Membre du Club
 
Inscription : mars 2010
Messages : 111
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 111
Points : 11
Points : 11
je viens de tester et sa ne fonctionne toujours pas. sa ne m'insère plus rien dans ma base donc sa vient peut être de l'heure comme tu dit c bizarre...
johan0510 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/03/2010, 14h37   #9
Membre actif
 
Avatar de shadypierre
 
Inscription : février 2009
Messages : 239
Détails du profil
Informations personnelles :
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : février 2009
Messages : 239
Points : 185
Points : 185
Ouai non mais comme je l'ai dis ce que j'ai donner ne fonctionne pas j'ai meme pas rempli la requete, mais c'est une base

Edit :
Voila la tu as juste à voir comment ajouter une heure à l'heure saisi dans ton formulaire
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
			if(!empty($date) && !empty($heure) && !empty($id_etat))
				{
				$heure = $heureDebut
				// tant que l'heure de départ n'a pas atteint l'heure de fin on fait des insert
				while ($heure < $heureFin)
					{
					$req = "INSERT INTO evenements VALUES ('', ".date('d', $timeDuJour).", ".date('m', $timeDuJour).", ".date('Y', $timeDuJour).", $heure, $id_etat)";
					mysql_query($req) or die(mysql_error());
 
					$heure = $heure + 1 // voir comment rajouter une heure à l'heure saisi car ce n'est pas forcement un int
					}
 
				mysql_close();				
				echo '<ul><li>Evénement enregistré !</li></ul>';
				}

Edit 2 :
Idem pour comparer tes heures (heure_debut < heure _fin) il faudra faire un traitement sur ces heures (les transformer en seconde par exemple).

Dernière modification par shadypierre ; 09/03/2010 à 14h58.
shadypierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/03/2010, 14h44   #10
Candidat au titre de Membre du Club
 
Inscription : mars 2010
Messages : 111
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 111
Points : 11
Points : 11
le problème c'est que ma fonction est assez longue. Voila ce que j'ai modifié après la base que tu m'as mit :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
	// Variables vides pour les valeurs par défaut des champs
	$date = date("d/m/Y", time());
 
 
	if (isset($_POST['envoi']))
	{
		//création de la requète d'insertion
		$date = htmlentities($_POST['date']); //htmlentities — Convertit tous les caractères éligibles en entités HTML //addslashes — Ajoute des antislashs dans une chaîne;
		$heureDebut = htmlentities($_POST['heure_debut']);
		$heureFin = htmlentities($_POST['heure_fin']);
		$id_etat = $_POST['id_etat'];
 
		$typeDate = "#^[0-3]?[0-9]/[0-1]?[0-9]/[0-9]{4}$#";
 
		if (preg_match($typeDate, $date)) //preg_match — Expression rationnelle standard
		{
			$tabDateDeb = explode("/", $date); //explode — Coupe une chaîne en segments
			$timestampDebut = mktime(0, 0, 0, $tabDateDeb[1], $tabDateDeb[0], $tabDateDeb[2]); //mktime —  Retourne le timestamp UNIX d'une date 
			//Ce timestamp est un entier long, contenant le nombre de secondes entre le début de l'époque UNIX (1er Janvier 1970 00:00:00 GMT) et le temps spécifié. 
 
			$identifiantCommun = time();
			$timeDuJour = $timestampDebut;
 
 
			if(!empty($date) && !empty($heureDebut) && !empty($heureFin) && !empty($id_etat))
				{
				for($i=0 ; $i<$nbreJours ; $i++) 
					{
					$heure = $heureDebut
					// tant que l'heure de départ n'a pas atteint l'heure de fin on fait des insert
					while ($heure < $heureFin)
					{
					$req = "INSERT INTO evenements VALUES ('', ".date('d', $timeDuJour).", ".date('m', $timeDuJour).", ".date('Y', $timeDuJour).", $heure, $id_etat)";
					mysql_query($req) or die(mysql_error());
					$heure = $heure + 1 // voir comment rajouter une heure à l'heure saisi car ce n'est pas frocement un int
					}
 
 
					$timeDuJour += 86400; // On augmente le timestamp d'un jour
					}
 
				mysql_close();
				$date = date("d/m/Y", time()); $heure=""; $id_etat="";
 
				echo '<ul><li>Evénement enregistré !</li></ul>';
				}
 
		}
	}
Cela m'affiche Parse error: syntax error, unexpected T_WHILE in C:\wamp\www\Calendrier\ajoutEvenement.php on line 44. c'est à dire au niveau du while
johan0510 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/03/2010, 14h47   #11
Membre actif
 
Avatar de shadypierre
 
Inscription : février 2009
Messages : 239
Détails du profil
Informations personnelles :
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : février 2009
Messages : 239
Points : 185
Points : 185
Manque un ";" juste avant le while j'ai zappé de le mettre

Citation:
$heure = $heureDebut;
shadypierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/03/2010, 14h51   #12
Candidat au titre de Membre du Club
 
Inscription : mars 2010
Messages : 111
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 111
Points : 11
Points : 11
oui je viens de voir ça aussi! merci cela fonctionne!
johan0510 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/03/2010, 14h55   #13
Membre actif
 
Avatar de shadypierre
 
Inscription : février 2009
Messages : 239
Détails du profil
Informations personnelles :
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : février 2009
Messages : 239
Points : 185
Points : 185
Mode opératoire :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
Si formulaire validé et que tous les champs necessaire sont bien rempli
    recupérer variable du formulaire ($heureDebut = $_POST[heure_debut], etc...)
    transformé $heureDebut en seconde
    transformé $heureFin en seconde
    $heure = $heureDebut;
    //on boucle
    Tant que que $heure < $heureFin
          $req = insert into(blablablabla, $heure);
          //insertion ds la BDD via mysql_query
          // ajouté 3600 à $heure (car $heure trnasofrmé en seconde rpécédement, donc +3600 = +1h)
         $heure = $heure + 3600;
    Fin Tant que
Fin Si
 
Formulaire HTML

Après je t'avoue que transformer les heures en seconde je vois pas dans l'immediat comment le faire mais c'est réalisable.
shadypierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/03/2010, 15h00   #14
Candidat au titre de Membre du Club
 
Inscription : mars 2010
Messages : 111
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 111
Points : 11
Points : 11
je m'occupe pas des minutes et des secondes donc dans mon cas précis se sera forcément un int (+1) vu que je veux une ligne pour chaque heure d'un évènement. Merci!
johan0510 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/03/2010, 15h06   #15
Membre actif
 
Avatar de shadypierre
 
Inscription : février 2009
Messages : 239
Détails du profil
Informations personnelles :
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : février 2009
Messages : 239
Points : 185
Points : 185
Et bah on a mis le temps loin s'en faut mais maintenant tout marche, c'est vraiment sur le code que ça repose, sans ça on avance poince, fait un effort sur l'analyse la prochaine fois.

shadypierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/03/2010, 15h10   #16
Candidat au titre de Membre du Club
 
Inscription : mars 2010
Messages : 111
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 111
Points : 11
Points : 11
Ouai je te remercie parce que j'était en galère la!
johan0510 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 08h01.


 
 
 
 
Partenaires

Hébergement Web