8791 sujets

Développement web côté serveur, CMS

Bonjour,

J'ai mis en place sur mon site un formulaire à remplir par les personnes de la mairie pour déclarer les coupures d'eau.

J'ai mis sur mon index un lien qui renvoie sur une page qui donne les coupures prévisionnelles et je veux que la balise <blink> ne fonctionne que lorsque la date d'une coupure correspond à la date du jour.

J'ai donc mis ceci dans mon index :
<?php
$date=date("Y-m-d");
mysql_connect("localhost", "login", "mdp"); // Connexion à MySQL
mysql_select_db("db"); // Sélection de la base db
$reponse = mysql_query("SELECT Date FROM coupures"); 
while ($donnees = mysql_fetch_array($reponse) )
{
 	if ($donnees==$date)
	{
	($b="<blink>Alerte coupures d'eau</blink>");
	}
else
	{
	($b="Alerte coupures d'eau");
	}
}
mysql_close(); // Déconnexion de MySQL
?>


Et un peu plus loin :
<a href="Les_coupures.php"><?php print ($b); ?></a>


Mais même si ca ne me renvoie pas d'erreur, ca ne fonctionne pas. Mon <blink> ne clignote pas alors que si je fais simplement un

<?php
$c=1;
if ($c ==1)
      {
       $b="<blink>Alerte coupures d'eau</blink>";
      }
else
     {
      $b="Alerte coupures d'eau";
     }
?>


Ca foctionne ...

Donc je suppose qu'il y a un probème sur la comparaison.

Pouvez vous m'aider svp ?

Merci d'avance

Amicalement
Lonewolf
Modifié par lonewolf (30 Jul 2008 - 11:54)
Bonjour Smiley smile

La date enregistrée dans la base de données est de la forme "Y-m-d" ? Que renvoie $donnees dans le test ?
while ($donnees = mysql_fetch_array($reponse) )
{
        [b]echo "Var bdd = ".$donnees." / Var date = ".$date;[/b]

 	if ($donnees==$date)
	{
	($b="<blink>Alerte coupures d'eau</blink>");
	}
        else
	{
	($b="Alerte coupures d'eau");
	}
}

A mon avis il s'agit d'un problème de format...

Et tu peux optimiser facilement ton code:
[...]

$b = "Alerte coupures d'eau";
while ($donnees = mysql_fetch_array($reponse))
{
     if ($donnees==$date)
          $b="<blink>".$b."</blink>");
}

EDIT :
D'ailleurs c'est bizarre ton truc, à chaque pas de la boucle le contenu de $b est écrasé. A la fin du while, $b ne concernera donc que LE DERNIER enregistrement de la base. C'est ce que tu cherches à faire ?
Modifié par BeliG (29 Jul 2008 - 17:35)
Oui c'est bien ce que je cherche à faire.

j'essai tes suggestions et te tient au courant.

Merci de ton aide

Amicalement
Lonewolf

ps : ah oui j'allais oublié. Dans ma base mysql, le format de Date est bien DATE donc il me semble pas défaut en Y-m-d

