Page 1 sur 1

petit script php ==> fonction getdate()

Posté : 14 févr. 2006, 16:24
par BeRoots
Bonjour,

Voilà, j'ai une table de ce type:
CREATE TABLE `table_manif` (
`manif_id` INT( 11 ) NOT NULL AUTO_INCREMENT ,
`manif_date` DATE NOT NULL ,
`manif` TEXT NOT NULL ,
PRIMARY KEY ( `manif_id` )
) TYPE = MYISAM;

1°) que signifie le 11?

2°) je souhaite faire une table qui s'organise chronologiquement par rapport au champ "manif_date" (de la date la plus ancienne à la plus recente). Ce champ est incrémenté manuelement par l'ajout d'une date dans un formulaire.

3°) je souhaite aussi que les lignes de cette table, dont la date du champ "manif_date" est depassée, s'efface automatiquement et ce une fois par jour.

merci d'avance pour votre aide
:wink:

Posté : 15 févr. 2006, 00:38
par Cyrano
Salut
  1. Le "11" indique le nombre de caractères qui seront affichés au maximum, rien d'autre et à ne pas confondre avec la valeur maximum pouvant être inscrite sous ce type ( INT => de -2147483648 à +2147483647 )
  2. Une table sera triée dans le sens des entrées, tu ne peux pas déplacer les lignes : pour obtenir un tri chronologique par rapport à un champ de type DATE ou DATETIME utilise une clause ORDER BY sur ce champ dans tes requêtes SQL;
  3. Pour effectuer des mises à jour automatiques périodiques, tu devras passer par une tâche cron ou encore via webcron : dans ce dernier cas, crée un fichier en PHP qui contiendra les instructions à exécuter et définis une tâche sur webcron pour faire appeler ce fichier à une heure particulière selon une périodicité précise (toutes les heures, tous les jours, toutes les semaines, etc...) MySQL ne peut pas être autonome pour effectuer ce type de procédure.

Posté : 15 févr. 2006, 02:53
par BeRoots
1°) merci pour l'info

2°) en fait si je te comprend bien, j'entre me donnée dans la table dans un ordre chronologique avec ORDER BY? je pensait quand même que c'était possible car sous phpmyadmin, quand tu execute cette requete, cela affiche les enregistrements de le table trié par date
SELECT * FROM `table_manif` WHERE 1 ORDER BY `date_manif`ASC LIMIT 0 , 30
2-1°) ne serait il pas plus judicieux de trié ces enregistrements au moment de la recuperation des données?

3°) j'ai jeter un bref coup d'oeil à webcron mais j'ai vue que les derniere news datait de 2005 et que le webmaster cherchait à l'epoque à ce faire remplacer pour arreter de s'en occuper...

n'est il pas possible de faire cette MAJ via un script php (genre celui qui va récuperer les donné pour les afficher), qui serai executé à chaque visite de la page depuis laquelle on affiche les données recuperées?

genre on ecrit la date du jour dans un fichier php mis en include dans le script de recuperation de données, et à chaque execution on verifie si la date inscrite dans celi-ci est identique à celle du jour:
- si identique on continu la recuperation
- si date differente, on réécrit ce fichier avec la date du jour et on poursuit la récuperation.

