Fonction effaçer

Eléphanteau du PHP | 12 Messages

01 avr. 2010, 18:04

Bonjour, je viens de créer une fonction effacer qui me permet d'effacer une ligne voulu passer en paramètre, ma fonction fais exactement ce pourquoi elle est programmé, néanmoins j'ai des notices(499) de ce type :

Notice: Undefined offset: 484 in ***\ajout.php on line 54

Voila ma fonction :
function Effacer($fichier, $nb, $option)      
{
    if (file_exists("$fichier"))            //si le fichier existe
    {
        if($id = fopen("$fichier", "r+"))      //ouverture du fichier pour lecture et ecriture
        {
            --$nb;                        //spécifier la ligne à effacer
            while(!feof($id))               //tant qu'on est pas à la fin du fichier
            {
                $ligne[]= fgets($id,1000000);    //mettre toute la ligne à effacer dans un tableau
            }
            rewind($id);                  //placer le pointeur du fichier au début               
            for($i=0; $i<$nb; ++$i)
            { 
                $partie.=$ligne[$i];
            }
            if($option==0)
            {
                $partie.=$retour;
            }
            for($i=$nb+1; $i>$nb, $i<500; ++$i)
            { 
                $partie.=$ligne[$i];
            }
            fclose($id);
            $id = fopen("$fichier", "w+");
            fputs($id, $partie);
            fclose($id);
            //return ok;
        }
        else
        {
            return $probleme_au_niveau_du_fichier;
        }
    }
    else
    {
        return $fichier_inexistant;
    }
}
Si quelqu'un à une idée ! Merci d'avance

PS : la ligne 54 Correspond à cette ligne : (flèche)
for($i=$nb+1; $i>$nb, $i<500; ++$i)
            { 
             ==> $partie.=$ligne[$i]; <===
            }

ViPHP
AB
ViPHP | 5818 Messages

01 avr. 2010, 18:39

$i doit passer à 484 et $ligne[484] ne correspond à rien

Eléphanteau du PHP | 12 Messages

01 avr. 2010, 22:19

$i doit passer à 484 et $ligne[484] ne correspond à rien

Hmmm oui probablement étant donné que sa parcourt mon fichier jusqu'à la fin est que le fichier ne comporte pas 500 ligne,
le 500 du a la boucle :
==> for($i=$nb+1; $i>$nb, $i<500; ++$i) <==
            { 
		$partie.=$ligne[$i];			
            }
Il faudrait que la boucle s'arrête a la fin du fichier en faite ? :/

ViPHP
ViPHP | 5462 Messages

01 avr. 2010, 23:20

pourquoi mettre toute les ligne dans un tableau ? ca existe deja avec la fonction file, comme c'est un tableau suffis de faire un unset pour supprimer la ligne, et au lieu de reparcourir le fichier pour le creer faut utilisé implode, ensuite un file_put_contents fera l'affaire.

ce qui reviens a 3 lignes (sans la gestion d'erreur biensur)
    function file_delete_line($file, $line)
    {
        $data = file($file);
        unset($data[$line - 1]);
        file_put_contents($file, implode(null, $data));
    }

Eléphanteau du PHP | 12 Messages

01 avr. 2010, 23:54

pourquoi mettre toute les ligne dans un tableau ? ca existe deja avec la fonction file, comme c'est un tableau suffis de faire un unset pour supprimer la ligne, et au lieu de reparcourir le fichier pour le creer faut utilisé implode, ensuite un file_put_contents fera l'affaire.

ce qui reviens a 3 lignes (sans la gestion d'erreur biensur)
    function file_delete_line($file, $line)
    {
        $data = file($file);
        unset($data[$line - 1]);
        file_put_contents($file, implode(null, $data));
    }
Powa, vraiment merci, je n'y avais même pas pensé ! tu me sauve une partie de ma nuit hihi !! c'est encore mieux que ce que je penser faire et 30 lignes en moins !

Encore merci !

ViPHP
ViPHP | 5462 Messages

01 avr. 2010, 23:59

pour ouvrir un fichier t'as aussi file_get_contents, qui est assez pratique :wink: