Ecrire dans un fichier .txt avec un form
Pascal-Jr -
J'ai un problème :
je voudrais afficher un n° de téléphone et le changer si je veux.
Le n° est placé dans un fichier que j'ai nommé "tel.txt".
J'affiche le n° avec ce code :
PHP
<?php
$fichier = fopen('tel.txt', 'r');
$numero = fgets($fichier);
fclose($fichier);
echo "$numero";
?>
Jusque là, aucun problème le problème survient quand je rentre la valeur dans mon formulaire qui est :
HTML
<label for="tel">Modifier le n° de téléphone :<input type="text" name="tel" id="tel" />
et le code qui récupère les valeurs pour les écrire dans le fichier "tel.txt" :
PHP
<?php
if (isset($_POST['tel']))
{
$fichier = fopen('tel.txt', "w");
$tel = $_POST['tel'];
fseek($fichier, 0);
fputs($fichier, $tel);
fclose($fichier);
echo "Changement du n° de téléphone effectué.";
}
?>
16 réponses
Affichage puis modification d'un numéro de téléphone stocké dans tel.txt via un formulaire et PHP, en lisant le fichier et en écrivant la nouvelle valeur à la soumission. Des solutions détaillent l'utilisation de fopen, fgets et fputs, l'emploi de $_POST['tel'] et les précautions autour des champs vides ou non renseignés lors de la mise à jour du fichier tel.txt. Des échanges évoquent aussi les enjeux liés au téléchargement de fichiers via $_FILES, les erreurs d'upload et les astuces pour déplacer ou renommer des éléments, en rappelant l'importance des contrôles et des chemins.
-
Désolé pour le double-post mais j'avais essayais avec isset et ça marchais pas non plus, que je le voulais ou non ça me modifier le fichier : le traitement n'analyse pas le champ vide comme NULL. Et ça me perturbe grandement.
C'est certain : j'ai fait une erreur mais ça me semble illogique.-
Le problème est le suivant:
if(empty($_POST['email'])) {
Littéralement: si le champ email est vide...
Alors que toi au veux au contraire qu'il ne le soit pas.<?php if(isset($_POST['email']) && !empty($_POST['email'])) { $fichier = fopen('email.txt', "w"); $adresse = $_POST['email']; fseek($fichier, 0); fputs($fichier, $adresse); fclose($fichier); echo'<p>Le changement d'adresse e-mail a bien été effectué.<br /> Votre nouvelle adresse e-mail est '.$adresse.'</p>'; } elseif(isset($_POST['email']) && empty($_POST['email'])) { echo'<p>Le champ email est vide.</p>'; } ?>
Je me suis permis quelques modifications.
Tout d'abord, je vérifie si la variable $_POST['email'] est déclaré et si elle n'est pas vide.
Si c'est le cas, on écrit le fichier et on affiche la valeur.
Dans le cas contraire, on vérifie si la valeur est vide (et toujours déclaré) et on affiche un avertissement: la valeur est vide.
A toi de l'adapter pour les autres mais ça devrait être mieux.
-
-
-
J'en viens.
Le problème c'est que le fichier s'actualise, jusque là ça me convient.
Mais il efface tout le contenu et n'affiche rien. -
Bonjour,
si tu ouvres en W, tu écrases ton fichier... essaies en R+, tu lis et tu écris. -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Résolu :
En fait quand j'essayais j'actualisais une ancienne page ou la valeur était fausse car j'ai mis deux name="tel" dans mon formulaire et vu que le deuxième était vide ça m'actualisais deux fois le fichier :
- une fois où ça me mettais le n° comme il fallait
- la deuxième m'effacer le contenu parce que le deuxième était vide
En tout cas merci pour votre participation je me suis senti moins seul a réfléchir ;). -
... ou pas maintenant quand je ne mets qu'une valeur par exemple le ['tel']
ça m'efface le fax et l'e-mail.
Le formulaire ['fax'] et ['email'] sont exactement les mêmes que ['tel'] et sont sur la même page.
Le script qui récupère les valeurs pour les réécrire dans leur fichier respectif est sur une autre page que j'ai nommé "valid_contact.php". -
Formulaire
<form method="post" action="valid_contact.php" id="modif_contact">
<fieldset>
<legend>Contact</legend>
<table>
<tr><td><label for="tel">Modifier le n° de téléphone : </td><td><input type="text" name="tel" id="tel" /></td></tr>
<tr><td><label for="fax">Modifier le n° de fax : </td><td><input type="text" name="fax" id="fax" /></td></tr>
<tr><td><label for="email">Modifier l'adresse e-mail : </td><td><input type="text" name="email" id="email" /></td></tr>
</table>
<input type="submit" value="Valider" />
<p id="avertissement">En cas de modification, veillez à changer les 3 valeurs (téléphone, fax et email).</p>
</fieldset>
</form>
Traitement - PHP<!-- N° TEL --> <?php if (empty($_POST['tel'])) { $fichier = fopen('tel.txt', "w"); $tel = $_POST['tel']; fseek($fichier, 0); fputs($fichier, $tel); fclose($fichier); { ?> <p> Le changement du n° de téléphone a bien été effectué.<br /> Votre nouveau n° de téléphone est <?php echo $tel ?>. </p> <?php } } else { echo "Le n° de téléphone n'a pas été changé."; } ?> <!-- N° FAX --> <?php if (empty($_POST['fax'])) { $fichier = fopen('fax.txt', "w"); $fax = $_POST['fax']; fseek($fichier, 0); fputs($fichier, $fax); fclose($fichier); { ?> <p> Le changement du n° de fax a bien été effectué.<br /> Votre nouveau n° de fax est <?php echo $fax ?>. </p> <?php } } else { echo "Le n° de fax n'a pas été changé."; } ?> <!-- EMAIL --> <?php if (empty($_POST['email'])) { $fichier = fopen('email.txt', "w"); $adresse = $_POST['email']; fseek($fichier, 0); fputs($fichier, $adresse); fclose($fichier); { ?> <p> Le changement d'adresse e-mail a bien été effectué.<br /> Votre nouvelle adresse e-mail est <?php echo $adresse ?>. </p> <?php } } else { echo "L'adresse e-mail n'a pas été modifié."; } ?>
Honnêtement la base de données pour des données aussi courtes, je ne penses pas que ce soit nécessaire et je n'ai pas encore les compétences pour tripatouiller du MySQL ... -
Je te remercie pour ton implication.
Je vais essayer le code que tu m'a fourni.
Je te tiens au courant. -
Parfait !
C'est le mot.
Je te remercie Arthezius, pour ton implication et ta perspicacité.
Encore merci. -
Erf ... nouveau problème. Je ne sais pas si je devrais ouvrir un autre topic pour ça.
Je me permets de t'expliquer si ce n'est pas trop abuser de ta gentillesse.
J'aimerais envoyer une image sur le serveur avec un formulaire en écrasant la précédente en renommant automatiquement l'image sous "affiche" en conservant l'extension du fichier.
Mon problème maintenant, c'est que même avec toutes les autorisations CHMOD, l'image n'est pas envoyée sur le serveur.-
je me permets...
à condition que ton form soit sur le bon encodage, soit:
<form ... enctype="multipart/form-data">
...
</form>
ton fichier est transféré en POST dans un repertoire temporaire. Il faut donc spécifier ce répertoire dans la configuration de PHP avec les droits d'écriture.
Ensuite, tu peux utiliser la variable $_FILE et faire des déplacements et renommage comme tu le souhaites.
Désolé si j'écris comme à un débutant (que tu n'es pas) mais je préfère tout mettre ;)
j'éspère que ça t'aidera...
bonne journée! -
Pas grand chose à rajouter.
Pour récupérer le fichier ça se fait avec la variable $_FILES['fichier']['tmp_name'] (fichier étant à remplacer par la valeur du name="").
Tu peux récupérer les infos de l'image avec la fonction getimagesize().
Le nom du fichier peux être récupéré avec $_FILES['fichier']['name'] et le poid avec $_FILES['fichier']['size'].
As toi de faire un script de contrôle et upload.
Dernière chose: pour copier le fichier dans un répertoire, utilises la fonction move_uploaded_file().
-
-
Je vais vous mettre mon code, si vous voulez ... et puis minalud je penses que tu n'as pas tord je viens a peine de commencer en PHP donc mes compétences sont très modestes ...
Voici mon code de traitement :<?php if (isset($_FILES['affiche']) AND $_FILES['affiche']['error'] == 0) { if ($_FILES['affiche']['size'] <= 10000000) { $infosfichier = pathinfo($_FILES['affiche']['name']); $extension_upload = $infosfichier['extension']; $extensions_autorisees = array('jpg', 'jpeg', 'gif', 'png'); if (in_array($extension_upload, $extensions_atorisees)) { move_upload_files($_FILES['affiche']['tmp_name'], 'images/' . basename($_FILES['affiche']['name'])); echo "L'envoie de l'affiche a bien était effectué."; } } } ?> -
Erf j'arrive a rien ça me rend fou.
Mon code à l'air bon, j'ai changé la taille d'upload max mais ça ne marche toujours pas ...-
Tu peux tester la variable $_FILES['affiche']['error'] .
UPLOAD_ERR_OK Valeur : 0; Aucune erreur, le fichier a bien été uploadé UPLOAD_ERR_INI_SIZE Valeur : 1; Le fichier excède le poids autorisé par la directive upload_max_filesize de php.ini UPLOAD_ERR_FORM_SIZE Valeur : 2; Le fichier excède le poids autorisé par le champ MAX_FILE_SIZE s'il a été donné UPLOAD_ERR_PARTIAL Valeur : 3; Le fichier n'a été uploadé que partiellement UPLOAD_ERR_NO_FILE Valeur : 4; Aucun fichier n'a été uploadé
Voir ici: http://phpcodeur.net/articles/php/upload -
-
-
En fait c'était une erreur toute bête :
move_upload_files alors qu'il fallait mettre move_uploaded_file -
Bon ... maintenant, je me penche sur un autre problème.
Ce problème est que je voudrais renommer mon fichier automatiquement (avec le script de traitement) sous "affiche" et l'afficher quelque soit son extension.
Par exemple, si j'ai <img src=" /... /... /images.png" />, je ne pourrais pas afficher une jpeg et c'est très embêtant.
Je demande donc votre aide ... encore une fois.
Et encore une fois je vous remercie de m'aider et pour votre patience. -
Voici donc mon code :
<?php if (isset($_FILES['affiche']) AND $_FILES['affiche']['error'] == 0) { if ($_FILES['affiche']['size'] <= 5000000) { $infosfichier = pathinfo($_FILES['affiche']['name']); $extension_upload = $infosfichier['extension']; $extensions_autorisees = array('jpg', 'jpeg', 'gif', 'png'); if (in_array($extension_upload, $extensions_autorisees)) { move_uploaded_file($_FILES['affiche']['tmp_name'], 'images/' . basename($_FILES['affiche']['name'])); // a partir de la j'essaye de renommer $name = $_FILES['affiche']['name']; $rename = "affiche.png"; rename($name,$rename); echo "L'envoie de l'affiche a bien était effectué."; } } } ?>
Mais une erreur s'affiche au test :
[function.rename]: Le fichier spécifié est introuvable.
J'ai un doute mais il me semble que je devrais mettre le chemin du fichier que je voudrais renommer dans mon cas "images/affiche.png". -