Page 1 sur 2

Traitement de formulaire

Posté : 07 déc. 2008, 16:02
par Stef
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!!

Posté : 07 déc. 2008, 18:25
par stopher
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

Posté : 08 déc. 2008, 07:41
par Stef
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
}

Posté : 08 déc. 2008, 08:49
par stopher
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 ..

Posté : 08 déc. 2008, 08:55
par Stef
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!!

Posté : 08 déc. 2008, 08:58
par stopher
Ton serveur est sous linux ou windows ?

Posté : 08 déc. 2008, 09:01
par Stef
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?

Posté : 08 déc. 2008, 09:32
par stopher
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 ...

Posté : 08 déc. 2008, 09:52
par Stef
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!).

Posté : 08 déc. 2008, 10:01
par stopher
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 ?

Posté : 08 déc. 2008, 10:07
par Stef
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);
}

Posté : 08 déc. 2008, 10:11
par stopher
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

Posté : 08 déc. 2008, 10:20
par Stef
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...

Posté : 08 déc. 2008, 10:25
par stopher
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

Posté : 08 déc. 2008, 10:41
par Stef
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"