Traitement de formulaire

Eléphant du PHP | 447 Messages

07 déc. 2008, 16:02

Bonjour tout l'monde! :)

je suis en train de plancher depuis un moment sur ce problème et je ne trouve pas la solution:

j'ai un formulaire qui sert à éditer des fichiers html dans un répertoire ($edit est le nom du fichier que je récupère dans la liste des fichiers existants et à éditer)


edit_prod.php

Code : Tout sélectionner

$edit = $_POST['file']; if (!isset($_POST['form'])) { echo "<form action=\"edit_prod.php\" method=\"POST\"> Nom de la fiche : <input type=\"text\" name=\"filename\" value=\"$edit\" disabled> <br /> <br /> Contenu : <br /> <textarea id=\"elm1\" cols=\"90\" rows=\"4\" name=\"contenu\">"; readfile ($edit); echo" </textarea> <br /> <br /> <input type=\"submit\" value=\"Envoyer\">"; } else { $fichier = fopen($_POST['filename'],"w"); if (fwrite($fichier,$_POST['contenu'])) { echo "<b>Le fichier à été modifié avec succès!</b> <br /> <a href=\"gen.php\">Retourner à la page précédente</a>"; } else { echo "Impossible de modifier le fichier"; } fclose($fichier); }
En le testant j'ai cette réponse:
Warning: fwrite(): supplied argument is not a valid stream resource in C:\wamp\www\CURRENTS\vtt\admin\produits\edit_prod.php on line 77
Impossible de modifier le fichier
Warning: fclose(): supplied argument is not a valid stream resource in C:\wamp\www\CURRENTS\vtt\admin\produits\edit_prod.php on line 83
Qu'est-ce qui n'est pas bon dans mon code? Merci beaucoup à vous pour vos lumières!!
Probably (only a) Human Problem?

ViPHP
ViPHP | 1136 Messages

07 déc. 2008, 18:25

Salut ,

tu devrais tester ta ressource avant de l'exploiter ..
if( fopen( ... )  ){
.. la suite de ton code
}
Ensuite , à première vue , ton fichier n'est pas accessible en écriture ..
Tu peux le tester avec cette fonction is_writable

Eléphant du PHP | 447 Messages

08 déc. 2008, 07:41

Hi stopher!

oui effectivement, après avoir testé avec ceci:
if (is_writable($fichier)) {
    echo 'Le fichier est accessible en écriture.';
} else {
    echo 'Le fichier n\'est pas accessible en écriture !';
}
j'obtiens la réponse que tu proposais: non accessible en écriture...

Alors là je cale, je ne sais pas par quel bout prendre le problème, donc question d'ignare: comment on fait siouplait? :D

Par ailleurs tu dis "tu devrais tester ta ressource avant de l'exploiter .. "

ok j'veux bien, mais je dois tester quoi? (en gros je ne sais pas comment compléter le code que tu me donnes):
if( fopen( ... )  ){
.. la suite de ton code
}
Probably (only a) Human Problem?

ViPHP
ViPHP | 1136 Messages

08 déc. 2008, 08:49

Si ton fichier n'est pas accessible en modification , celà signifie simplement que tu l'utilisateur de ton serveur web ( par defaut sous linux www-data ) n'as pas de droit suffisant pour le modifier ..

Tu peux donc changer soit les droits ( avec chmod ) soit le propriétaire ( avec chown )

Bien entendu , ces commandes doivent ici être utilisé directement à partir d'un shell , en effet si www-data n'a pas les droits pour écrire sur le fichier , il ne pourra pas non plus modifier les droits et encore moins le propriétaire

Ensuite , pour ce qui est de tester ta ressource , je parle ce celà :
else {
    if($fichier = fopen($_POST['filename'],"w")){
           if (fwrite($fichier,$_POST['contenu'])) {
                 echo "<b>Le fichier à été modifié avec succès!</b>
                          <br />
                          <a href=\"gen.php\">Retourner à la page précédente</a>";
           }
           else {
                 echo "Impossible de modifier le fichier";
           }
           fclose($fichier); 
     }
}
Apres relecture , celà ne change pas grand chose à ton code ... mais bon ..

Eléphant du PHP | 447 Messages

08 déc. 2008, 08:55

Bon... ben me voilà bien désemparé! :shock: je n'ai aucune idée de comment faire ces manips: chmod et chown... je ne pourrais pas plutôt donner les droits en écriture lorsque le fichier est initialement créer (dans un autre formulaire) afin de pouvoir l'éditer par la suite sans avoir ce problème?

En tous cas un grand merci à toi stopher!!
Modifié en dernier par Stef le 08 déc. 2008, 08:59, modifié 1 fois.
Probably (only a) Human Problem?

ViPHP
ViPHP | 1136 Messages

08 déc. 2008, 08:58

Ton serveur est sous linux ou windows ?

