probleme pour modifier fichier.txt

Invité
Invité n'ayant pas de compte PHPfrance

01 mars 2006, 12:16

bonjour, encore un ptit soucy c'est pour cela que je demande votre precieuse aide...


voila mon probleme:

dans l'application que je suis en train de faire, l'admin doit pouvoir rentrer et supprmier des acces.

pour ceci j'utilise les fichiers .htacess et .htpasswd

pour rentre de new utilisateur je n'ai aucun soucy ca marche nikel.

mais pour supprimer un utilisateur et son pass la j'y arrive plus. il me prend meme pas mes variables. :cry: :cry: :cry:

donc je sais plus quoi faire.

voicy le code:
//initialisation:
$fichier = ".htpasswd"; 

$login = '';		if (!empty($_POST['login'])) {$login = $_POST['login'];}
					elseif (!empty($_POST['login_supp'])) {$login = $_POST['login_supp'];}
$pass = '';			if (!empty($_POST['pass'])) {$pass = $_POST['pass'];}
					elseif (!empty($_POST['pass_supp'])) {$pass = $_POST['pass_supp'];} 
		
if (isset($_POST['login_supp'])) {
	echo $login.':'.$pass.'<br>';
	echo $_POST['login_supp'].':'.$_POST['pass_supp'].'<br>';
       //[b]mes variables ne s'affichent pas[/b]
}

if (isset($_POST['login'])) {
	$insertOk = true;
	
	if (empty($_POST['login'])) {
		$insertOk = false;
		echo '<div align="center" style="color:#FF0000">the login is obligatory.</div>'.'<br>';
	}
	
	if (empty($_POST['pass'])) {
		echo '<div align="center" style="color:#FF0000">the pass is obligatory.</div>'.'<br>';
		$insertOk = false;
	}
	
	if ($insertOk) {
		$text = "\r\n".$login.":".$pass;
		$handle = fopen($fichier, 'a');
		fwrite($handle, $text);
		$login = '';
		$pass = '';	
	}
}

if (file_exists($fichier)) { 
	$tableau = file($fichier); 

 	while(list($cle,$val) = each($tableau)) {
   		echo $val."<br>";
	} 
}
?>

et mon formulaire:

Code : Tout sélectionner

<form name="form1" method="post" action=""> <table width="30%" > <tr> <td width="6%"><strong>Login:</strong></td> <td width="94%"><input type="text" name="login" value="<?php echo $login?>"></td> </tr> <tr> <td><strong>Pass:</strong></td> <td><input type="text" name="pass" value="<?php echo $pass?>"></td> </tr> <tr> <td> <div align="right"> <input type="submit" name="Submit" value="New"> </div> </form> </td> <td> <form name="form2" method="post" action=""> <input type="hidden" name="login_supp" value="<?php echo $login;?>"> <input type="hidden" name="pass_supp" value="<?php echo $pass;?>"> <input type="submit" name="Submit" value="Delete"> </form> </td> </tr> </table> </form>
si qqn voit ou est le probleme???

merci d'avance et bonne journee

Eléphant du PHP | 181 Messages

01 mars 2006, 12:17

c'etait moi au dessous.. desole.

Edit de Zeus : pas la peine de citer ton message précédent, surtout quand il est aussi long

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

01 mars 2006, 12:48

A première vue, je ne vois pas d'erreur... tu peux regarder le contenu de $_POST avec la méthode print_f :
echo '<pre>';
print_r($_POST);
echo '</pre>';
Place cela au début de ton script, tu pourras déjà voir ce que tu récupères de ton formulaire... :)

Eléphant du PHP | 181 Messages

01 mars 2006, 12:53

A première vue, je ne vois pas d'erreur... tu peux regarder le contenu de $_POST avec la méthode print_f :
echo '<pre>';
print_r($_POST);
echo '</pre>';
Place cela au début de ton script, tu pourras déjà voir ce que tu récupères de ton formulaire... :)
quand j'appuie new j'ai des donnees.

mais quand j'appuie delete j'ai absolument rien

