fichiers php

captain caverne
Invité n'ayant pas de compte PHPfrance

30 mai 2005, 19:11

bonjour

Débutant en php j'ai testé l'exemple de Damien:
http://www.phpfrance.com/tutoriaux/inde ... s-fichiers

Ma foi, tout irait dans le meilleur des mondes possible si 2 erreurs ne m'étaient pas retournées:
1/
Notice: Undefined index: action in c:\program files\easyphp1-8\www\nouveau dossier\9.php on line 15

:2/
Notice: Undefined offset: 1 in c:\program files\easyphp1-8\www\nouveau dossier\9.php on line 98

J'utilise easy php1.8 sous windaube XP.
A ce propos,en dehors des variables globales que j'ai mis en on,je n'ai rien "touché" et ait tout laissé tel que dicté par l'installation automatique.

Si quelqu'un peut m'expliquer...
merci

ViPHP
fab
ViPHP | 2657 Messages

30 mai 2005, 19:27

tu peux nous montrer ton code car visiblement tu l'as modifié en comettant des erreurs

captain caverne
Invité n'ayant pas de compte PHPfrance

30 mai 2005, 20:09

bonjour Fab

Je ne crois pas avoir touché au code et c'est bien là ce qui m'interpelle car en lisant les commentaires de ceux qui ont testé le code de Damien tout parait effectivement fonctionner.
Le code que j'ai mis dans mon repertoire racine est le suivant

