Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php]Problem ze skryptem PHP
karolusgt
post 24.08.2008, 17:57:36
Post #1





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 24.08.2008

Ostrzeżenie: (0%)
-----


Hej wszystkim!!!
Mój problem polega na tym, iz mam skrypt PHP który zapisuje/modyfikuje/kasuje loginy i hasła użytkowników przechowywane w passwords.txt. Sam skrypt teoretycznie dziala poprawnie, jednak po jego wykonaniu cala treść passwords.txt jest zapisywana w jednej linii przez co przestaje mi działać procedura logowania (brak loginu i hasła). Może ktoś mądrzejszy ode mnie będzie umiał ten skrypt tak zmodyfikować, aby po każdym jego wykonaniu login i hasło znajdowalo się w jednej lini, a każde następne w nowej linii. Błagam pomóżcie!!! Poniżej treść skryptu. Poniżej przydatne rzeczy.
CODE
$pass=$_POST['haslo'];
$user=$_POST['user'];
$akcja=$_POST['akcja'];

function readArray($fd)
{
$arr=array();
while(!feof ($fd)) {
$line=trim(fgets($fd));
if(($pos=strpos($line, ':'))==false) continue;

$tempUser=substr($line, 0, $pos);
$tempPass=substr($line, $pos + 1, strlen($line) - $pos);
if($tempUser=='' || $tempPass == '') continue;

$arr[$tempUser]=$tempPass;
}
return $arr;
}

function writeArray($fd, $arr)
{
foreach($arr as $key => $value){
$tempStr=$key.':'.$value.'\r\n';
fwrite($fd, $tempStr);
}
}

if($pass=='' && $akcja!='remove'){
echo"Brak hasła";
return;
}

if($user==''){
echo"Brak nazwy użytkownika";
return;
}

if(!$fd=fopen('passwords.txt', 'a+')){
echo"Błąd przy próbie ostwarcia pliku";
return;
}

fseek($fd, 0);
$arr=readArray($fd);
fclose($fd);

if($akcja=='add'){
if(!array_key_exists($user, $arr)){
$arr[$user]=md5($pass);
echo"Uszytkownik: $user został dodany do bazy!";
}
else {
echo "Uzytkownik $user istnieje już w bazie!!";
return;
}
}
else if($akcja=='remove'){
if(array_key_exists($user, $arr)){
unset($arr[$user]);
echo"Użytkownik $user został usunięty z bazy";
}
else{
echo"NIe ma użytkownika $user w bazie";
return;
}
}
else if($akcja=='modify'){
if($array_key_exists($user, $arr)){
$arr[$user]=md5($pass);
echo"Hasło użytkownika $user zostało zmienione";
return;
}
else{
echo"Nie ma użytkownika $user w bazie";
return;
}
}

else{
echo"Błędne dane: akcja=$akcja";
return;
}
if(!$fd=fopen('passwords.txt', 'w')){
echo"Wystapił błąd przy próbie zapisu zmodyfikowanej bazy!";
return;
}

writeArray($fd, $arr);
fclose($fd);
?>


/********formularz****************/
<form name='konta' action='konta.php' method='post'>";
<table border='1'><tr><td>Użytkownik:</td><td colspan='2'><input type='text' name='user'></td></tr>
<tr><td>Hasło:</td><td colspan='2'><input type='password' name='haslo'</td></tr>
<tr><td><input type='radio' name='akcja' value='add' checked>Dodaj</td>
<td align='center'><input type='radio' name='akcja' value='remove'>Usuń</td>
<td><input type='radio' name='akcja' value='modify'>Modyfikuj</td>
</tr><td colspan='3' align='center'><input type='submit' value='Wykonaj'></td></tr></table></form>


/********** a tak powinien wyglądać passwords.txt ************/
karolusgt:ebe86682666f2ab3da0843ed3097e4b3
aaa:47bce5c74f589f4867dbd57e9ca9f808

/******** a po wykonaniu skryptu wygląda tak *********/
karolusgt:ebe86682666f2ab3da0843ed3097e4b3/r/naaa:47bce5c74f589f4867dbd57e9ca9f808/r/n



Z góry dzięki za pomoc mądremu człowiekowi który rozwiąże ten problem!!
Go to the top of the page
+Quote Post
michal_robak
post 24.08.2008, 18:51:56
Post #2





Grupa: Zarejestrowani
Postów: 115
Pomógł: 12
Dołączył: 13.05.2006

Ostrzeżenie: (0%)
-----


tak na szybkiego. Zamień funkcję writeArray na:

  1. <?php
  2. function writeArray($fd, $arr)
  3. {
  4. foreach($arr as $key => $value){
  5. $tempStr=$key.':'.$value."
  6. ";
  7. fwrite($fd, $tempStr);
  8. }
  9. }
  10. ?>


Ważne jest żeby ten ciapek cudzysłowu przechodził na sam pcozatek nowej linii to wtedy na poczatku bedzi ci tak zapisywac do pliku


--------------------
do wszystkiego trzeba podejść z głową a problem sam się rozwiąże
Go to the top of the page
+Quote Post
slic3
post 24.08.2008, 18:54:54
Post #3





Grupa: Zarejestrowani
Postów: 5
Pomógł: 1
Dołączył: 5.08.2008

Ostrzeżenie: (0%)
-----


Kod pomiędzy apostrofami jest traktowany "dosłownie", natomiast w wypadku cudzysłowów parser "szuka" w nim znaków specjalnych i zmiennych.

Spróbuj:

  1. <?php
  2. function writeArray($fd, $arr)
  3. {
  4. foreach($arr as $key => $value) {
  5. $tempStr=$key.':'.$value."r\n";
  6. fwrite($fd, $tempStr);
  7. }
  8. }
  9. ?>


Ten post edytował slic3 24.08.2008, 19:10:51


--------------------
Go to the top of the page
+Quote Post
karolusgt
post 24.08.2008, 21:49:35
Post #4





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 24.08.2008

Ostrzeżenie: (0%)
-----


Serdeczne dzięki biggrin.gif Działa jak marzenie... Wystarczył enter w skrypcie tongue.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 13.07.2025 - 01:49