(je sait que ça va alourdir un peu le code mais c'est pas vraiment infaisable à mon avis :wink: )

merci d'avance pour vos conseil sur ces sujets :)

Posté : 15 févr. 2006, 09:56
par Cyrano
Sur le point 2 : tu insères les données dans l'ordre où elles arrivent, ça n'a pas vraiment d'importance et tu as fort bien compris, il faut trier chronologiquement lorsque tu fais une requête SELECT, donc effectivement à la récupération des données. Mais par rapport à ta question originale, tu semblais vouloir trier au fur et à mesure des insertion et ça, ce serait possible en montant une petite usine à gaz qui récupèrerait toutes les données triées pour les mettre dans une table temporaire, vider la table originale et ré-injecter les données depuis la table temporaire : beaucoup de bruit pour pas grand chose à mon avis.

Pour l'automatisation des tâches, tu pourrais effectivement le faire déclencher par le premier visiteur qui passe. Si tu as un taux de fréquentation suffisant, ça fonctionnera très bien, mais il faudrait mettre un test de vérification de la dernière mise à jour pour ne pas la refaire a chaque nouvelle visite au cours de la même journée si tu prévois une mies à jour quotidienne.

Posté : 15 févr. 2006, 16:44
par BeRoots
ok ben il n'y a plus qu'à si mettre alors :wink:

merci pour les info :pouce:

je laisse le sujet ouvert un petit moment au cas où je recontre des problèmes :?

Posté : 19 févr. 2006, 19:30
par BeRoots
j'ai attaqué mon script de recuperation de donnée :)

pour l'instant j'ai un fichier date_today.php comme suit:
<?php $today="2006-12-31"?>
je cherche à faire une boucle de verification pour voir si on a bien la date du jour dedant et sinon on reecrit le fichier avec la date du jour et on poursuit le script...

sa me donne ceci:
<?php
include('date_today.php');
$verif_date = getdate('%Y "-" %m "-" %d');
if ($today = $verif_date );
else (!$verif_date);
{
// ouvre en ecriture ou tente de créé si inexistant, effacer le fichier et place le pointeur de fichier au debut du fichier
$fp = fopen ("date_today.php", "w+");

// on reecrit notre fichier avec la nouvelle valeur
fwrite ($fp, '<?php $today="'.$verif_date.'"; ?>');

// on ferme le fichier
fclose ($fp);
}
?>
le script à l'air de fonctionner mais il ecrit array dans mon fichier date_today.php :cry:

le problème vient de mon utilisation de getdate() mais je trouve pas comment faire pour avoir la date au format AAAA-MM-DD

pouvez vous m'aider :oops:

Posté : 19 févr. 2006, 22:11
par Cyrano
C'est certain que tu as besoin d'aide : je me demande si tu comprends toi-même ton propre code :-k

Tu fais un if() fermé directement par un ";" dans aucune instruction et ensuite un else avec des paramètres. Le if ne teste pas une condition mais affecte une valeur à une variable. Et juste avant, je ne saisis pas vraiment ce que tu veux faire avec get_date() : j'ai des raisons de croire que ce que tu cherches à faire ressemble davantage à ceci:
<?php
$fichier = "date_today.php";
if(file_exists($fichier))
{
    include($fichier);
    $date = $today;
}
else
{
    $date = null;
}
$verif_date = date("Y-m-d");
if ($today != $verif_date )
{
    // ouvre en ecriture ou tente de créé si inexistant, effacer le fichier et place le pointeur de fichier au debut du fichier
    $fp = fopen ($fichier, "w+");

    // on reecrit notre fichier avec la nouvelle valeur
    fwrite ($fp, '<?php $today="'.$verif_date.'"; ?>');

    // on ferme le fichier
    fclose ($fp);
}
?>

Posté : 20 févr. 2006, 01:47
par BeRoots
ton code fonctionne tres bien mais j'ai du mal à interpreter le debut :oops:
c'est mes premieres boucles donc essaye d'etre indulgent :wink:

je cherche à verifier si la date de la variable $today ecrite dans mon fichier est bien celle du jour en cours.
si c'est celle du jour en cour, on continu
si ce n'est pas le cas on reecrit le fichier date_totay.php avec la date du jour en cours

je ne comprend pas trop ta premiere boucle donc si quelqu'un a la gentillesse de commenter le code pour la premiere boucle, sa apporterai un plus à ma comprention :wink:

par la suite je vais essayer de faire en sorte que l'on efface touts les ligne d'une table de db dont la date est depasser, puis une optimisation de celle-ci.

enfin je recupererais les infos de la table pour les afficher.

Posté : 20 févr. 2006, 10:14
par Cyrano
Bien, alors on va commencer par un petit correctif: il n'y a pas de boucle dans ce code.

Définition d'une boucle : la boucle est une structure qui va exécuter une ou plusieurs instruction tant qu'une condition est vérifiée. Les fonctions PHP pour les boucles sont:
  • for()
  • foreach()
  • while() (ou do... while())
La structure if() est une alternative.

Le code que je t'ai indiqué s'explique de la manière suivante:

Comme je ne sais pas si le fichier existe, je risque d'avoir une erreur en utilisant la variable $today : il faut donc pour éviter cette erreur que je sois certain que ma variable existe et est bien initialisée. Je commence donc par vérifier l'existence du fichier avec file_exists()
La structure de départ est donc la suivante :
  1. Je crée une variable qui contient le nom du fichier;
  2. Si le fichier existe alors:
    • J'inclus le fichier;
    • Je récupère la valeur de la variable $today inscrite dans ce fichier que j'affecte à une variable de travail;
  3. Sinon, j'affecte la valeur NULL à la variable de travail
À ce stade, j'ai une variable $date que je pux utiliser sans risquer de générer un message d'erreur.

Ensuite, je récupère la date du jour en cours dans la variable $verif_date avec la fonction date() et non la fonction get_date()

Je compare la date de $verif_date et cette de $date déterminée dans la première alternative.

Je crée une seconde alternative sur cette comparaison : Si les deux dates sont différentes, alors j'ouvre le fichier en écriture et je le ré-écris avec la date en cours. Le code ne comprte pas de else, ce qui sous-entend que dans le cas contraire, il ne se passe rien du tout.

Est-ce que c'est moins nébuleux comme ça ?

Posté : 20 févr. 2006, 10:34
par BeRoots
en faite je ne comprenais pas pourquoi tu avait la variable de travail et je pense que c'est tres instructif ainsi :wink:

merçi du coup de pouce :P

je vais essayer de passer à la suite du script pour mettre en place les requete sql et la recuperation pour affichage :wink:

je posterai ici si besoin d'autre conseil :wink:

Posté : 20 févr. 2006, 10:37
par Cyrano
Attention si tu postes: nouveau sujet, nouveau post, ne rallonge pas celui-ci avec autre chose. Si celui-ci est résolu, on peut le mettre à [Résolu]

Posté : 21 févr. 2006, 01:12
par BeRoots
ooops, bien vue :wink:

sujet resolu