supression d'une ligne via str_replace

Eléphant du PHP | 106 Messages

02 nov. 2006, 17:37

Je comprend pa vraiment ce que tu veut dire. Je veur remplacer dans le fichier : include_block_suprimer.php la ligne :
<option value='1'>1</option>
Mais dans mon str_replace je ne peut mettre le 1 car il est variable. Donc je transmet la variable $blocksupr du fichier bkock_suprimer_1.php au fichier : block_suprimer_2.php. Par logique la valeur de $blocksupr est "1" car c'est la value du champ hidden de la page block_suprimer_1.php.

Donc quand je tape l'instruction :
str_replace("<option value='$blocksupr'>$blocksupr</option>","","include_block_suprimer.php"); 
Le $blocksupr devrai prendre la valeur 1 et donc la ligne devrai etre remplcaer par "". Mais ce n'est pas le cas et je ne comprend pas pourquoi. j'ai du faire une erreur ou un oubli quelque part mais je ne sait pas ou.

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

02 nov. 2006, 18:12

bon, très bien, je reprends pour ceux qui dormaient dans le fond : str_replace() fonctionne avec des chaines de caractères :)

Pas des fichiers, pas des flux, de carottes ou de cabannes au fond du jardin, mais juste avec des chaines de caractères. L'instruction que tu lui demande d'exécuter consiste à regarder dans la chaine de caractère "include_block_suprimer.php" (pas dans le fichier, le flux, les carottes, ... mais dans cette chaine texte de 26 caractères) si toutefois il trouve la chaine "<option value='$blocksupr'>$blocksupr</option>". Et si jamais par un grand hasard il la trouvait, il serait prié de la remplacer par une chaine vide ""...
Et à l'oeil nu, je peux déjà te dire qu'il la trouvera pas ;)

Si tu veux modifier le contenu d'un fichier (pour ajouter, supprimer, modifier une ou plusieurs ligne), il te faut regarder dans la doc du côté des "Système de fichiers" en portant une attention particulièrement soutenue à fopen(), fread() et fwrite() :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 106 Messages

02 nov. 2006, 18:22

A merci beaucoup je n'avais pas compris. Mais je ne voit pas comment je dois faire avec fopen , fwrite, ou fread.

A la limite je pourrait recuperer la lign que je veut suprimer mais ensuite je ne pouirrait que la reecrire en suplement de la premiere. Tu n'aurais pas truc vite fait a me proposer??

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

02 nov. 2006, 18:31

bon bah vite fait :
- lire le fichier jusqu'à la ligne à supprimer
- lire le fichier après la ligne à supprimer
- ré-écrire le fichier sans la ligne à supprimer

Edit :
voire, vite fait aussi :
- lire tout le fichier et le mettre dans une chaine de caractère
- utiliser str_replace pour supprimer la chaine recherchée
- ré-écrire le fichier sans la ligne à supprimer
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 106 Messages

02 nov. 2006, 18:41

merci beaucoup!!

Eléphant du PHP | 106 Messages

03 nov. 2006, 11:24

Voila ce que j'ai fait :
<?
$blocksupr = $_POST['blocksupr'];
unlink("block/block_$blocksupr.php");
unlink("block/var/block_$blocksupr.php");
$sup = fopen("include_block_suprimer.php","a+");

$contenu = file("include_block_suprimer.php");
ftruncate($sup,'0');
str_replace("<option value='$blocksupr'>$blocksupr</option>","","$contenu");
fwrite($sup,$contenu);
fclose($sup);
$sup = fopen("include_block_modifier.php","a+");
$contenu = file("include_block_suprimer.php");
ftruncate($sup,'0');
str_replace("<option value='$blocksupr'>$blocksupr</option>","","$contenu");
fwrite($sup,$contenu);
fclose($sup);
?>
Et mon message d'erreur est :
Notice: Array to string conversion in d:\program files\easyphp1-8\www\gestion de site\block_suprimer_2.php on line 10

Notice: Array to string conversion in d:\program files\easyphp1-8\www\gestion de site\block_suprimer_2.php on line 16
Mais par contre ce que je cherche a suprimer est suprimer!!