Code : Tout sélectionner

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"> <head> <title>Exemple d'utilisation des fichiers en PHP</title> <link rel="stylesheet" type="text/css" media="all" href="exemples.css" /> </head> <body> <h1>Exemple d'utilisation des fichiers en PHP</h1> <? set_magic_quotes_runtime(0); // nom du fichier $fichier = '9_fichier.txt'; switch ($_POST['action']) { case "ecrire": // on formate nos données // voir le tutorial sur les fonctions, si besoin // Raison : ne jamais faire confiance à des données transmises par un utilisateur function formate_machaine($chaine) { // on supprime les \n et les | $chaine = str_replace('\n', '', $chaine); $chaine = str_replace('|', '', $chaine); // on supprime les tags html et php $chaine = strip_tags($chaine); // on supprime les espaces superflus au début et à la fin $chaine = trim($chaine); // on coupe la chaine a 100 caracteres $chaine = substr($chaine, 0, 100); // renvoi nouvelle valeur return $chaine; } $nom = formate_machaine($_POST['nom']); $commentaire = formate_machaine($_POST['commentaire']); if($nom != '' and $commentaire != '') { // on verifie taille du fichier // si le fichier fait plus de 3Ko on le vide if(filesize($fichier) > 3000) $mode = 'w'; else $mode = 'a'; $fp = fopen($fichier, $mode); // ouverture du fichier en écriture fputs($fp, "$nom|$commentaire"); // on écrit le nom et email dans le fichier en les séparant par | fputs($fp, "\n"); // on va a la ligne fclose($fp); echo '<p>Nom et email ajoutés !</p>'; echo '<p><a href="'.$_SERVER['PHP_SELF'].'">Retour</a></p>'; } else { echo '<p>Erreur, veuillez remplir les deux champs !</p>'; echo '<p><a href="'.$_SERVER['PHP_SELF'].'">Retour</a></p>'; } break; default: ?> <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" name="ecriture"> <input type="hidden" name="action" value="ecrire" /> <table summary="Ecriture dans le fichier"> <tr class="titre"> <td colspan="2">Ecriture dans le fichier</td> </tr> <tr> <td>Nom</td> <td> <input type="text" name="nom" size="30" maxlength="30" /> </td> </tr> <tr> <td>Petit commentaire</td> <td> <input type="text" name="commentaire" size="30" maxlength="100" /> </td> </tr> <tr> <td>&nbsp;</td> <td> <input type="submit" name="envoyer" value="Et Hop!" /> </td> </tr> </table> </form> <table summary="Lecture du fichier"> <tr class="titre"> <td colspan="2">Lecture du fichier</td> </tr> <? if(file_exists($fichier)) { $fp = fopen($fichier, 'r'); // le fichier existe, on l'ouvre while (!feof($fp)) // On parcours le fichier { $ligne = fgets($fp, 4096); // On se déplace d'une ligne $liste = explode('|', $ligne); // Champs séparés par | $nom = htmlentities($liste[0]); // Pour convertir les caractères en équivalent html $commentaire = htmlentities($liste[1]); if(get_magic_quotes_gpc()) { $nom = stripslashes($nom); // fera l'objet d'un tutorial $commentaire = stripslashes($commentaire); } if($nom != '' and $commentaire != '') { echo '<tr>'; echo '<td>' . $nom . '</td>'; echo '<td>' . $commentaire . '</td>'; echo '</tr>'; } } fclose($fp); } else{ // le fichier n'existe pas echo '<p>Fichier introuvable ! Lecture stoppée.</p>'; } ?> </table> <? break; } ?> </body> </html>
Si tu as une idée...

ViPHP
fab
ViPHP | 2657 Messages

30 mai 2005, 20:46

switch ($_POST['action'])


c'est la ou ça coince, ta variable d'url action est vide indéfini

captain caverne
Invité n'ayant pas de compte PHPfrance

30 mai 2005, 21:06

euh.....j'mets quoi pour que ça ne soit plus vide indéfinie ?

(merci d'avoir pris le temps de lire le code)

Image

Mammouth du PHP | 19672 Messages

30 mai 2005, 21:47

TU peux remplacer la ligne "switch($_POST['action'])" par les deux lignes suivantes:
$action = isset($_POST['action'])?$_POST['action']:null;
switch ($action)
Tu n'auras plus de variable indéfinie.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

captain caverne
Invité n'ayant pas de compte PHPfrance

30 mai 2005, 23:19

D'une redoutable efficacité.
Telles sont les deux lignes de code que tu m'as transmis Cyrano puisque l' undefined index est parti voir ailleurs si je ne m'y trouvais pas.

Du coup je ne resiste pas à soumettre à ta sagacité la 2ième et derniere erreur d'affichage:
Notice: Undefined offset: 1 in c:\program files\easyphp1-8\www\nouveau dossier\9.php on line 98

Souhaites-tu croiser le fer avec elle ?
Image

Plus serieusement je te remerci car en ayant la bonne solution sous les yeux je peux l'analyser et apprendre ainsi beaucoup plus vite.[/b]

Mammouth du PHP | 19672 Messages

30 mai 2005, 23:25

Notice: Undefined offset: 1 in c:\program files\easyphp1-8\www\nouveau dossier\9.php on line 98
Ça, c'est une erreur d'index de tableau à la ligne:
$commentaire = htmlentities($liste[1]);
Or en principe, cet index pointe sur le commentaire... il faudrait vérifier si ton fichier texte contient bien un commentaire après le nom et le "|" S'il est vide, l'index 1 du tableau n'est pas initialisé lors de l'explode() deux lignes plus haut.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

captain caverne
Invité n'ayant pas de compte PHPfrance

30 mai 2005, 23:43

Défi relevé avec succes!!!

En effet j'ai modifié l'inscription figurant dans le fichier texte;et c'est bien là que s'etait sournoisement dissimulé la source de l'erreur.

merci à toi Cyrano ,tu as tout résolu. :D

je te souhaites une bonne nuit.

captain caverne
Invité n'ayant pas de compte PHPfrance

31 mai 2005, 00:34

oups ! j'ai parlé trop vite ...mais ait tout de meme reussi à résoudre le probleme.

En modifiant le fichier texte l'erreur disparaissait à l'affichage mais revenait aprés validation des champs saisies.

Il faut conserver le fichier texte tel quel et modifier la ligne

Code : Tout sélectionner

$commentaire = htmlentities($liste[1]);
en initialisant la liste à 0.
Donc:

Code : Tout sélectionner

$commentaire = htmlentities($liste[0]);
Tout fonctionne alors parfaitement.

(b]résolu.[/b]