Conseils pour un projet d'application web

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Conseils pour un projet d'application web

par Zurg » 31 août 2007, 12:07

Bonjour zeus,

Oui, effectivement, je plaide coupable, j'ai été plutôt vague... mille zexcuses !

Ce que je voulais dire, c'est que le problème est toujours présent, soit je n'ai pas d'affichage du tout, soit quand je change les paramètres de la fonction JourDsSemaine, j'ai une erreur qui s'affiche plusieurs fois sur la page :
Warning: Missing argument 2 for JourDsSemaine()
La fonction une fois modifiée ressemble à ça :
<?php
function JourDsAnnee ($month, $year)
{
	$nbJours = date('t', mktime(0, 0, 0, $month, 1, $year));
	return($nbJours);
} 

function JourDsSemaine ($j, $mois, $annee)
{
	$joursem = array('0', '1', '2', '3', '4', '5', '6');
	$timestamp = mktime (0, 0, 0, $mois, $j, $annee);
	$jour = $joursem[date("w",$timestamp)];
	
	return($jour);
}

function listeJours($mois, $annee)
{
	$tableauJour = array();
	$PremierJour = 1;
	$DernierJour = JourDsAnnee($mois, $annee);
	
	for ($i=$PremierJour; $i<=$DernierJour; $i++)
		{
		$JourDeLaSemaine = JourDsSemaine($i);
		$JourDansLeMois = $i;
		$nouveauJour = array($JourDeLaSemaine, $JourDansLeMois);
		array_push($nouveauJour, $tableauJour);
		}
		
	return($tableauJour);
}
?>
Je pense que je m'y suis très mal pris, mais je suis un peu paumé la dedans, il y a un truc que je n'ai sûrement pas intégré.

Voilà où j'en suis donc.

par zeus » 31 août 2007, 11:53

Mais, comme par hasard, ça marche po... :cry:
Zurg, tu n'es pas nouveau sur le forum, tu as 137 messages à ton compteur à ce jour ...

Tu doit donc savoir que dire "ça ne marche pas" ne nous est absolument d'aucune utilité. Tu es de retour, on s'en doute bien qu'il y a un soucis.

Si tu veux une aide efficace, il faut que tu nous décrives ce qui te fait penser que ça ne marche pas

par Zurg » 31 août 2007, 10:05

Bonjour !

Bon, alors j'ai fait ça :
<?php
function JourDsAnnee ($month, $year)
{
	$nbJours = date('t', mktime(0, 0, 0, $month, 1, $year));
	return($nbJours);
} 

function JourDsSemaine ($j)
{
	$joursem = array('0', '1', '2', '3', '4', '5', '6');
	$timestamp = mktime (0, 0, 0, $m, $j, $a);
	$jour = $joursem[date("w",$timestamp)];
	
	return($jour);
}

function listeJours($mois, $annee)
{
	$tableauJour = array();
	$PremierJour = 1;
	$DernierJour = JourDsAnnee($mois, $annee);
	
	for ($i=$PremierJour; $i<=$DernierJour; $i++)
		{
		$JourDeLaSemaine = JourDsSemaine($i);
		$JourDansLeMois = $i;
		$nouveauJour = array($JourDeLaSemaine, $JourDansLeMois);
		array_push($nouveauJour, $tableauJour);
		}
		
	return($tableauJour);
}
?>
Mon fichier test.php reste inchangé.

Mais, comme par hasard, ça marche po... :cry:

par cf357 » 30 août 2007, 15:37

ça va être un truc comme ça oui ;)

par Zurg » 30 août 2007, 15:15

Ok merci,

alors du coup je dois implémenter la fonction JourDsSemaine non ? Avec un truc comme ça ?
$joursem = array('dim', 'lun', 'mar', 'mer', 'jeu', 'ven', 'sam')
$timestamp = mktime (0, 0, 0, $mois, $jour, $annee);

echo $joursem[date("w",$timestamp)];

par cf357 » 30 août 2007, 15:03

la fonction "JourDsAnnee" n'était pas complète, il fallait rajouter le retour :
function JourDsAnnee ($month, $year)
{
    $nbJours = date('t', mktime(0, 0, 0, $month, 1, $year));
    
    return $nbJours;
} 
Dans ta boucle, tu as mis :
$JourDeLaSemaine 	= JourDsAnnee($i);
Or ce n'est pas JourDsAnnee, mais JourDsSemaine ;) (qui renvoit le jour entre 0 et 6, ou entre 1 et 7)


Après ça, ça marche ;)

par Zurg » 30 août 2007, 14:53

Salut,

merci pour ta réponse !

J'ai corrigé selon ton conseil, mais j'ai toujours un " Array() " affiché. Je pense qu'il y a un problème dans la fonction, mais je ne vois pas trop où pour le moment...

Si quelqu'un a un oeil perçant...

par orgerix » 30 août 2007, 14:45

Les variables dans les fonctions n'ont qu'une porté locale, c'est à dire que tu ne peux pas y accèder directement à l'exterieur de la fonction, tout comme tu ne peux pas accèder aux variables externe à l'interieur d'une fonction par défaut.

Il faut donc que tu attribue le résultat de la fonction à une variable. Dans ce cas, ca sera quelque chose comme ca :
<?php
include ("function.inc.php");
$tableauJour=listeJours(2,2007);
print_r($tableauJour);
?>

par Zurg » 30 août 2007, 14:40

Bon, j'ai bien essayé, mais je ne sais pas trop comment utiliser les infos que tu m'as données.

voilà ce que j'ai rajouté à mon fichier test.php :
<?php
include ("function.inc.php");
listeJours(2,2007);
print_r($tableauJour);
?>
L'autre fichier n'a pas bougé, j'ai maintenant une page vide, rien ne s'affiche, j'ai mal du implémenter la fonction... peux-tu m'aiguiller ?

Merci d'avance ;)

par cf357 » 30 août 2007, 14:00

pour afficher ton tableau, utilise
print_r($tableau);  // utile pour debugguer, verifier les valeurs
Et si tu veux ton propre affichage, utilise :
foreach ($array as $key => $value)
{
    echo $key.' : '.$value.'<br />';
}

par Zurg » 30 août 2007, 13:56

Bon, alors j'ai fait ça :

Un fichier function.inc.php
<?php
function JourDsAnnee ($month, $year)
{
	$nbJours = date('t', mktime(0, 0, 0, $month, 1, $year));
} 

function listeJours($mois, $annee)
{
	$tableauJour = array();
	$PremierJour = 1;
	$DernierJour = JourDsAnnee($mois, $annee);
	
	for ($i=$PremierJour; $i<=$DernierJour; $i++)
		{
		$JourDeLaSemaine = JourDsAnnee($i);
		$JourDansLeMois = $i;
		$nouveauJour = array($JourDeLaSemaine, $JourDansLeMois);
		array_push($nouveauJour, $tableauJour);
		}
		
	return($tableauJour);
}


?>
Et un fichier test.php :
<?php
include ("function.inc.php");

echo listeJours(1, 2007);
?>
Et quand j'exécute la page test.php, je n'ai qu'un
Array
qui s'affiche à l'écran.

Où se trouve donc mon erreur ? (ou mes erreurs ?)

Merci !

par cf357 » 30 août 2007, 12:25

En effet, la première solution permet de récupérer une bonne fois pour toutes seulement les jours intéressants ! Il suffit de rajouter une condition dans la boucle avant d'ajouer le jour au tableau final !

par Zurg » 30 août 2007, 12:23

Ok merci,

moi, ce qui m'intéresse, c'est le numéro du jour, mais aussi de savoir si c'est un Samedi ou pas. Donc c'est la première solution non ?

J'essaie de faire ça et je reviens !

par cf357 » 30 août 2007, 12:06

Pour débuter je te conseillerai d'écrire une fonction qui retourne la liste des jours en fonction du mois / année passés en paramètre


2 cas possibles :

1) Tu veux obtenir le jour de la semaine :

Code : Tout sélectionner

fonction listeJours(mois, annee) { tableauJour = tableauVide() PremierJour = 1 DernierJour = maFonction($mois, $annee) // fonction qui donne le nombre de jour dans le mois pour compteur allant de PremierJour à DernierJour faire { JourDeLaSemaine = maFonction(compteur) // entre 1 et 7 JourDansLeMois = compteur nouveauJour = tableau(JourDeLaSemaine, JourDansLeMois) ajouter(nouveauJour, tableauJour) compteur++ } retourner(tableauJour) }
A partir de là, tu auras un tableau pour tout ton mois avec, par exemple :

3 | 1 // 3 = mercredi => le 1er du mois sera un mercredi
4 | 2 // 4 = jeudi, le 2 du mois sera un jeudi...
5 | 3
6 | 4
7 | 5 // 7 = dimanche, ...
1 | 6
2 | 7 ...


Pour afficher ce tableau, tu peux te servir de foreach :)


2) Tu te fiches du jour de la semaine, tu veux juste les jours du mois

alors la seule ligne qui t'interesse est celle là :

Code : Tout sélectionner

DernierJour = maFonction($mois, $annee)
cette fonction aura la gueule suivante :
function daysInMonth($year, $month)
{
    $nbDays = date('t', mktime(0, 0, 0, $month, 1, $year));
}
voilà voilà ;)

par Zurg » 30 août 2007, 11:30

Oui super !

ça ressemble bigrement à ce que je veux faire, sauf que cela s'étale sur le mois, et mes tranches horaires sont plus simples:

8h30-13h30 ; 13h30-18h30 ; 18h30-8h30

ensuite il faut que je puisse affecter à chaque tranche un code qui correspond à l'activité du médecin, et qui permettra de calculer son temps de travail. Et tout ça, évidemment pour chaque médecin du service.

Comment as-tu fait ?

Ah oui, il faut également que l'affichage du mois soit dynamique, c'est à dire qu'en fonction du mois choisi les dates correspondent, qu'on puisse changer de mois etc... mais chaque chose en son temps...

En fait, je crois avoir compris l'esprit du truc, maintenant, il faut que je réussisse à créer dynamiquement ce tableau.

Une piste pour débuter ?

Je ne sais pas si je suis très clair...