Mais pourquoi ce probleme??

Eléphant du PHP | 106 Messages

03 nov. 2006, 19:18

S'il vous plait aidez-moi.

ViPHP
ViPHP | 2144 Messages

03 nov. 2006, 20:12

Array to string conversion : Tu passes un tableau en paramêtre, au lieu d'une chaine de caractère (String)

Regardes un peu la doc sur la fonction file() que tu utilises pour récupérer $contenu (qui en passant n'a pas besoin d'être en quote)

ps: on t'a dit que c'était inutile de poster des "up", "aidez-moi" et autres SOS, pense à lire les règle du forum, surtout avant d'aller modérer les messages des autres membres (Ce que les modérateurs font très bien d'ailleurs)

cuak.
Invité n'ayant pas de compte PHPfrance

03 nov. 2006, 21:45

Bien reçu. Mais que dois-je faire pour recuperer le contenu du fichier. On ma conseiller file_gets_content() mais j'ai lu que c'etait pareil que file(). Alors que dois-je essayer??

ViPHP
ViPHP | 2144 Messages

03 nov. 2006, 22:14

Lis la doc sur les deux fonctions, tu verras les différences:
file_get_contents()
file()

Eléphant du PHP | 106 Messages

04 nov. 2006, 11:55

Voila ce que cela donne :
<?
$blocksupr = $_POST['blocksupr'];
unlink("block/block_$blocksupr.php");
unlink("block/var/block_$blocksupr.php");


$contenu = file_get_contents('include_block_suprimer.php');
str_replace("<option value='$blocksupr'>$blocksupr</option>","","$contenu");
file_put_contents('include_block_suprimer.php','$contenu');

$contenu = file_get_contents('include_block_modifier.php');
str_replace("<option value='$blocksupr'>$blocksupr</option>","","$contenu");
file_put_contents('include_block_modifier.php','$contenu');
?>
et toujour une erreur :
Fatal error: Call to undefined function: file_put_contents() in d:\program files\easyphp1-8\www\gestion de site\block_suprimer_2.php on line 9
Please pouvez-vous me donner la solution?? :( :(

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

04 nov. 2006, 20:29

Comme ton serveur php, je ne connaissait pas la fonction file_put_contents(). J'ai donc jeté un coup d'oeil à la doc pour voir comment elle fonctionne et l'on découvre dès la deuxième ligne que cette fonction n'existe que depuis et pour PHP 5.

Version dans laquelle tu te trouves naturellement puisque tu as du comme moi lire la documentation et n'a pas été surpris par cette remarque qui aurait pu merveilleusement expliquer ce message d'erreur... :P

Il ne reste donc plus qu'à signaler ce bug au support, ou peut être trouver une autre solution adaptée à ta version de php ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 106 Messages

05 nov. 2006, 13:30

Très irronique tes reflexion. Je suis sous easyphp que j'ai installe ril y a moin d'un moi d'onc je pense avoir la version 5 non??

Sinon ca serait gentil de me proposer une solution ou meme de me montrer un exemple si possible..

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

05 nov. 2006, 17:00

C'était effectivement ironique, mais j'avais dans l'idée que grace à ça tu irais plus souvent jeter un coup d'oeil aux documentations ... et histoire d'en remettre une couche, dans la doc de easyphp (le dernier étant la 1.8 ), il est écrit
- Apahe 1.3.33
- PHP 4.3.10
- MySQL 4.1.9
- phpMyAdmin 2.6.1
.. tu as aussi la fonction phpinfo() pour savoir rapidement ce qui est configuré sur ton serveur ;)

Quand à l'écriture d'un fichier le fwrite() comme le file() fonctionnent... suffit juste de leur passer les bons arguments au bon format :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 106 Messages

06 nov. 2006, 13:21

D'accord. Mais je ne comprend plus enfin je suis pommé. Mon probleme que j'ai mis quelque message plus haut pourrais-tu me le resoudre en me donant la solution??

Ce serait vraiment sympas de ta part.