Problème d' $id

lesylvanien
Invité n'ayant pas de compte PHPfrance

05 sept. 2007, 12:46

Bonjour,

Voilà j'ai essayé de créer un petit script permettant de créer des fichiers textes qui me servent de base de donnée.
Pour ma base de donnée, je dois créer les fichiers selon ce type
$id+$nomfichier+.txt

la variable $nomfichier est fournie par une formulaire sur une page précédente.
Pour la variable $id, c'est là qu'est mon problème ...
en effet je me suis dit que pour avoir une $id différente à chaque fichier mais dans l'ordre (du type fichier 1 avec id=1, fichier 2 avec id=2, etc...), il fallait mettre une fonction qui compte le nombre de fichier dans le dossier et qui rajoute 1 à ce nombre ce qui donne l'$id (voir mon script après)

Mais voilà le problème ; si je crée 3 fichiers nommés
1+fichier1+ ; 2+fichier2+ : 3+fichier3+ et que j'efface le fichier 1+fichier1+, il me reste ainsi 2+fichier2+ et 3+fichier3+ ... et si je veut recrée un nouveau fichier, c'est là qu'apparait le problème puisqu'il va avoir aussi l'$id=3 puisqu' $id=nombre de fichier plus 1.

A votre avis, comment faire pour que même si j'efface le fichier1, le quatrième fichier que je crée porte l'id=4 et le cinquième fichier crée l'id=5 et ainsi de suite ?

merci beaucoup d'avance pour vos réponses que j'essayerai de comprendre car je débute et n'y connait pas grand chose !

Voilà mon script :
<?php
 $files = glob("data/*");
$compteur = count($files);
$id = $compteur + 1;


$nom_fichier = "./data/$id+$nomfichier+.txt";
$fichier_ouvert= @fopen($nom_fichier, "a+");
// parcours le fichier ligne par ligne et le stock dans le buffer
if ($fichier_ouvert) {
while (!feof($fichier_ouvert)) {
$buffer += fgets($fichier_ouvert, 4096);
}
// stock le resultat dans $enreg (je suppose fichier de sorti)
fputs($fichier_ouvert,$enreg. "\n");
fclose($fichier_ouvert);
}
header('Location: index.php');
?>

Eléphanteau du PHP | 48 Messages

05 sept. 2007, 12:54

il ne faut pas te baser sur le nombre de fichier mais sur le premier caractère qui est un chiffre.

tu les listes.

tu les mets dans un tableau et tu le tri du plus grand au plus petit

Tu prends ton plus grand qui est dans $tableau[0] et tu lui rajoutes +1

tu vois le cheminement ?
La théorie, c'est quand on sait tout et que rien ne fonctionne.
La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.
Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !
A.Einstein

lesylvanien
Invité n'ayant pas de compte PHPfrance

05 sept. 2007, 13:05

merci beaucoup pour ta réponse.

Oui je vois ce que tu veux dire mais je ne sais pas du tout comment faire !!! Quelless fonctions faut-il utiliser pour faire ce que tu dis ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

05 sept. 2007, 13:58

opendir() et readdir() pour ouvrir et parcourir un dossier.
substr() pour récupérer une partie d'une chaine.

Bien que, je te recommande toutefois de ne pas te limiter au premier caractère, car si ton id est égal à 10 tu ne récupéreras que le 1. Par ailleurs, le nom du fichier pouvant commencer par un nombre, je te suggère de bien délimiter les deux avec un séparateur un format du genre " id_nomDuFichier.ext "

Tu peux ainsi également utiliser explode() ou une expression régulière pour récupérer ce qui se trouve avant le '_'
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

lesylvanien
Invité n'ayant pas de compte PHPfrance

05 sept. 2007, 16:43

merci !

J'ai commencé à essayé de le travailler mais je n'y arrive pas ...
est-ce que quelqu'un pourrait me corriger mon code ?
<?php


$dir = "data";
if (is_dir($dir)) {  
  if ($dh = opendir($dir)) {    
    while (($file = readdir($dh)) !== false) {
            echo $file;        }      

$file = "id+senfou+";
list($id, $senfou, $senfou2) = explode("+", $file);
echo $id; 

  closedir($dh);    }}

       
$nom_fichier = "./data/$id+$nomfichier+.txt";
$fichier_ouvert= @fopen($nom_fichier, "a+");
// parcours le fichier ligne par ligne et le stock dans le buffer
if ($fichier_ouvert) {
while (!feof($fichier_ouvert)) {
$buffer += fgets($fichier_ouvert, 4096);
}
// stock le resultat dans $enreg (je suppose fichier de sorti)
fputs($fichier_ouvert,$enreg. "\n");
fclose($fichier_ouvert);
}
header('Location: index.php');
?>
merci d'avance ![/php]