Page 1 sur 2

supprimer une ou des dates

Posté : 09 oct. 2013, 09:10
par Jefekoi
Bonjour,

Voilà pas mal de temps que je fais de la "retouche" php je connais pas mal de chose mais j'ai mes limites quand même.

Pour la première fois depuis une dizaine d'années je viens chercher de l'aide. oui il y a bien souvent le net pour trouver les solutions, mais là impossible de trouver.

Alors voilà dans mon fichier texte j'ai ceci :

05-10-2013, Événement 1
08-10-2013, Événement 2
08-10-2013, Jardin éphémère
12-10-2013, Folie'Flore
12-10-2013, FLASHMOB BOKWA
13-10-2013, Folie'Flore
25-12-2013, Marché de Noël
25-12-2013, Manège de Noël

etc....

Je voudrais supprimer les dates inférieur à celle d'aujourd'hui (pour l'exemple avant le 08-10-2013)
J'ai tout essayé et ça ne marche pas.

Pour charger le fichier dans mon php je fais ceci :
$verifieDate = implode('', file('date1.txt'));
$MemoDate=explode("\n", $verifieDate);
asort($MemoDate);
foreach ($MemoDate as $key => $val) {
$val= str_replace(',', ':', $val);

Je ne sais pas si c'est la bonne méthode mais elle fonctionne

Pourriez vous m'aider ?

Bonne journée

Eric

Re: supprimer une ou des dates

Posté : 09 oct. 2013, 10:17
par xTG
Je ne vois pas l'intérêt du implode/explode, le file à lui tout seul te renvoie un index par ligne de ton fichier. :)

Dans ton foreach il te faut un explode sur la virgule (ou autre méthode) pour accéder à la date.
Ensuite tu testes la date par rapport à la date courante. => http://fr2.php.net/manual/fr/datetime.diff.php
Il te faut un second array, si la date est correcte tu y insères la ligne, sinon tu ne fais rien.
Puis avec ton nouvel array tu te contentes de l'écrire dans ton fichier en écrasant tout le contenu.
Tu as ainsi un fichier à jour.

Re: supprimer une ou des dates

Posté : 09 oct. 2013, 19:55
par Jefekoi
Merci xTG

Je craque ... je viens d'essayer (3h00 dessus)

Et je n'arrive pas à trouver malgré ton aide.

Faut dire que c'est la première fois que j'utilise ARRAY et j'ai appris pas mal de chose bien :)

Peux tu m'aider à avancer s'il te plait ?

Re: supprimer une ou des dates

Posté : 09 oct. 2013, 20:40
par xTG
Montres nous déjà ce que tu as tenté de faire, ce sera plus didactique que de te fournir une solution toute faite (chose que je n'apprécie pas en plus).

Re: supprimer une ou des dates

Posté : 09 oct. 2013, 21:09
par Jefekoi
Non un peu pris par le temps je suis passé à un autre système ... je reviendrais sur ton principe dés que possible.

Alors voici ce que j'ai fais :

Créé un fichier avec :
$D[1]="05-10-2013"; $E[1]="EvEnement 1";
$D[2]="08-10-2013"; $E[2]="EvEnement 2";
$D[3]="09-10-2013"; $E[3]="Neuf";
$D[4]="12-10-2013"; $E[4]="Folie Flore";
$D[5]="12-10-2013"; $E[5]="FLASHMOB BOKWA";
$D[6]="13-10-2013"; $E[6]="Folie Flore";
$D[7]="25-12-2013"; $E[7]="MarchE De Noel";
$D[8]="25-12-2013"; $E[8]="Manege De Noel";

Dans mon programme :
require "monfichier";
for($i=1;$i<=31;$i++){
if ($D[$i]=="") break;
if(strtotime($D[$i]) >= strtotime(date("d-m-Y"))) echo $D[$i]." : ".$E[$i]."<br/>";
}

Il est sur que pour le moment ça dépanne mais par la suite va falloir trouver autre chose si non mon fichier va se charger de date inutilement

Merci à toi je reviendrais plus tard .

Re: supprimer une ou des dates

Posté : 10 oct. 2013, 13:53
par xTG
Cela me semble une belle usine à gaz vu comme cela. :)
D'autant plus qu'inclure un fichier modifié à la volée est source d'injection de code.

Re: supprimer une ou des dates

Posté : 11 oct. 2013, 12:18
par Jefekoi
Voilà j'ai finalement fait comme ceci , dis moi ce que tu en penses :
$fichier="monfichier";
$date=array();
$even=array();
$fp=fopen($fichier,'r');
while (!feof($fp)) {
$position=explode(",",fgets($fp,255));
array_push($date,$position[0]);
array_push($even,$position[1]);
array_multisort($date, $even);
}
fclose($fp);
for($tour=0;$tour<=$i;$tour++){
echo $date[$tour]." - ".$even[$tour]."<br/>";
}

Re: supprimer une ou des dates

Posté : 11 oct. 2013, 16:17
par blof
Bonjour,

et enregistrer tes données dans une table MySQL ?

Supprimer des enregistrements en posant des conditions ou ajouter des enregistrements devient très facile.

Re: supprimer une ou des dates

Posté : 11 oct. 2013, 16:25
par Jefekoi
Oui Blof tu as surement raison, mais j'aimerais, commencer par cette manière et pourquoi ne pas la faire dans une BD la prochaine fois ..

Re: supprimer une ou des dates

Posté : 11 oct. 2013, 16:28
par blof
c'est vrai qu'il vaut mieux commencer compliqué ... :wink:

Re: supprimer une ou des dates

Posté : 11 oct. 2013, 18:12
par xTG
$fichier="monfichier";
$date=array();
$even=array();
$fp=fopen($fichier,'r');
while (!feof($fp)) {
$position=explode(",",fgets($fp,255));
array_push($date,$position[0]);
array_push($even,$position[1]);
}
array_multisort($date, $even);
fclose($fp);
for($tour=0;$tour<=$i;$tour++){
echo $date[$tour]." - ".$even[$tour]."<br/>";
}
Ne faire le tri qu'à la fin c'est mieux. :P
Ensuite saches que si tu n'es pas sûr de ta taille de ligne tu peux omettre le paramètre length de fgets.
Car si tu as une ligne de 500caractères tu ne vas en récupérer que la moitié.

Re: supprimer une ou des dates

Posté : 11 oct. 2013, 18:28
par Jefekoi
Merci xTG,

J'ai quand même un souci avec le classement.

Monfichier :
05-12-2013,flash
12-10-2013,Folie Flore
05-10-2013,FLASHMOB BOKWA
13-10-2013,Folie Flore
25-12-2013,Marche de Noel
07-11-2013,Mon reve
25-12-2013,Manege de Noel
02-12-2013,ma fete3
Le resultat :
02-12-2013 - ma fete3
05-10-2013 - FLASHMOB BOKWA
05-12-2013 - flash
07-11-2013 - Mon reve
12-10-2013 - Folie Flore
13-10-2013 - Folie Flore
25-12-2013 - Manege de Noel
25-12-2013 - Marche de Noel
Comme tu peux voir il m'affiche en premier le 02-12-2013 .... est-ce le zéro qui vient embêter son monde ?

Re: supprimer une ou des dates

Posté : 11 oct. 2013, 19:20
par Jefekoi
J'ai bien peur de ne pas trouver de solution à mon problème

Pour le numérique (date) il existe cette function "natsort" : http://php.net/manual/en/function.natsort.php

Mais comment associer le numérique avec mes titres ? (array_multisort($date, $even);)

Re: supprimer une ou des dates

Posté : 12 oct. 2013, 09:57
par xTG
Tu peux transformer la date en un chiffre : AAAAMMJJ
Ainsi il est parfaitement possible de les trier numériquement ou alphanumériquement.
$fichier="monfichier";
$date=array();
$even=array();
$fp=fopen($fichier,'r');
while (!feof($fp)) {
$position=explode(",",fgets($fp,255));
$dateToPush = $position[0][6].$position[0][7].$position[0][8].$position[0][9].$position[0][3].$position[0][4].$position[0][0].$position[0][1];
array_push($date,$dateToPush);
array_push($even,$position[1]);
}
array_multisort($date, $even);
fclose($fp);
for($tour=0;$tour<=$i;$tour++){
echo $date[$tour]." - ".$even[$tour]."<br/>";
}
Tu peux effectuer l'opération inverse lorsque ces dates devront être affichées.

Re: supprimer une ou des dates

Posté : 12 oct. 2013, 12:11
par Jefekoi
Merci beaucoup xTG =D>

Alors pour afficher la date (pas sans peine) j'ai fais comme cela (dans ma boucle For):
$reposition=explode("\n",$date[$tour]);
$redate = $reposition[0][6].$reposition[0][7]."-".$reposition[0][4].$reposition[0][5]."-".$reposition[0][0].$reposition[0][1].$reposition[0][2].$reposition[0][3];
echo $redate." - ".$even[$tour]."<br/>";
Dis moi ce que tu en penses .

Merci pour ton aide .. tu dois surement être dans la programmation professionnellement parlant ?

PS: tu as été voir tes messages privé ?

.