Creer une routine sur 52 semaines, comment faire ?

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 : Creer une routine sur 52 semaines, comment faire ?

Re: Creer une routine sur 52 semaines, comment faire ?

par jeanbianne » 30 mai 2016, 10:27

Finipe,
J'étudie tout ça à tête reposée et Je te tiens au courant.
Merci pour ton aide en tous les cas.
Là je m'occupe de ma fille :wink:

Re: Creer une routine sur 52 semaines, comment faire ?

par finipe » 30 mai 2016, 09:47

// Variable de stockage des fichiers et codes secrets associés
$CODES = array(
				1 => array('nom_du_fichier_1', 'code_secret_1');
				2 => array('nom_du_fichier_2', 'code_secret_2');
				3 => array('nom_du_fichier_3', 'code_secret_3');
				...
				51 => array('nom_du_fichier_51', 'code_secret_51');
				52 => array('nom_du_fichier_52', 'code_secret_52');
			);


// URL de la page type http://www.monsite.com/page.php?code=XXXXX
if(isset($_GET['code']))
{
	// Boucle sur la variable $CODES
	for($i=1 ; $i<=52 ; $i++)
	{
		// Si le code de l'URL correspond au code de la variable, on affiche le lien
		if($CODES[$i][1] == $_GET['code'])
		{
			echo "<a href='Repertoire_source/".$CODES[$i][0]."'>".$CODES[$i][0]."</a>";

			// Et on arrête la boucle
			break;
		}
	}
}
Alors avec ça, n'importe qui ayant l'URL d'une semaine déterminée peut accéder au téléchargement, quelle que soit la semaine pendant laquelle il essaye d'accéder au fichier. Si tu veux qu'en plus on ne puisse télécharger un fichier donné que pendant la semaine donnée, il faut rajouter une condition :
// Variable de stockage des fichiers et codes secrets associés
$CODES = array(
				1 => array('nom_du_fichier_1', 'code_secret_1');
				2 => array('nom_du_fichier_2', 'code_secret_2');
				3 => array('nom_du_fichier_3', 'code_secret_3');
				...
				51 => array('nom_du_fichier_51', 'code_secret_51');
				52 => array('nom_du_fichier_52', 'code_secret_52');
			);


// URL de la page type http://www.monsite.com/page.php?code=XXXXX
if(isset($_GET['code']))
{
	// Boucle sur la variable $CODES
	for($i=1 ; $i<=52 ; $i++)
	{
		// Si le code de l'URL correspond au code de la variable,
		// ET si la semaine actuelle correspond, on affiche le lien
		if($CODES[$i][1] == $_GET['code'] && date(W) == $i)
		{
			echo "<a href='Repertoire_source/".$CODES[$i][0]."'>".$CODES[$i][0]."</a>";

			// Et on arrête la boucle
			break;
		}
	}
}
Après, une fonction supplémentaire pour générer des codes secret, c'est faisable, mais pas sans passer par une quelconque forme de stockage (base de données, fichier externe txt...). Mais si formater 52 noms de fichiers ne te fait pas peur, j'imagine qu'inventer 52 codes non plus. Par exemple, un mélange de 5 chiffres/lettres sensibles à la casse, ça te laisse déjà 62 puissance 5 possibilités, soit presque 1 milliard.

Re: Creer une routine sur 52 semaines, comment faire ?

par finipe » 30 mai 2016, 09:25

Lorsqu'on copie l'adresse dans le navigateur on a accès au fichier : ben oui, évidemment... c'est le principe. Après si tu veux forcer le téléchargement, et non l'affichage, tu peux rajouter un élément à la balise <a> :
<a href='ici_lien_de_telechargement' download='nom_sous_lequel_le_fichier_sera_téléchargé'>...</a>
Attention toutefois, cet attribut download ne fonctionne pas parfaitement selon les navigateurs (ça marche pas sur Safari par exemple). Pour forcer le téléchargement, tu peux aussi zipper tes fichiers.

Quant au problème de cliquer sur le lien de la semaine 21 deux semaines plus tard, là c'est effectivement plus problématique, je n'avais pas compris que chaque utilisateur pouvait ne pas avoir à télécharger chaque fichier de chaque semaine... Pour ce faire, il faut imaginer une sorte de "code secret" qui permet l'affichage du fichier choisi, ça change tout !

Dans ce cas là, il faudrait construire un tableau qui associe le nom du fichier de la semaine choisie avec un code secret qui permet son téléchargement. Et pour éviter de s'embêter à générer soi-même des codes, une fonction qui génère un code secret et qui vérifie que ce code n'a pas déjà été utilisé pour un des éventuels 52 autres fichiers.

Re: Creer une routine sur 52 semaines, comment faire ?

