ajout d'un caractère en debut de ligne dans un fichier txt

Eléphant du PHP | 227 Messages

30 déc. 2021, 18:27

Bonjour à tous,

Je me permets de venir vers vous, je n'arrive pas à trouver la solution tout seul.

J'ai un fichier txt qui comporte un certain nombre de ligne. Pour pouvoir modifier ce dernier, et rajouter => # <= j'appelle le fichier dans des checkbox formulaire :

Code : Tout sélectionner

<form action="" method="post"> <fieldset> <legend> Pour déactiver un module, Cocher et Valider</legend> <h2>Modules actifs</h2> <?php $val = 01; for($i = 0; $i < $ligne_cpt; $i++) { if(!preg_match("[#]", $cpt[$i])) { ?> <div class="elem"> <i class="fa-solid fa-check ivert"></i> <input type="checkbox" name="valid[]" id="" value="<?= $val++ ?>" > <label for=""><?= $cpt[$i] ?></label> </div> <div class="form-button"> <button type="submit" name="env_1">Modifier les selections</button> </div> </fieldset> </form>
Pour le control je procède ainsi :
    $path = './Fichier_test/';
    $fichier = 'exemple';
    $ext = '.conf';
    $chemin = $path . $fichier . $ext ;

 if (file_exists($chemin)) {
         $cpt = file($chemin);
         $ligne_cpt = count($cpt);         
}

if(isset($_POST['env_1'])){

    if(!empty($_POST['valid'])){
        foreach($_POST['valid'] as $valid ){
            echo "Numéro de checkbox cochée : " .$valid. "<br>" ;           
        }
        for($i = 0; $i < $ligne_cpt; $i++) {   
            if(!preg_match("[#]", $cpt[$i])) {
                $txt   = str_replace('','#', $ligne_cpt ) ;
                $result = file_put_contents($chemin ,$txt);
            }
        }
      }       
    else{
        echo "Vous n'avez rien selectionner, aucune modification a été apportée !";
    }
}
Le soucis, c'est que procéder ainsi, m'efface l'ensemble du fichier, alors que le but est tout simplement d'ajouter le caractère.
Une petite idée pour un coup de main ?

Merci

Mammouth du PHP | 2703 Messages

30 déc. 2021, 18:36

for($i = 0; $i < $ligne_cpt; $i++) {

}

pour parcourir le tableau. tester si la case à cocher correspondant à la ligne a été cochée. si oui, alors, modifier le contenu du tableau avec la nouvelle valeur de la ligne. si non, ne rien faire. après la boucle file_put_contents

Eléphant du PHP | 227 Messages

30 déc. 2021, 19:33

bonjour OR 1 et merci d'avoir répondu. J'ai modifié ainsi, mais je vois pas trop comment comparer la checkbox avec la ligne corresponde. La valeur est récupérée de la coche, mais n'inscrit pas le rajout dans le fichier
foreach($_POST['valid'] as $valid ){
            echo "Numéro de checkbox cochée : " .$valid. "<br>" ;           
        }
        for($i = 0; $i < $ligne_cpt; $i++) {   
            
            if($valid == $cpt[$i]){
            
            if(!preg_match("[#]", $cpt[$i])) {
                $txt   = str_replace('','#', $ligne_cpt ) ;
                $result = file_put_contents($chemin ,$txt);
            }
        }
        }

Eléphant du PHP | 227 Messages

31 déc. 2021, 13:07

Je me permets de revenir car j'ai toujours pas trouvé la bonne formule. Quelqu'un d'autre pour m'orienter svp ? merci