8791 sujets

Développement web côté serveur, CMS

Pages :
Bonjour,
Je cherche à afficher sur ma page d'accuei le nom du prochain anniversaire.( donc juste un anniversaire)
j'ai un champ date (date de naissance de mes membres) et un champ nom:

Pour afficher la liste j'utilise cela:
[code]<?php 


$CONFIG['hostname'] = "localhost";  //mettez les paramètres de votre base
$CONFIG['database'] = "***";  //la meme chose que username pour free
$CONFIG['username'] = "***";
$CONFIG['password'] = "***";
$CONFIG['table'] = "membres";
$n = 360; //nombre de jours de prévision

$sql = mysql_connect($CONFIG['hostname'], $CONFIG['username'], $CONFIG['password']) or die(mysql_error());
mysql_select_db($CONFIG['database'], $sql);
$result = mysql_query("SELECT 
   pseudo, 
   nom, 
   
   DATE_FORMAT(date, '%e %b.') AS datef, 
   (YEAR(CURRENT_DATE)-YEAR(date)) - (RIGHT(CURRENT_DATE,5)<=RIGHT(date,5)) +1 AS age, 
   TO_DAYS(CONCAT(LEFT(CURRENT_DATE,5), RIGHT(date, 5))) - TO_DAYS(CURRENT_DATE) AS diff, 
   DATE_FORMAT(CONCAT(YEAR(CURRENT_DATE),'-12-31'), '%j') AS nbj  


FROM ".$CONFIG['table']) or die(mysql_error());
  


$i=0;
while($row = mysql_fetch_array($result)){

 if($row['diff']<0) $row['diff'] = $row['diff'] + $row['nbj']; 


	if($row['diff']<$n and $row['datef']!=""){
		$tab[$i][0] = $row['diff'];
		$tab[$i]['pseudo'] = $row['nom'];
		$tab[$i]['age'] = $row['age'];
		$tab[$i]['dans'] = $row['diff'];
		$tab[$i]['date'] = $row['datef'];
	


	}
	
	$i++;
} 


//tout est proprement rangé dans $tab maintenant

//formatage à votre guise (ex: si 0 jours mettre en rouge [smile])) :
foreach($tab as $ligne) echo "<font color=#566ABD><b> - ".$ligne['pseudo']."</b></font> aura ".$ligne['age']." ans dans ".$ligne['dans']." jours (le <b>".$ligne['date']."</b>)<br />";
?>

Pouvez-vous m'aider ?
Modifié par doublemetre (16 Nov 2007 - 19:22)
<?php 

include_once('connection_inc.php'); // parametres pour te connecter à la base de donnée

$query = "SELECT pseudo, nom, date_anniversaire FROM table_membres ORDER BY date_anniversaire";
$result = mysql_query($query);

echo '<ul>';

while($row = mysql_fetch_assoc($result)) {
echo '<li>'.$row['nom'].' - '.$row['date_anniversaire'].'</li>';
}

echo '</ul>';

?>


après, selon le format date du champ date_anniversaire, le code php peut etre différent afin d'afficher correctement la date.
Dis moi en quel format est la date et en quel format tu la veux et je te fais ça.
Modifié par Rasta31 (05 Aug 2007 - 19:46)
Merci de répondre si vite, alors dans ma base de donné le champ date est comme cela: 0000-00-00
J'ai une erreur
  [code] Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/www/e767ec6a1980e65d7c8350cee61cac91/web/tds/test.php on line 22
ca vien de cette ligne :
while($row = mysql_fetch_assoc($result)) {

Modifié par doublemetre (05 Aug 2007 - 21:00)
oui cela veut dire que la requete SQL est invalide. Il faut que tu remplaces le champ date_anniversaire par sa vraie dénomination, ainsi que la table table_membres par son vrai nom également.

tu peux également rajouter un LIMIT 5 à la fin de la requete (après ORDER BY) pour afficher seulement les 5 prochaines dates
Modifié par Rasta31 (05 Aug 2007 - 21:14)
Ok j'ai réussi, mais il m'affiche la liste de tout les membres EX: Jean Dupont - 1973-02-14.

Ce que j'aimerais c'est avoir c'est juste le nom du prochain anniversaire. Ex: prochain anniversaire est celui de - Jean Dupont
Salut,

bon en complement (je laisse a d'autre le soin de débrouiller cette affaire de requete invalide car je pars demain en vacances Smiley smile )

le champ date est au format 0000-00-00 dans le champ où dans la base de données?

moi les dates dans la base j'aime les stockés sous leur forme Unix c'est a dire comme un nombre de secondes depuis 1970. donc en entier.

moi ( mais en gros ca n'engage que moi Smiley cligne ) avec un explode
je decomposerais cette info je créerais ma date Unix avec la fonction mktime ( attention a l'ordre des arguments). et un fois au type Unix je mets le tout en forme avec la fonction date.

$date_anniv_slash = date("d/m/Y",$date_anniv);
par exemple si $date_anniv contient le resultat de la manip precedemment ecrite ou alors la dated'anniv sous forme unix.

on cherche a afficher la date du prochain anniv? si j'ai bien suivi alors que la personne va renseigner sa date d'anniversaire donc:

list($jour_anniv,$mois_anniv,$annee_anniv) = explode ($date_anniv_slash,"/");
$annee_actuelle = date("Y"); // de la date courante par defaut

if ( mktime(0,0,0,$mois_anniv,$jour_anniv,$annee_actuelle) < date("U") )
echo date("d/m/Y",
mktime(0,0,0,$mois_anniv,$jour_anniv,$annee_actuelle) );

else 

echo date("d/m/Y",
mktime(0,0,0,$mois_anniv,$jour_anniv,$annee_actuelle+1) );


voila en gros c'était pour dire les dates Unix c'est bien!
Avec mktime et date j'ai pu programmer en juillet une application basée sur des questions d'horaires assez facilement sans avoir besoin d'autre fonction temporelle grace a ce format.

Pascal
Modifié par CPascal (05 Aug 2007 - 23:29)
Les date sont stockées dans ma base de donné dans un champ qui se nomme date(ex: 1973-02-14)

J'ai essayé tes modifs, j'ai comme résultat une date: 30/11/2006 et personne à sa fête ce jour là.

j'aimerais plutot le nom de la personne.

Merci en attendant . . . et bonne vacance!!
Modifié par doublemetre (05 Aug 2007 - 23:36)
Bizarre bizarre. as tu fais bien attention a l'ordre dans mktime? c'est heure,minute,seconde,mois,jour,annee

en plus on est en 2007 bizarre que la date actuelle donne 2006....

bon sinon tu veux un nom de personne ayant sa date d'anniv aujourd'hui?

je ferais en partant du format 1973-02-14 ( donc Annee , mois, jour ). (tiens l'erreur precedente viens peut-etre aussi de là : mon list fesait jour,mois,annee)


$champ_representedateactu = date("Y-m-d");

$result = mysql_query("SELECT
pseudo,
nom,
date_anniversaire

FROM ".$CONFIG['table']

WHERE date_anniversaire=".$champ_representedateactu."

) or die(mysql_error());


mais attention au fait que ça va marcher que si tu as bien 1973-02-14 et pas 1973-2-14.

pascal
Modifié par CPascal (05 Aug 2007 - 23:51)
oui c'est bien ce format (1973-02-14)
a écrit :
bon sinon tu veux un nom de personne ayant sa date d'anniv aujourd'hui?

Non j'aimerais juste le nom de la personne qui aura sont anniversaire prochainement mais ca peut être dans 2 mois . . .

J'ai donc une erreur mais je te poste tout le code:
<?php 


$CONFIG['hostname'] = "localhost";  //mettez les paramètres de votre base
$CONFIG['database'] = "****";  //la meme chose que username pour free
$CONFIG['username'] = "***";
$CONFIG['password'] = "***";
$CONFIG['table'] = "***";




$sql = mysql_connect($CONFIG['hostname'], $CONFIG['username'], $CONFIG['password']) or die(mysql_error());
mysql_select_db($CONFIG['database'], $sql);


$champ_representedateactu = date("Y-m-d");

$result = mysql_query("SELECT 
pseudo, 
nom, 
date

FROM ".$CONFIG['table']

WHERE date=".$champ_representedateactu."

) or die(mysql_error());

?>
a la prochaine personne mais pas forcé aujourd'hui?

plus dur avec ton format.

je ferais moi avec le format Unix un demande
WHERE date>".$champ_representedateactu."

plus un limit 1 a la fin pour n'en avoir qu'un.

avec ton format ça doit etre un peu plus dur a écrire...mais surement pas impossible.

pour le code avant

FROM ".$CONFIG['table']
a remplacer par FROM ".$CONFIG['table']."
je pense. en tout cas effectivement ça manquait. c'est pas du code testé a prende avec des "pincettes" et une "loupe" donc. Smiley langue

bon, bon courage
Modifié par CPascal (06 Aug 2007 - 00:23)
Un grand merci déjà . .

J'ai une erreur à cet ligne : WHERE date>".$champ_representedateactu."
Modifié par doublemetre (06 Aug 2007 - 00:29)
a oui erreur!! de ma part. je viens de percuté (aie ca fait mal) dans ma deuxieme version faudrait testé juste "d-m" et pas "d-m-Y" car l'année correspondrait pas forcément.

c'est d'ailleurs pourquoi dans ma premiere réponse je faisais tous ça en plusieurs étape.

il doit y avoir dans mysql des fonctions Month et day peut-etre pour avoir les infos.....


le test en unix reste possible mais faudrait construire la date de comparaison en utilisant la bonne année

bon il est temps que les vacances arrivent^^
Salut Smiley cligne ,

Ça aurait été plus facile avec 3 champs (jour_anniv, mois_anniv et annee_anniv) mais bon Smiley smile :
<?php 
$CONFIG['hostname'] = "localhost";  //mettez les paramètres de votre base
$CONFIG['database'] = "****";  //la meme chose que username pour free
$CONFIG['username'] = "****";
$CONFIG['password'] = "****";
$CONFIG['table'] = "****";

$sql = mysql_connect($CONFIG['hostname'], $CONFIG['username'], $CONFIG['password']) or die("req1 ".mysql_error());
mysql_select_db($CONFIG['database'], $sql);

$mois_jour_now = (date("m") * 100) + date("d");

// Anniversaire(s) du jour
$requete = "SELECT pseudo, nom, date FROM ".$CONFIG['table']." WHERE ((month(date) * 100) + day(date))='".$mois_jour_now."'";
$result = mysql_query($requete) or die("req2 ".mysql_error());
while ($row = mysql_fetch_array($result)) {
echo $row['pseudo']."\t".$row['nom']."\t".$row['date']."<br>";
}

echo "<br />";
// Prochain(s) Anniversaire(s)
// Recherche du prochain (mois/jour) anniversaire
$requete = "SELECT min((month(date) * 100) + day(date)) as min_date FROM ".$CONFIG['table']." WHERE ((month(date) * 100) + day(date))>'".$mois_jour_now."'";
$result = mysql_query($requete) or die("req3 ".mysql_error());
$min_date = mysql_result( $result, 0 );
if ( $min_date == null) { // si on a aucun résultat, on recherche à partir du 1er janvier...
$requete = "SELECT min((month(date) * 100) + day(date)) as min_date FROM ".$CONFIG['table'];
$result = mysql_query($requete) or die("req4 ".mysql_error());
$min_date = mysql_result( $result, 0 );
}
// Recherche...
$requete = "SELECT pseudo, nom, date FROM ".$CONFIG['table']." WHERE ((month(date) * 100) + day(date))='".$min_date."'";
$result = mysql_query($requete) or die("req5 ".mysql_error());
while ($row = mysql_fetch_array($result)) {
echo $row['pseudo']."\t".$row['nom']."\t".$row['date']."<br>";
}
?>

L'une des difficultés vient de ce qu'il peut exister plusieurs personnes qui ont la même date d'anniversaire et l'autre qu'après le dernier Anniv' il faut redémarrer la recherche depuis janvier...

@CPascal : bonnes vacances Smiley biggrin !!!

A+
Modifié par Heyoan (06 Aug 2007 - 03:10)
Super vraiement merci !!

Si j'ose abuser, . . . j'obtien ce résultat : Titi Thierry Dupont 1976-12-04
et j'aimerais plutot comme cela: Titi Thierry Dupont le 4 décembre
est-ce possible
Oui, c'est possible Smiley cligne :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Document sans titre</title>
</head>

<body>
<?php 
function Mois($month) {
$mois = array('1'=>'Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre');
return $mois[$month];
}

$CONFIG['hostname'] = "localhost";  //mettez les paramètres de votre base
$CONFIG['database'] = "****";  //la meme chose que username pour free
$CONFIG['username'] = "****";
$CONFIG['password'] = "****";
$CONFIG['table'] = "****";

$sql = mysql_connect($CONFIG['hostname'], $CONFIG['username'], $CONFIG['password']) or die("req1 ".mysql_error());
mysql_select_db($CONFIG['database'], $sql);

$mois_jour_now = (date("m") * 100) + date("d");

// Anniversaire(s) du jour
echo "<strong>Anniversaire(s) du jour :</strong><br />";
$requete = "SELECT pseudo, nom, day(date) as jour, month(date) as mois FROM ".$CONFIG['table']." WHERE ((month(date) * 100) + day(date))='".$mois_jour_now."'";
$result = mysql_query($requete) or die("req2 ".mysql_error());
while ($row = mysql_fetch_array($result)) {
echo $row['pseudo']."\t".$row['nom']."\t le ".$row['jour']." ".Mois($row['mois'])."<br>";
}

echo "<strong>Prochain(s) Anniversaire(s) :</strong><br />";
// Prochain(s) Anniversaire(s)
// Recherche du prochain (mois/jour) anniversaire
$requete = "SELECT min((month(date) * 100) + day(date)) as min_date FROM ".$CONFIG['table']." WHERE ((month(date) * 100) + day(date))>'".$mois_jour_now."'";
$result = mysql_query($requete) or die("req3 ".mysql_error());
$min_date = mysql_result( $result, 0 );
if ( $min_date == null) { // si on a aucun résultat, on recherche à partir du 1er janvier...
$requete = "SELECT min((month(date) * 100) + day(date)) as min_date FROM ".$CONFIG['table'];

$result = mysql_query($requete) or die("req4 ".mysql_error());
$min_date = mysql_result( $result, 0 );
}
// Recherche...
$requete = "SELECT pseudo, nom, day(date) as jour, month(date) as mois FROM ".$CONFIG['table']." WHERE ((month(date) * 100) + day(date))='".$min_date."'";
$result = mysql_query($requete) or die("req5 ".mysql_error());
while ($row = mysql_fetch_array($result)) {
echo $row['pseudo']."\t".$row['nom']."\t le ".$row['jour']." ".Mois($row['mois'])."<br>";
}

?>
</body>
</html>

A+
Merci merci je suis vraiement épaté . . .
J'ai essayer sur ma page test tout va très bien, mais quand je l'intégre sur mon espace privé j'ai des message d'erreur.

Je pense que je dois l'intégré là:
<?php

function report( $arg , $font = 'red', $name = 'report' )
{
  if ( !isset( $_SESSION[$name] ) )
  {
    $_SESSION[$name] = '';
  }

  $font = !isset( $font ) ? 'red' : $font;

  $_SESSION[$name] .= '<font color="' . $font . '">' . $arg . '</font><br/><br/>';
}

function report_disp( $name = 'report' )
{
  echo ( isset( $_SESSION[$name] ) and !empty( $_SESSION[$name] ) ) ? $_SESSION[$name] : '';
  $_SESSION[$name] = '';
}
 
//Restreint l'acces à la page

function user_verif($type, $loc)
{
  global $id, $rang;

  if ( empty ( $id ) || ( $type == '1' && $rang < '1' ) || ( $type == '2' && $rang < '2' ) || ( $type == '3' && $rang != '3' ) )
  {
    header("Location: $loc");

    exit;
  }
}


//Affiche les infos du membre connecté

function user($var)
{
  global $id, $rang, $pseudo, $email, $date, $activ;

  if ( isset( $id ) and ( $var == 'pseudo' or $var == 'email' or $var == 'date' or $var == 'rang' or $var == 'activ' ) )
  {
    if ( $var == 'rang' )
    {
      $t = array('1'=>'utilisateur', '2'=>'modérateur', '3'=>'administrateur');

      echo $t[$rang];
    }

    else
    {
      echo $$var;
    }
  }
}


//Affiche les statistiques des membres

function stats($do,$for)
{
  global $sql_table, $sql;

  $sql->open();

  if ( ereg("1|2|3", $for) )
  {
    if ( ereg("1", $for) ) { $var1 = "1"; } else { $var1 = "0"; }

    if ( ereg("2", $for) ) { $var2 = "2"; } else { $var2 = "0"; }

    if ( ereg("3", $for) ) { $var3 = "3"; } else { $var3 = "0"; }


    $result = $sql->query("SELECT * FROM $sql_table WHERE rang IN ($var1,$var2,$var3) ORDER By pseudo,rang,nom,date");


    if ( $do == 'nb' )
    {
      echo mysql_num_rows($result);   
    }

    elseif( $do == 'ls' )
    {
      if ( mysql_num_rows($result) == 0 )
      {
	echo '<i>Aucun</i>';
      }

      else
      {
	while ($row = mysql_fetch_assoc($result))
	{
	  ?>


	  <div id="bulle" style="position: absolute; width: 224px; height: 48px;"></div>
<script>
decal_x = 1;
decal_y = -400;
</script>

<script>
document.onmousemove = suivre_souris0;
var contenu
function pop0(contenu)
{
document.getElementById("bulle").innerHTML = "<style='background-color: #DDDDD;'cellpadding='6' cellspacing='0'><tr><td><font color='#00000'face='arial'size='2'><b>"+contenu+"</b></font></td></tr></table>";
}
function suivre_souris0(e)
{
if (navigator.appName=="Microsoft Internet Explorer")
{
var x = event.x + document.body.scrollLeft;	var y = event.y + document.body.scrollTop;
}
else
{
var x =  e.pageX;var y =  e.pageY;
}
document.getElementById("bulle").style.left = x + decal_x; document.getElementById("bulle").style.top  = y + decal_y;
}
function disparaitre0()
{
document.getElementById("bulle").innerHTML = '';
}</script>


<a href="#"onMouseOver="pop0('<?php echo $row['nom'] ?>')" onMouseOut="disparaitre0()"><?php echo $row['pseudo'] . '<br>';?></a>
<?php 
	
	}
      }
    }
  }

  $sql->close();
}


//Affiche les connectés

function stats_connectes($do,$for)
{
  global $sql_table, $sql;

  $sql->open();

  if ( ereg("1|2|3", $for) )
  {
    if ( ereg("1", $for) ) { $var1 = "1"; } else { $var1 = "0"; }

    if ( ereg("2", $for) ) { $var2 = "2"; } else { $var2 = "0"; }

    if ( ereg("3", $for) ) { $var3 = "3"; } else { $var3 = "0"; }


    $result = $sql_query = "UPDATE TN_membres SET derniere='$time', pseudo='$pseudo', date='$date' WHERE ip='$ip'"; 
  


    if ( $do == 'nb' )
    {
      echo mysql_num_rows($result);   
    }

    elseif( $do == 'ls' )
    {
      if ( mysql_num_rows($result) == 0 )
      {
	echo '<i>Aucun</i>';
      }

      else
      {
	while ($row = mysql_fetch_assoc($result))
	{
	  echo $row['pseudo'] . '<br>';
	}
      }
    }
  }

  $sql->close();
}
//Affiche un lien pour le rang spécifié

function affiche( $html, $for )
{
  global $rang;

  if ( ( ereg("1", $for) and $rang == '1' ) or ( ereg("2", $for) and $rang == '2' ) or ( ereg("3", $for) and $rang == '3' ) )
  {
    echo $html;
  }
}
	


?>


et après appeler la fonction sur la page d'accueil ?
Re',

tu pourrais essayer de rajouter cela dans la page :
//Mois en français
function Mois($month)
{
	$mois = array('1'=>'Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre');
	return $mois[$month];
}

//Affiche les Anniversaires
function affich_anniv()
{
	global $sql_table, $sql;

	$sql->open();

	$table_anniv = 'anniv'; // REMPLACER PAR LE VRAI NOM DE LA TABLE

	$mois_jour_now = (date("m") * 100) + date("d");
	
	// Anniversaire(s) du jour
	$requete = "SELECT pseudo, nom, day(date) as jour, month(date) as mois FROM $table_anniv WHERE ((month(date) * 100) + day(date))='".$mois_jour_now."' ORDER BY pseudo";
	$result = $sql->query($requete);
	if ( mysql_num_rows($result) != 0 ) {
		echo "<strong>Anniversaire(s) du jour :</strong><br />";
		while ($row = mysql_fetch_array($result)) {
			echo $row['pseudo']."\t".$row['nom']."\t le ".$row['jour']." ".Mois($row['mois'])."<br>";
		}
	}
	
	echo "<strong>Prochain(s) Anniversaire(s) :</strong><br />";
	// Prochain(s) Anniversaire(s)
	// Recherche du prochain (mois/jour) anniversaire
	$requete = "SELECT min((month(date) * 100) + day(date)) as min_date FROM $table_anniv WHERE ((month(date) * 100) + day(date))>'".$mois_jour_now."'";
	$result = $sql->query($requete);
	$min_date = mysql_result( $result, 0 );
	if ( $min_date == null) { // si on a aucun résultat, on recherche à partir du 1er janvier...
		$requete = "SELECT min((month(date) * 100) + day(date)) as min_date FROM $table_anniv";
		$result = $sql->query($requete);
		$min_date = mysql_result( $result, 0 );
	}
	// Recherche...
	$requete = "SELECT pseudo, nom, day(date) as jour, month(date) as mois FROM $table_anniv WHERE ((month(date) * 100) + day(date))='".$min_date."'";
	$result = $sql->query($requete);
	if ( mysql_num_rows($result) != 0 ) {
		while ($row = mysql_fetch_array($result)) {
			echo $row['pseudo']."\t".$row['nom']."\t le ".$row['jour']." ".Mois($row['mois'])."<br>";
		}
	}

	$sql->close();
}

et de l'appeler (par exemple depuis ta page d'accueil) avec affich_anniv();

Mais c'est sans garantie puisqu'il faudrait voir la classe sql pour vérifier... Smiley cligne

A+
Pages :