OVH Cloud OVH Cloud

Case a cocher - Date not between

8 réponses
Avatar
elia
Bonjour,

Disposant d'une base de données qui affiche des « News » sur un
site Internet, j'ai créé, côté « Admin » un formulaire de
recherche pour voir quels sont les « News » qui sont Online ou
Offline sur le site.

Dans ma base mysql j'ai donc les paramètres pour chaque "News" :
Date_start
Et
Date_end
En dehors de ces dates, les « News » ne sont pas affichées sur le
site.

J'aimerais donc dans un formulaire pour l'administration du site
avoir une case à cocher « Off_line »
Lorsque celle si est cochée, toutes les « News » qui ne sont pas
comprise entre Date_start
Et Date_end devront être affichées.

J'ai donc essayé comme suit :

Dans l'entête :
<?php
if (isset($HTTP_GET_VARS["date_off"]))
{
$ date_off =$HTTP_GET_VARS["date_off"];
}
else
{
$ date_off =0;
}
?>

Dans mon formulaire pour la case à cocher:
<input <?php if ("CURRENT_DATE NOT BETWEEN $row_R_news['date_start']
AND $row_R_news['date_end'] ",1) {echo "checked=\"checked\"";} ?>
name=" date_off " type="checkbox" id=" date_off " value="1">

Et dans ma requête sql:
SELECT t_news.*
FROM t_news
WHERE $date_off

Je ne sais pas si il y a plus simple mais pour l'instant, rien ne
marche!! Merci si vous pouvez m'aider. Pascal

8 réponses

Avatar
Olivier Miakinen
Bonjour,


[...]

J'ai donc essayé comme suit :

Dans l'entête :
<?php
if (isset($HTTP_GET_VARS["date_off"]))
{
$ date_off =$HTTP_GET_VARS["date_off"];
}
else
{
$ date_off =0;
}
?>


Note que si ta version de PHP n'est pas trop vieille tu peux utiliser
$_GET, voire $_REQUEST, à la place de $HTTP_GET_VARS. Ce n'est qu'une
remarque en passant puisque l'ancienne variable, quoique obsolète, est
toujours reconnue.

Voir <http://fr3.php.net/manual/fr/language.variables.predefined.php>.

Dans mon formulaire pour la case à cocher:
<input <?php if ("CURRENT_DATE NOT BETWEEN $row_R_news['date_start']
AND $row_R_news['date_end'] ",1) {echo "checked="checked"";} ?>
name=" date_off " type="checkbox" id=" date_off " value="1">


Euh... tu passes une chaîne de caractères dans un if(), et tu espères
qu'automagiquement cela fera une requête SQL ? Ça ne marche pas comme
ça. Le test « if ("CURRENT_DATE etc.") » est toujours vrai.

Et dans ma requête sql:
SELECT t_news.*
FROM t_news
WHERE $date_off

Je ne sais pas si il y a plus simple mais pour l'instant, rien ne
marche!! Merci si vous pouvez m'aider. Pascal


C'est normal que rien ne marche en l'état. J'espère que ma remarque sur
la requête qui n'en est pas une saura t'aider à trouver comment faire ;
sinon, commence par trouver quelque part un exemple qui fonctionne, je
suis sûr que cela doit exister quelque part. Un jour je m'y mettrai
aussi, mais là je ne peux pas, c'est l'heure de déjeuner.

--
Olivier Miakinen
Troll du plus sage chez les conviviaux : le nouveau venu, avec
son clan, s'infiltre dans les groupes de nouvelles. (3 c.)

Avatar
MaXX
elia wrote:
[...]
J'ai donc essayé comme suit :

Dans l'entête :
<?php
if (isset($HTTP_GET_VARS["date_off"]))
{
$ date_off =$HTTP_GET_VARS["date_off"];
}
else
{
$ date_off =0;
}
?>

Dans mon formulaire pour la case à cocher:
<input <?php if ("CURRENT_DATE NOT BETWEEN $row_R_news['date_start']
AND $row_R_news['date_end'] ",1) {echo "checked="checked"";} ?>
name=" date_off " type="checkbox" id=" date_off " value="1">
ça m'a l'air suspect ce "CURRENT_DATE NOT BETWEEN"... Ressemble a du SQL

dans un bloc php...
Et dans ma requête sql:
SELECT t_news.*
FROM t_news
WHERE $date_off
Si la BDD supporte CASE (PostgreSQL entre autres) essayer qqch comme:

SELECT t_news.*,
CASE WHEN (CURRENT_DATE BETWEEN date_start AND date_end)
THEN '1'
ELSE '0'
END AS 'date_dans_l_interval'
FROM t_news
...

Et dans le code php
<?php if ($row_R_news['date_dans_l_interval']==1){echo
"checked="checked"";} ?>

Je ne sais pas si il y a plus simple mais pour l'instant, rien ne
marche!! Merci si vous pouvez m'aider. Pascal
de rien,


PS: j'ai l'impression qu'il est possible de se passer du CASE pour cet
exemple. Tester "SELECT CURRENT_DATE BETWEEN '2006-04-10' AND '2006-04-20'
AS 'date_dans_l_interval'" et voir la valeur retournée par la requète, puis
adapter le code php en fonction de la valeur de retour (probablement TRUE
ou FALSE).

--
MaXX

Avatar
Florian Sinatra
*elia* @ 18/04/2006 10:49 :
Je ne sais pas si il y a plus simple mais pour l'instant, rien ne
marche!! Merci si vous pouvez m'aider. Pascal


Tu m'étonnes. Apprenez le PHP, le MySQL et revenez.
<http://phpdebutant.org/article118.php>

Avatar
elia
Merci pour tous, oui, entre php et MySQL, c'est vrai que je débute, ce
n'est pas encore dans la poche, je vais en tout cas utiliser les liens
que vous m'avez donnés. Merci (humm, et si quelqu'un à une solution
encore....merci) Pascal
Avatar
Florian Sinatra
*elia* @ 19/04/2006 10:47 :
Merci pour tous, oui, entre php et MySQL, c'est vrai que je débute, ce
n'est pas encore dans la poche, je vais en tout cas utiliser les liens
que vous m'avez donnés. Merci (humm, et si quelqu'un à une solution
encore....merci) Pascal