Eléphant du PHP | 447 Messages

08 déc. 2008, 09:01

sous windows... et je l'ai pas encore testé sur le serveur de l'hébergeur, pour l'instant je suis en local (j'espère ne pas avoir trop de difficulté une fois mis en ligne).

j'ai essayer d'utiliser linux pour php, mais j'ai trop galéré, je suis donc retourné sous windows...

j'ai édité mon précédent post pour ajouter cette question, je ne sais ni si elle judicieuse ni si elle est pertinente:

je n'ai aucune idée de comment faire ces manips: chmod et chown... je ne pourrais pas plutôt donner les droits en écriture lorsque le fichier est initialement créer (dans un autre formulaire) afin de pouvoir l'éditer par la suite sans avoir ce problème?
Probably (only a) Human Problem?

ViPHP
ViPHP | 1136 Messages

08 déc. 2008, 09:32

Effectivement ,

Sous windows ces commandes ne sont pas les mêmes ...
Donnes leurs tous les droits pour tester ton code , ensuite , tu affineras ...

Mais ces fichiers, ce sont des fichiers que tu as copié coller dans le répertoire de ton serveur ...

Car normalement, si c'est ton script PHP qui crée ces fichiers , tu ne devrais avoir aucun mal à les modifier par la suite ...

Eléphant du PHP | 447 Messages

08 déc. 2008, 09:52

non non, ils sont pas copier coller, mais créer à partir d'un autre formulaire... l'admin doit donc pouvoir les éditer au besoin (c'est des potes à moi qui montent une boite de ballades en vtt et je leur fais leur site; je leur ai créer une admin avec un formulaire pour qu'ils puissent créer leurs fiches (de ballades (produits)) en ligne... lesquelles fiches seront listées sur une page du site pour être consultées par les visitors, il faut donc qu'ils puissent les modifier si nécessaire!).
Modifié en dernier par Stef le 08 déc. 2008, 10:05, modifié 1 fois.
Probably (only a) Human Problem?

ViPHP
ViPHP | 1136 Messages

08 déc. 2008, 10:01

Dans ce cas , si ton fichier a entiérement été créé par ton script ,

quels sont les droits qui lui sont attribué ? et , à qui appartient il ?

Eléphant du PHP | 447 Messages

08 déc. 2008, 10:07

arf c'est ce que j'aimerais savoir... comme je t'ai dit je ne sais pas du tout manipuler ces choses

voilà le script de création des fichiers html:

gen.php
echo '<h3>Créer une nouvelle fiche produit</h3>';
//Si la formulaire n'est pas envoyé, on l'affiche
if (!isset($_POST['form'])) {
echo "<form action=\"gen.php\" method=\"POST\">
Nom de la fiche : <input type=\"text\" name=\"filename\" value=\"exemple.html\"> <br>
Contenu :<br><textarea id=\"elm1\" cols=\"90\" rows=\"4\" name=\"contenu\">
</textarea><br><br>
<input type=\"hidden\" name=\"form\" value=\"1\">
<input type=\"submit\" value=\"Envoyer\">";
} else {
// Création du fichier
$fichier = fopen($_POST['filename'],"w");
// Vérification de l'écriture
if (fwrite($fichier,$_POST['contenu'])) {
echo "<b>Le fichier à été créé avec succès!</b> <br /><a href=\"gen.php\">Retourner à la page précédente</a>";
} else {
// Erreur
echo "Impossible de créer le fichier";
}
fclose($fichier);
}
Modifié en dernier par Stef le 08 déc. 2008, 10:13, modifié 1 fois.
Probably (only a) Human Problem?

ViPHP
ViPHP | 1136 Messages

08 déc. 2008, 10:11

Click droit > propriétés > Sécurité

Et tu dois avoir une liste les droits pour chauque utilisateur/groupe dans les case à cocher en dessous

Eléphant du PHP | 447 Messages

08 déc. 2008, 10:20

ok, j'ai regardé: en tant qu'utilisateur je n'ai pas droits d'écriture et de modification, en tant qu'admin j'ai tous les droits...
Probably (only a) Human Problem?

ViPHP
ViPHP | 1136 Messages

08 déc. 2008, 10:25

Certainement que les fichiers cree dans ce répertoire héritent des droit du répertoire parent ...

Essayes donc soit de modifier les droits du répertoire parent et recreer un fichier via tes scripts php ...

Soit désactiver cet héritage ( dans les propriétés du dossier ) et encore une fois recréer un nouveau fichier via tes scripts pour tester que celà fonctionne

Eléphant du PHP | 447 Messages

08 déc. 2008, 10:41

bon, j'ai essayé ce que tu as dit: modifier les droits et créé un nouveau fichier; et j'ai toujours la même réponse:

"supplied argument is not a valid stream resource"
Probably (only a) Human Problem?