par jeanbianne » 30 mai 2016, 07:15

J'ai oublié une parenthèse : $semaine = intval(substr($_FICHIERS[$i], -6, 2));
ça y est c'est rajouté, le lien du fichier apparait.
j'ai toujours le pb au clic de l'origine du lien,
il va chercher le fichier sur http://www.monsite.com/page1/wp-content/uploads/001/ :non:
c'est en rapport au <a></a> ?

merci

EDIT:
j'ai ajouté un . avant /wp-content/uploads/001/,
même pb
puis je l'ai supprimé,
puis j'ai réessayer le clic su le lien:
eureka ça marche !!! :D :D :D

merci de cette aide précieuse, maintenant je vais essayer de décortiquer
le code et attendre la semaine prochaine pour voir si ca tourne toujours :roll: :priere:

merci beaucoup =D> =D> =D>

REEDIT:
pour éviter d'attendre 1 semaine j'ai changé l'heure de mon ordi,
c'est pas ça hein, la routine fait référence à la date du serveur de mon hébergeur ?
Je dois partir chez 1and1 (en allemagne) pour modifier son horloge et finir mon test ? :shock:

REREEDIT:
au fait, je m'emporte ...
1-Lorsque l'on copie l'adresse du lien,dans un navigateur on a accès directement au fichier:
Pas bon pour moi :non:
2-Comment modifier le code afin d'obtenir l'affichage de la semaine suivante,
il y a un Date+1 a placer qq part mais ou ?
3-Si la personne qui reçoit un mail avec le lien de la page de la semaine 21 mais qu'elle l'ouvre 2 semaines
plus tard,elle aura accès à la semaine 23.

Re: Creer une routine sur 52 semaines, comment faire ?

par finipe » 30 mai 2016, 00:42

J'ai oublié une parenthèse : $semaine = intval(substr($_FICHIERS[$i], -6, 2));

Re: Creer une routine sur 52 semaines, comment faire ?

par jeanbianne » 30 mai 2016, 00:26

ce sont des pdf fait sur word au départ...

<?php