Bon, je veux bien m'y coller si tu m'expliques mieux ce que tu cherches
à faire. C'est bien paske c'est les vacances ;-)

Avatar
elia
Merci Florian,

Et bien voilà,

Pour un site Internet qui diffuse des News, j'ai crée un moteurs de
recherche coté « Admin » pour administrer ce site et gérer « quand
les
news apparaîtront sur le site ».
Pour la diffusion des News, la base de donnée mysql contient les
rangées :
Date_start
Et
Date_end

Entre ces dates, celles si sont affichées sur le site, sinon, elles ne

sont pas affichées.

Sur mon formulaire de recherche je mets donc une option (case à
cochée) pour rechercher quelles sont les news qui sont online. Cela
permet de mieux gérer les news.

Si la case est cochée alors j'affiche toutes les news qui ne sont pas
online car elles sont à l'extérieur de la période prévue.

Si la case n'est pas cochée, j'affiche toute les news qui sont entre
ces deux dates.

Coté code, pour la case à coché du formulaire j'ai :

<input <?php if (!(strcmp($row_R_news['offline'],1))) {echo
"checked="checked"";} ?> name="offline" type="checkbox" value="1"
checked>

Dans le Head, un code en php pour definir la variable offline.

Si à l'extérieur des date alors la valeur est = 1 sinon 0

Et dans ma requête sql (bouton envoyer du formulaire) :

SELECT t_news.*
FROM t_news
WHERE ......$offline

Je suis un débutant autant en mysql que php mais bon, je m'y frotte
tout de même.

Voilà c'est sympa si tu peux m'aider, pascal
Avatar
Florian Sinatra
*elia* @ 21/04/2006 09:28 :
Merci Florian,

Et bien voilà,

Pour un site Internet qui diffuse des News, j'ai crée un moteurs de
recherche coté « Admin » pour administrer ce site et gérer « quand
les
news apparaîtront sur le site ».
Pour la diffusion des News, la base de donnée mysql contient les
rangées :


colonnes plutôt non ?

Date_start
Et
Date_end

Entre ces dates, celles si sont affichées sur le site, sinon, elles ne

sont pas affichées.

Sur mon formulaire de recherche je mets donc une option (case à
cochée) pour rechercher quelles sont les news qui sont online. Cela
permet de mieux gérer les news.

Si la case est cochée alors j'affiche toutes les news qui ne sont pas
online car elles sont à l'extérieur de la période prévue.

Si la case n'est pas cochée, j'affiche toute les news qui sont entre
ces deux dates.

Coté code, pour la case à coché du formulaire j'ai :

<input <?php if (!(strcmp($row_R_news['offline'],1))) {echo
"checked="checked"";} ?> name="offline" type="checkbox" value"1"
checked>
^^^^ bah vire ce checked


J'vois pas l'intérêt du strcmp.

Dans le Head, un code en php pour definir la variable offline.


Qui ressemble à ?

Si à l'extérieur des date alors la valeur est = 1 sinon 0


Si tu parles de $row_R_news['offline'], alors il suffit de faire un <?php
if($row_R_offline) echo "checked='checked'";
?>

Et dans ma requête sql (bouton envoyer du formulaire) :

SELECT t_news.*
FROM t_news
WHERE ......$offline


Je pars du principe que ta table t_news contient au moins
+----------+--------------+------------+
| news | date_start | date_end |
+----------+--------------+------------+

J'dirais
$query="SELECT t_news.*
FROM t_news
WHERE CURRENT_DATE".
($row_R_news['offline'] ? "NOT " : " ").
"BETWEEN date_start AND date_end";

(La notation
expr ? comm1 : comm2;
est équivalente à
if(expr)
comm1;
else
comm2;
avec l'avantage qu'on peut l'insérer partout)

Je suis un débutant autant en mysql que php mais bon, je m'y frotte
tout de même.

Voilà c'est sympa si tu peux m'aider, pascal


Ben ca me semble un peu fouillis. Mais tu devrais avoir tout ski faut
pour te débrouiller, sans oublier la lecture de
* http://dev.mysql.com/doc/refman/5.0/fr/
* http://php.benscom.com/manual/fr/
* http://www.phpdebutant.com/

;-)
--
"L'encre du savant est plus sacrée que le sang du martyr"

Avatar
elia
ok, un super merci, je pense pouvoir em débrouiller avec cela. merci