Page 1 sur 1
fichiers php
Posté : 30 mai 2005, 19:11
par captain caverne
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
Posté : 30 mai 2005, 19:27
par fab
tu peux nous montrer ton code car visiblement tu l'as modifié en comettant des erreurs
Posté : 30 mai 2005, 20:09
par captain caverne
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> </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...
Posté : 30 mai 2005, 20:46
par fab
switch ($_POST['action'])
c'est la ou ça coince, ta variable d'url action est vide indéfini
Posté : 30 mai 2005, 21:06
par captain caverne
euh.....j'mets quoi pour que ça ne soit plus vide indéfinie ?
(merci d'avoir pris le temps de lire le code)

Posté : 30 mai 2005, 21:47
par Cyrano
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.
Posté : 30 mai 2005, 23:19
par captain caverne
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 ?
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]
Posté : 30 mai 2005, 23:25
par Cyrano
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.
Posté : 30 mai 2005, 23:43
par captain caverne
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.
je te souhaites une bonne nuit.
Posté : 31 mai 2005, 00:34
par captain caverne
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
en initialisant la liste à 0.
Donc:
Tout fonctionne alors parfaitement.
(b]résolu.[/b]