[EDIT] Résultat de la commande suggérée
Var bdd = Array / Var date = 2008-07-29Var bdd = Array / Var date = 2008-07-29
et pourtant ca refuse de clignoter
Modifié par lonewolf (29 Jul 2008 - 18:07)
L'élement <blink> n'est pas supporté par Internet Explorer (en tous cas pas IE 7, sur lequel j'ai testé)
Essaie avec un autre navigateur (sous Opera ça fonctionne).

Sinon, il y a d'autres manières plus élégantes de mettre un élément en évidence (souligné, gras, autre couleur, etc).

Autrement, tu peux utiliser du javascript.

-Edit-
Argh, j'ai compris de travers. En fait c'est simplement parce que ta variable $donnees est un tableau que tu compare à une chaine de caractères (une date).

Tu peux utiliser

print_r($donnees);


pour affichier le tableau sous une forme compréhensible et je pense que la solution te sautera directement aux yeux Smiley cligne
Modifié par superjun (29 Jul 2008 - 21:11)
Re,

Effectivement, j'ai trouvé une solution mais incomplète puisque si mon tableau est vide je n'ai plus accès a mon lien.

Pourtant le code me semblait correct.

Si vous pouvez y jeter un oeil pour voir si vous croisez le problème Smiley biggrin ca serait super.

Voici le code original :
<?php
//Codage php pour le blink de la coupure d'eau
$date=date("Y-m-d");
mysql_connect("localhost", "login", "mdp"); // Connexion à MySQL
mysql_select_db("db); // Sélection de la base db
$reponse = mysql_query("SELECT Date FROM coupures"); 
while ($donnees = mysql_fetch_array($reponse) )
{
	if ($donnees['Date']==$date)
	{
        	$b="<blink>Alerte coupures d'eau</blink>";
	}
	else
	{
		$b="Alerte coupures d'eau";
		}
}
mysql_close(); // Déconnexion de MySQL
?>


Et celui par lequel, je pensais pouvoir tout arranger.

<?php
//Codage php pour le blink de la coupure d'eau
$date=date("Y-m-d");
mysql_connect("localhost", "login", "mdp"); // Connexion à MySQL
mysql_select_db("db"); // Sélection de la base db
$reponse = mysql_query("SELECT Date FROM coupures"); 
if($reponse!= NULL)//  Si ma table contient au moins une date
{
	while ($donnees = mysql_fetch_array($reponse) )
	{
		if ($donnees['Date']==$date)
		{
		$b="<blink>Alerte coupures d'eau</blink>";
		}
		else
		{
		$b="Alerte coupures d'eau";
		}
	}
}
else
{
	$b="Alerte coupures d'eau";
}
mysql_close(); // Déconnexion de MySQL
?>


Merci d'avance

Amicalement
Lonewolf
Salut,

* comme on peut le voir sur cette page, DATE est une fonction de Mysql et ne devrait pas être le nom d'un champ de table. Il se trouve que c'est l'un des cas particuliers des mots réservés Mysql mais ça n'en est pas moins une mauvaise pratique. Pour que ce soit plus clair imagines la requête suivante :
SELECT select, from FROM matable" Smiley ohwell .
J'utiliserai donc Date_Coupure plus bas.

* je doute (très fortement) que la condition ($reponse!= NULL) puisse fonctionner en mettant juste avant $reponse = mysql_query("blabla");
De toute façon la fonction mysql_num_rows sert justement à retourner le nombres de résultats d'une requête.

* en voilà une requête pas optimisée ! Quel est l'intérêt d'effectuer un test sur tous les résultats retournés par une requête en sachant déjà que seul le dernier sera utilisé ? Smiley rolleyes
Cela ne se remarque pas trop en phase de développement quand il n'y a qu'une dizaine d'enregistrements dans une table mais ça devient vraiment délirant sur une table en production qui est alimentée depuis des années et qui contient 1000, 10000 ou 100000 enregistrements !
D'autre part, même si la table contient bien la date du jour, il suffit que ce ne soit pas la dernière date saisie et le <blink> ne marchera pas !

* personnellement je n'écris une requête qu'à partir du moment où je peux la traduire clairement en "français". Par exemple il me semble bien que :
lonewolf a écrit :
je veux que la balise <blink> ne fonctionne que lorsque la date d'une coupure correspond à la date du jour.
pourrait être énoncée de la façon suivante :
SI une Date de coupure dans la table COUPURES est égale à la date du jour, alors <blink>. SINON PAS <blink>.
Bon ! Ce n'est pas du "français" très riche mais on peut facilement le traduire en code PHP et Mysql et cela devient :
<?php
mysql_connect("localhost", "login", "mdp"); // Connexion à MySQL
mysql_select_db("db"); // Sélection de la base db
$sql = "SELECT 'OK' FROM coupures WHERE Date_Coupure  = CURRENT_DATE() LIMIT 1"; 
// Peu importe ce qui est SELECT-ionné (ici 'OK') puisqu'on ne s'occupera que du nombre de résultats !
// Le LIMIT 1 permet d'arrêter la requête dès qu'un résultat est trouvé puisque cela est suffisant pour le test à effectuer...
$reponse = mysql_query($sql) or die(mysql_error());
$style_du_jour = '';
if (mysql_num_rows($reponse) > 0) {
	$style_du_jour = ' style="text-decoration: blink"';
}

mysql_close(); // Déconnexion de MySQL
?>
et plus loin
<a href="Les_coupures.php"<?php echo $style_du_jour; ?>>Alerte coupures d'eau</a>

En passant la balise <blink> est obsolète et je l'ai remplacée par style="text-decoration: blink".

A+
Bonjour

Ok, je comprend mieux maintenant pourquoi ca ne marchait pas.

Je viens de tester ton code et ca fonctionne a merveille mais comme j'aime bien comprendre ce que je fais, je me permets de te demander si j'ai bien compris le code.

$sql = "SELECT 'OK' FROM coupures WHERE Date_Coupure  = CURRENT_DATE() LIMIT 1"; 
pourrait signifier selectionner 'ok' de la table 'coupures' ou le champs 'Date' correspond à la date courante et s'arrêter si il y a une date compatible ?

if (mysql_num_rows($reponse) > 0) 
signifierait si il y au moins une réponse positive ?

Si c'est bien cela, j'ai que j'ai bien compris le code et que je pourrais le refaire (à condition que je regarde plus précisement CURRENT_DATE() et mysql_num_rows Smiley biggrin )

Merci encore à tous pour votre aide.

Amicalement
Lonewolf

Ps : tu as complétement raison (au cas ou tu en douterais Smiley cligne ) sur le fait qu'il est vraiment peu propre d'utiliser un champs date en sachant qu'il y a une variable date en php. Je ferais plus attention la prochaine fois. Merci encore
lonewolf a écrit :
pourrait signifier selectionner 'ok' de la table 'coupures' où le champs 'Date_Coupure' correspond à la date courante et s'arrêter si il y a une date compatible ?
...
signifierait si il y au moins une réponse positive
Exactement. Smiley smile
lonewolf a écrit :
Ps : tu as complétement raison (au cas ou tu en douterais Smiley cligne ) sur le fait qu'il est vraiment peu propre d'utiliser un champs date en sachant qu'il y a une variable date en php.
En l'occurrence je parlais de la fonction DATE de Mysql. Smiley cligne