$_FICHIERS = scandir("./wp-content/uploads/001/");
for($i=0 ; $i<sizeof($_FICHIERS) ; $i++)
{
// On récupère le numéro de semaine dans le nom du fichier
$semaine = intval(substr($_FICHIERS[$i], -6, 2);

// On compare la semaine avec la fonction date(W) qui renvoie le numéro de semaine en cours
if($semaine == date(W))
{
echo "<a href='wp-content/uploads/001/".$_FICHIERS[$i]."'>".$_FICHIERS[$i]."</a>";

// Inutile d'aller plus loin si le fichier est trouvé, on stoppe la boucle
break;
}
}

?>

ça bloque sur la ligne 7
$semaine = intval(substr($_FICHIERS[$i], -6, 2);

mess error:

Parse error: syntax error, unexpected ';' in /homepages/5/d600267790/htdocs/menudelasemaine/wp-content/plugins/php-code-for-posts/Classes/Shortcode.php(81) : eval()'d code on line 7

mon fichier test : fichier22_22.pdf

Re: Creer une routine sur 52 semaines, comment faire ?

par finipe » 30 mai 2016, 00:07

Je me suis gourée dans le code précédent, en mettant un </li> à la place du </a>. A tout hasard, ne mets pas de "./" devant le répertoire source dans le lien <a href='....'>

Pour chercher le fichier de la semaine en cours et uniquement celui-là, c'est encore plus simple finalement.
Il suffit de renommer les fichiers comme ceci :

- fichier1_01.pdf
- fichier2_02.pdf
- fichier3_03.pdf
- ...
- fichier51_51.pdf
- fichier52_52.pdf

Puis le code suivant fait l'affaire :
<?php

$_FICHIERS = scandir("./Repertoire_source");
for($i=0 ; $i<sizeof($_FICHIERS) ; $i++)
{
	// On récupère le numéro de semaine dans le nom du fichier
	$semaine = intval(substr($_FICHIERS[$i], -6, 2);

	// On compare la semaine avec la fonction date(W) qui renvoie le numéro de semaine en cours
	if($semaine == date(W))
	{
		echo "<a href='Repertoire_source/".$_FICHIERS[$i]."'>".$_FICHIERS[$i]."</a>";

		// Inutile d'aller plus loin si le fichier est trouvé, on stoppe la boucle
		break;
	}
}

?>
Dans ce cas là, ça affichera du lundi 0h00 au dimanche 23h59. Si tu veux décaler le jour, faudra bidouiller un peu et rajouter quelques lignes de code !

Attention quand même, tu auras des problèmes si tes fichiers ont des extensions de 4 lettres (je ne sais pas ce que tu proposes de télécharger).

Re: Creer une routine sur 52 semaines, comment faire ?

par jeanbianne » 29 mai 2016, 21:47

Merci finipe,
Je suis débutant, c'est le moins qu'on puisse dire
donc je n'exprime surement pas assez précisément et clairement mon besoin...
vraiment l'idéal pour moi est de travailler sans bases de données.
Nommer les fichiers à la "mano" n'est rien par rapport à un langage que je ne maitrise pas !
Je n'aurais à renommer qu'une fois par an 52 fichiers, c'est pas la mer à boire.

J'ai installéta routine,
j'ai mis le bon répertoire à la place de /Repertoire_source :

<?php

$_FICHIERS = scandir("./wp-content/uploads/001/");
for($i=0 ; $i<=sizeof($_FICHIERS) ; $i++)
{
// Définition de la date d'aujourd'hui
$aujourdhui = date("Y-m-d");

// On récupère la date dans le titre du fichier (d'abord année, puis mois, puis jour)
$date = substr($_FICHIERS[$i], -14, 4)."-".substr($_FICHIERS[$i], -9, 2)."-".substr($_FICHIERS[$i], -6, 2);

// On compare la date, et on affiche si c'est bon
if($date <= $aujourdhui) echo "<a href='./wp-content/uploads/001/".$_FICHIERS[$i]."'>".$_FICHIERS[$i]."</li>";
}

?>
Je vois bien le lien "...semaine1_2016_05_29.pdf" apparaitre sur la page, nickel !

Mais 1-Des que je clique dessus le message suivant apparait :
Oops! That page can’t be found.
It looks like nothing was found at this location. Maybe try one of the links below or a search?

2-Je tente d'enregistrer le fichier avec un clic droit,
ça le fait, mais quand je tente de lire ce fichier, le lecteur pdf trouve qu'il est illisible,
ou corrompu

EDIT: Je vois que le lien est "assujeti" à la page.
Lorsque je remplace ./wp-content/uploads/001/
par: lenomdusite.com/wp-content/uploads/001/
là ça part en cacahuète...

une idée ?

Ceci étant,
j'ai l'impression que le code permet d'afficher les fichiers aux fur et à mesure du temps qui passe,
les uns après les autres.
Mon besoin est : afficher sur la page un seul fichier , pendant pratiquement une semaine,
du vendredi 8h30 au jeudi 23h59.
suis je plus clair ? 8-|
et cela 52 fois dans l'année..voir 53 :P

merci bien

Re: Creer une routine sur 52 semaines, comment faire ?

par finipe » 29 mai 2016, 19:50

Je ne suis pas sûre d'avoir compris ta question... le petit bout de script que je t'ai fourni fait exactement ce que tu cherches à faire. Après, comme l'a dit Saian, il y a d'autres façons similaires d'utiliser ce principe.

Par exemple, sans utiliser de base de données et en nommant tes fichiers de façon à inclure la date de disponibilité :

- nom_de_fichier1_2016_05_01.pdf
- nom_de_fichier2_2016_06_01.pdf
- nom_de_fichier3_2016_07_01.pdf
- nom_de_fichier4_2016_08_01.pdf
- etc...

Tu fais un scan de ton dossier source, et tu affiches uniquement les fichiers dont la date correspond :
<?php

$_FICHIERS = scandir("./Repertoire_source");
for($i=0 ; $i<=sizeof($_FICHIERS) ; $i++)
{
	// Définition de la date d'aujourd'hui
	$aujourdhui = date("Y-m-d");

	// On récupère la date dans le titre du fichier (d'abord année, puis mois, puis jour)
	$date = substr($_FICHIERS[$i], -14, 4)."-".substr($_FICHIERS[$i], -9, 2)."-".substr($_FICHIERS[$i], -6, 2);

	// On compare la date, et on affiche si c'est bon
	if($date <= $aujourdhui) echo "<a href='Repertoire_source/".$_FICHIERS[$i]."'>".$_FICHIERS[$i]."</li>";
}

?>
Un script comme ça fait le boulot sans problème, c'est juste un peu emmerdant de nommer les fichiers à chaque fois.

Re: Creer une routine sur 52 semaines, comment faire ?

par jeanbianne » 29 mai 2016, 13:11

Eh bien par exemple, imaginons que tes noms de fichiers soient stockés dans une base de données, avec une date à partir de la laquelle ils seront disponibles en téléchargement (au format AAAA-MM-JJ). Quand l'utilisateur arrive sur la page, le code suivant pourrait fonctionner :
<?php

// Définition de la date d'aujourd'hui
$aujourdhui = date('Y-m-d');

// Récupération des fichiers disponibles au téléchargement
// (si leur date est en dessous ou égale à celle d'aujourd'hui)
$result = mysqli_query($db, "SELECT * FROM table_des_fichiers WHERE date<='".$aujourdhui."'");
while($row = mysqli_fetch_array($result))
{
          echo "<a href='Repertoire/".$row['nom_du_fichier']."'>".$row['nom_du_fichier']."</a>";
}

?>
Bon évidemment, c'est basique, faudrait quelques vérifications de sécurité pour éviter que n'importe qui télécharge n'importe quel fichier sans que ce soit autorisé, mais sur le principe ça évite un CRON.
finipe,
Pourrais tu maintenant me montrer un exemple de routine sans cron et avec les avancées de Saian ?
2 points de vue me permettront de mieux analyser vos réponses pour réussir mon projet.
merci bien :)

Re: Creer une routine sur 52 semaines, comment faire ?

par jeanbianne » 29 mai 2016, 10:15

:mrgreen:

Bon, il y a du boulot je vois...
Suite à mes lectures sur le Net et pour me faire gagner un peu (beaucoup) de temps Saian,
aurais tu un départ de routine pour le short code à coller sur le site
que je puisses étudier les fonctions et la forme de cela ?

Sous WP, j'utilise PHP CODE pour lancer les snippets.
ça suffirait pour mon besoin ?

ça va ? je connais un peu plus de mots maintenant ? :lol:

Je t'en remercie par avance

Re: Creer une routine sur 52 semaines, comment faire ?

par jeanbianne » 26 mai 2016, 15:39

"sachant que tu peux aussi intervenir sur le wordpress tous les vendredi de façon manuelle. ^^
"
Ca, effectivement c'est ce que j'ai réussi a faire ;-)
Pour les short code c'est bon aussi
Pour le reste j'analyse ta réponse (je vais voir sur le net les nouveaux mots :-)) et je reviens.
C'est vrai que si il y a une solution "magique" je suis preneur aussi :mrgreen:

Re: Creer une routine sur 52 semaines, comment faire ?

par Saian » 26 mai 2016, 15:20

A priori avec juste un script PHP tu peux le faire, sans tâche CRON et sans base de données, en partant sur un shortcode maison.
Donc il faudrait que tu apprennes qu'est ce que sont les shortcodes wordpress, comment créer ton propre shortcode et quelques bases de php, les variables, les tableaux, la fonction date, les conditions, les boucles, et un peu de html, comment faire un lien et comment mettre ça en forme (un peu de CSS) et comment forcer le téléchargement d'un fichier grâce à PHP et sa fonction header. Tu pourrais ainsi à priori faire une page avec téléchargement des fichiers "sécurisé".

Tu vas quand même bien batailler si tu n'as aucune connaissance la dedans, alors bon courage. Et peut être quelqu'un aura une solution plus simple à te proposer, sachant que tu peux aussi intervenir sur le wordpress tous les vendredi de façon manuelle. ^^

Et tu peux peut être trouver un plugin qui ferait au moins à peu près une partie du boulot, ou des tutoriels avec une recherche du type "wordpress téléchargement fichier sécurisé".

Re: Creer une routine sur 52 semaines, comment faire ?

par jeanbianne » 26 mai 2016, 15:09

Saian,
est il possible d'installer tout cela avec un minimum de connaissances ?
lequel dois je acquerir pour y parvenir ?
pas de connaissance php ni mysql
mais du courage à l'ouvrage... :D

merci

Re: Creer une routine sur 52 semaines, comment faire ?

par Saian » 26 mai 2016, 14:56

L'idée de finipe est intéressante, il y a plusieurs façons d'aborder le problème et tu peux effectivement t'affranchir de l'utilisation d'une tâche CRON.

Rejoignant l'idée de finipe, ça me donne une autre idée, tout en gardant les fichiers dans un répertoire privé (sinon un utilisateur malin pourrait deviner les noms des futurs fichiers et y accéder directement) tu pourrais définir les dates de disponibilité des fichiers (stocker ça dans un tableau PHP de 52 ou 53 entrées du type 'yyyymmdd' => 'nom_du_fichier') et le lien de téléchargement passerait par un script PHP qui d'après la date du jour de téléchargement retournerait le fichier adéquat. L'intérêt du format yyyymmdd est qu'on peut vérifier par simple comparaison numérique si une date est supérieur à une autre.

Et pour répondre sur les tâches CRON ça ne se gère pas via MySQL, la base de données n'intervient pas la dedans, soit 1and1 propose une solution pour les configurer via l'interface de gestion de ton hébergement (où tu pourrais définir le script PHP à appeler et configurer le cycle d’exécution) soit il faut se connecter au serveur en SSH et utiliser la commande crontab.