supprimer une ou des dates

Eléphant du PHP | 153 Messages

09 oct. 2013, 09:10

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

ViPHP
xTG
ViPHP | 7331 Messages

09 oct. 2013, 10:17

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.

Eléphant du PHP | 153 Messages

09 oct. 2013, 19:55

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 ?

ViPHP
xTG
ViPHP | 7331 Messages

09 oct. 2013, 20:40

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).

Eléphant du PHP | 153 Messages

09 oct. 2013, 21:09

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 .

ViPHP
xTG
ViPHP | 7331 Messages

10 oct. 2013, 13:53

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.

Eléphant du PHP | 153 Messages

11 oct. 2013, 12:18

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/>";
}

Eléphant du PHP | 170 Messages

11 oct. 2013, 16:17

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.

Eléphant du PHP | 153 Messages

11 oct. 2013, 16:25

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 ..

Eléphant du PHP | 170 Messages

11 oct. 2013, 16:28

c'est vrai qu'il vaut mieux commencer compliqué ... :wink:

ViPHP
xTG
ViPHP | 7331 Messages

11 oct. 2013, 18:12

$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é.

Eléphant du PHP | 153 Messages

11 oct. 2013, 18:28

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 ?

Eléphant du PHP | 153 Messages

11 oct. 2013, 19:20

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);)

ViPHP
xTG
ViPHP | 7331 Messages

12 oct. 2013, 09:57

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.

Eléphant du PHP | 153 Messages

12 oct. 2013, 12:11

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é ?

.