Ecrire dans un fichier .txt avec un form

Fermé
Pascal-Jr - 12 févr. 2011 à 13:36
 Pascal-Jr - 8 mars 2011 à 12:18
Bonjour,
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é.";
			}
?>

A voir également:

16 réponses

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.
1
arthezius Messages postés 3538 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 11 septembre 2016 475
12 févr. 2011 à 17:45
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.
0
arthezius Messages postés 3538 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 11 septembre 2016 475
12 févr. 2011 à 13:43
Et quel est le problème?

Tu peux regarder par ici: https://openclassrooms.com/fr/courses
0
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.
0
minalud Messages postés 91 Date d'inscription lundi 10 janvier 2011 Statut Membre Dernière intervention 4 janvier 2013 8
Modifié par minalud le 12/02/2011 à 13:54
Bonjour,

si tu ouvres en W, tu écrases ton fichier... essaies en R+, tu lis et tu écris.
0
minalud Messages postés 91 Date d'inscription lundi 10 janvier 2011 Statut Membre Dernière intervention 4 janvier 2013 8
12 févr. 2011 à 13:51
r+, en minuscule...
0

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 ;).
0
... 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".
0
arthezius Messages postés 3538 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 11 septembre 2016 475
12 févr. 2011 à 16:25
Et si tu nous mettais le code complet du formulaire et du traitement?

Question bête: pourquoi ne pas utiliser une base de donnée?
0
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 ...
0
Je te remercie pour ton implication.
Je vais essayer le code que tu m'a fourni.
Je te tiens au courant.
0
Parfait !
C'est le mot.
Je te remercie Arthezius, pour ton implication et ta perspicacité.
Encore merci.
0
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.
0
minalud Messages postés 91 Date d'inscription lundi 10 janvier 2011 Statut Membre Dernière intervention 4 janvier 2013 8
13 févr. 2011 à 12:50
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!
0
arthezius Messages postés 3538 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 11 septembre 2016 475
14 févr. 2011 à 00:36
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().
0
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é.";
				}
			}
		}
	?>
0
Mes images sont très grosses elles sont censé être retouché par Photoshop donc j'ai mis la possibilité de mettre une très grosse image, le but est de renommer automatiquement l'image sous "affiche" pour écraser l'ancienne.
0
arthezius Messages postés 3538 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 11 septembre 2016 475
15 févr. 2011 à 12:35
Dans la config du serveur, tu est normalement limité par défaut à une taille maximum de fichier à 2Mo. Il est possible de modifier ce paramètre dans le php.ini du serveur.
0
Merci ça m'aidera surement, par contre je ne sais pas où trouver ce fichier.
Pouvez-vous me dire si mon code de traitement est bon ?
Merci d'avance.
0
Ca y est j'ai trouvé le fichier et je l'ai éditer à :
upload_maximum_size : 2M et j'ai donc mit 5M
0
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 ...
0
arthezius Messages postés 3538 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 11 septembre 2016 475
16 févr. 2011 à 21:06
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
0
Merci j'vais essayer ça.
Encore merci.
0
En fait c'était une erreur toute bête :
move_upload_files alors qu'il fallait mettre move_uploaded_file
0
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.
0
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".
0
arthezius Messages postés 3538 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 11 septembre 2016 475
17 févr. 2011 à 21:02
Pourquoi ne pas renommer le fichier au moment de l'envoi plutôt que de le faire après?
move_uploaded_file($_FILES['affiche']['tmp_name'], 'images/affiche.png');
0
Oui j'ai essayé de faire ça en cherchant, ils parlaient de renommer à l'envoi.
Mais je ne savais pas comment faire j'avais fait :
'images/.'$rename.
Je reconnais que ce n'est as très logique :/ .
Mais maintenant grâce à toi je penses pouvoir le faire.
Merci.
0
Erf on me dit que le fichier spécifié est introuvable. Je vous mets le message d'erreur.
Warning: rename(background.png,affiche.png) [function.rename]: Le fichier spécifié est introuvable. (code: 2) in C:\wamp\www\Performances 2Roues\valid_affiche.php on line 20
0
Erreur de débutant ... Je n'ai pas réfléchi. Il faut que je supprime le rename ^^ ...
0
Ca marche parfaitement le seul problème c'est que ma balise <img /> ne lis pas les jpeg renommer en extensions .png il me faudrait donc un script pour changer le format de mon image. Je vais donc regarder sur Google.
Je vous tiens au courant.
Merci arthezius.
0
Merci encore une fois à tous.
Je m'excuses pour mon absence.
0