et c ca mon probleme pas l'insertion mais le delete qui me prend aucune variable

:cry: :cry: :cry: :cry:

et je vois plus comment faire :roll:

svp besoin d'aide svp ](*,)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

01 mars 2006, 13:24

Peut être une piste dans ton formulaire : il ne faut pas imbriquer deux formulaires l'un dans l'autre.

Ceci est correct :

Code : Tout sélectionner

<form name="form1"> </form> <form name="form2"> </form>
Ceci ne l'est pas :

Code : Tout sélectionner

<form name="form1"> <form name="form2"> </form> </form>

Eléphant du PHP | 312 Messages

01 mars 2006, 13:42

C'est même un peu plus fouilli que ça : là tu as une balise FORM qui s'ouvre, qui se ferme, une autre qui s'ouvre, qui se ferme et une fermeture de la première balise qui est déjà fermée.

De plus, je pense que si tu fais quelque chose comme

Code : Tout sélectionner

<FORM> <TABLE> </FORM> </TABLE>
ça ne va pas marcher (ça fout le DOM en l'air et ça doit pas plaire aux parseurs).

Eléphant du PHP | 181 Messages

01 mars 2006, 16:13

ok... alors comment je peux faire pour gerer 2 bouton submit sur un seul formulaire???

(ps c'est bizarre car les autres application j'ai fait comme cela et ca marche nikel.)

merci

Eléphant du PHP | 181 Messages

01 mars 2006, 17:03

c'etait moi au dessous.. desole.

Edit de Zeus : pas la peine de citer ton message précédent, surtout quand il est aussi long
ok desole j'avais pas pense a ca....

Eléphant du PHP | 181 Messages

01 mars 2006, 17:05

ok... alors comment je peux faire pour gerer 2 bouton submit sur un seul formulaire???

(ps c'est bizarre car les autres application j'ai fait comme cela et ca marche nikel.)

merci
c bon pour cette partie

mais maintenant comment me conseiller vous de faire pour pouvoir supprimer un login et un pass de ce fichier .htpasswd???

faire un tableau et rechercher dedant le bon login:pass et le supprimer et a se moment refaire le fichier .htpasswd??


ou alors une autre maniere plus simple???

merci d'avance

Eléphant du PHP | 181 Messages

02 mars 2006, 09:53

personne n'a une idee de comment faire ca simplement???

Eléphant du PHP | 181 Messages

09 mars 2006, 11:02

en fait j'ai change d'avis et j'aimerais supprime carement la ligne trouvee.

voici mon code:
<?php
//initialisation:
$fichier = ".htpasswd";
$tab = ''; 	

$login = '';		if (!empty($_POST['login'])) {$login = $_POST['login'];}
$pass = '';			if (!empty($_POST['pass'])) {$pass = $_POST['pass'];}

$i = '';			if (!empty($_POST['i'])) $i = $_POST['i'];

if (isset($_POST['Submit2'])) {
	$insertOk2 = true;
	
	if (empty($_POST['login'])) {
		$insertOk = false;
		echo '<div align="center" style="color:#FF0000">the login is obligatory.</div>'.'<br>';
	}
	
	if (empty($_POST['pass'])) {
		echo '<div align="center" style="color:#FF0000">the pass is obligatory.</div>'.'<br>';
		$insertOk = false;
	}

	
	if ($insertOk2) {
		
		echo $login.':'.$pass.'<br><br>';
		
		// Supression d'une ligne		
		$fp = fopen($fichier,"r"); // Ouverture du fichier en lecture
		$fp_temp = fopen("temp.txt","w+"); // Ouverture du fichier temporaire
		
		while (!feof($fp)) { // Parcours du fichier
			$ligne = fgets($fp,4000); // On récupère le nombre de la ligne
			if ( ($ligne != $login.':'.$pass) or ($ligne != ' ') ) { // Condition de placement
				fwrite($fp_temp,$ligne);
			}
		}
		
		fclose($fp); // Fermeture du fichier
		fclose($fp_temp);
		
		copy("temp.txt",$fichier); // On recopie le fichier temporaire obtenu
		unlink("temp.txt"); // On l'efface
	}
}

if (isset($_POST['Submit'])) {
	$insertOk = true;
	
	if (empty($_POST['login'])) {
		$insertOk = false;
		echo '<div align="center" style="color:#FF0000">the login is obligatory.</div>'.'<br>';
	}
	
	if (empty($_POST['pass'])) {
		echo '<div align="center" style="color:#FF0000">the pass is obligatory.</div>'.'<br>';
		$insertOk = false;
	}
	
	if ($insertOk) {
		$text = "\r\n".trim($login).":".trim($pass);
		$handle = fopen($fichier, 'a');
		fwrite($handle, $text);
		$login = '';
		$pass = '';
		$_POST['login'] = '';
		$_POST['pass'] = '';	
	}
}

if (file_exists($fichier)) { 
	$tableau = file($fichier); 

 	$i = 0;
	while(list($cle,$val) = each($tableau)) {
   		echo $val."<br>";
		$tab .= $val;
		$i++;
	} 
}
echo $tab;
?>
et mon formulaire :

Code : Tout sélectionner

<form name="form1" method="post" action=""> <table width="30%" > <tr> <td width="6%"><strong>Login:</strong></td> <td width="94%"><input type="text" name="login" value="<?php echo $login?>"></td> </tr> <tr> <td><strong>Pass:</strong></td> <td><input type="text" name="pass" value="<?php echo $pass?>"></td> </tr> <tr> <td> <div align="right"> <input type="submit" name="Submit" value="New"> </div> </td> <td> <input type="hidden" name="i" value="<?php echo $i?>"> <input type="submit" name="Submit2" value="Delete"> </td> </tr> </table> </form>
l'insertion se passe nikel.

probleme pour la suppression.... des fois il me l'enleve des fois pas... et en plus si je supprime et je rajoute apres j'ai des ligne de blance entre les suppressions et les nouvelles insertions...

est-ce que qqn peut m'aider ou voit ou ya une erreur???

merci d'avance.

ViPHP
ViPHP | 1380 Messages

09 mars 2006, 11:36

Pour te simplifier la vie pour la suppression, je ferais:
  • mettre ton htaccess dans une chaîne (file_get_contents)
  • str_replace la ligne à supprimer par null
  • fwrite toute la chaîne (modifiée) dans htaccess
En passant, il me semble que tu mettes tes mdp en clair dans ton htaccess non? Pas très prudent ça.
ripat

Eléphant du PHP | 181 Messages

09 mars 2006, 15:08

Pour te simplifier la vie pour la suppression, je ferais:
  • mettre ton htaccess dans une chaîne (file_get_contents)
  • str_replace la ligne à supprimer par null
  • fwrite toute la chaîne (modifiée) dans htaccess
En passant, il me semble que tu mettes tes mdp en clair dans ton htaccess non? Pas très prudent ça.
merci pour ta reponse.

alors j'ai essaye ca mais ca change rien du tout.
$test = file_get_contents($fichier);

		str_replace($login.':'.$pass, ' ', $test);	
		$fp = fopen($fichier,"w+");
		fwrite($fp,$test);	
est-ce que je suis sur la bonne voie ou alors j'ai completement faux???
car rien de change...

et pour mon htacess je fait en dur pour les test apres je les coderais...

mais deja voir si ca marche comme ca ce qui n'est pas le cas

:(

ViPHP
ViPHP | 1380 Messages

09 mars 2006, 15:34

Tu ouvres ton fichier htaccess en lecture seule (r).

Essaye:
$fp = fopen($fichier,"r+"); 
J'oubliais:
$test = str_replace($login.':'.$pass, null, $test);
ripat

Eléphant du PHP | 181 Messages

09 mars 2006, 15:40

yes ca marche persque nikel

juste un soucy... quand je supprime un login et un pass il me rajoute la derniere ligne en doublon....

comment ca se fait??? t comment y remedier svp???

merci