Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Zapisanie wyniku funkcji w zmiennej
Foxer
post
Post #1





Grupa: Zarejestrowani
Postów: 34
Pomógł: 0
Dołączył: 17.11.2003

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


Witam :-).

Mam funkcję generującą hasła. Jej nazwa to mkPasswd(). Chciałbym, aby stworzone hasło zapisało mi w zmiennej.

W tym celu:[php:1:f876710bcd]<?php
$passwd = mkPasswd();
?>[/php:1:f876710bcd]
Nie wiedzieć dlaczego, ta jedna linijka wyświetla mi stworzone przez funkcję hasło tak jakbym wyprintował tą funkcję.

Gdy chcę wyprintować w kilku miejscach kodu $passwd - zmienna nie posiada żadnej wartości. Co robię źle?
Go to the top of the page
+Quote Post
kszychu
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 712
Pomógł: 23
Dołączył: 27.10.2003
Skąd: z kontowni

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


Zapodaj kod funkcji mkpasswd(),
bo coś mi zię wydaje, że tam zamiast return $haslo jest echo $haslo....
Go to the top of the page
+Quote Post
Foxer
post
Post #3





Grupa: Zarejestrowani
Postów: 34
Pomógł: 0
Dołączył: 17.11.2003

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


[php:1:331d86cd20]<?php
function mkPasswd() {

$totalchar = "8";

$letters = array("1" => a, "2" => b, "3" => c, "4" => d, "5" => e, "6" => f, "7" => g,
"8" => h, "9" => j, "10" => k, "10" => l, "11" => m, "12" => n, "13" => o, "14" => p,
"15" => q, "16" => r, "17" => s, "18" => t, "19" => u, "20" => v, "21" => w, "22" => x,
"23" => y, "24" => z);

for ($i = 1; $i <= $totalchar; $i++) {

$num_yon = (rand(0, 1));
$case_yon = (rand(0, 1));

if ($num_yon == "0")
{

if ($case_yon =="0")
{
$num = (rand(1, 24));
echo "$letters[$num]";
}
else
{
$num = (rand(1, 24));
$temp = $letters[$num];
$numtd = strtoupper($temp);
echo "$numtd";
}

}
else
{
$num= (rand(0, 9));
echo"$num";
}

}


}
?>[/php:1:331d86cd20]
Go to the top of the page
+Quote Post
kszychu
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 2 712
Pomógł: 23
Dołączył: 27.10.2003
Skąd: z kontowni

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


Wiedziałem! Wiedziałem! Wiedziałem! (IMG:http://forum.php.pl/style_emoticons/default/laugh.gif)
Wszędzie, zamiast echo daj return.
Go to the top of the page
+Quote Post
matid
post
Post #5





Grupa: Zarejestrowani
Postów: 362
Pomógł: 0
Dołączył: 18.02.2004
Skąd: Knurów

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


return chyba przerywa działanie funkcji. Daj to wszystko do jakiejś zmiennej lub tablicy a na końcu daj
[php:1:febd8f295f]
<?
return $zmienna;
?>
[/php:1:febd8f295f]
Go to the top of the page
+Quote Post
ave
post
Post #6





Grupa: Zarejestrowani
Postów: 117
Pomógł: 2
Dołączył: 29.01.2004
Skąd: Rz-ów

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


w tym wypadku jak nawet przerwie to nic sie niestanie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
matid
post
Post #7





Grupa: Zarejestrowani
Postów: 362
Pomógł: 0
Dołączył: 18.02.2004
Skąd: Knurów

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


No w sumie racja, nie zagłębiałem się w kod, ale widzę, żę warunki wzajemnie się wykluczają, więc na jedno wykonanie funkcji może być tylko 1 echo. W takim wypadku wystarczy zamienić echo na return i powinno wszystko działać.
Go to the top of the page
+Quote Post
Foxer
post
Post #8





Grupa: Zarejestrowani
Postów: 34
Pomógł: 0
Dołączył: 17.11.2003

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


A jednak nie... return zamiast każdego echo przerywało funkcję i w rezultacie hasło składało się tylko z jednego znaku.

Więc poszedłem za radą matid'a i dałem wszystko do jednej zmiennej ($zmienna .= "") zamiast echo. Na koniec skryptu return $zmienna; i teraz chodzi jak burza ;-).

Dzięki za pomoc.
Go to the top of the page
+Quote Post
kszychu
post
Post #9





Grupa: Przyjaciele php.pl
Postów: 2 712
Pomógł: 23
Dołączył: 27.10.2003
Skąd: z kontowni

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


Tak mi właśnie przyszło do głowy, że z tymi echo też mogłoby działać. Trzeba by tylko zmienić przypisanie wartości zmiennej:
[php:1:d081103c59]<?php
// zamiast
$passwd = mkPasswd();
// trzeba by wstawić
$passwd = sprintf("%s", mkPasswd());
?>[/php:1:d081103c59]
Go to the top of the page
+Quote Post
matid
post
Post #10





Grupa: Zarejestrowani
Postów: 362
Pomógł: 0
Dołączył: 18.02.2004
Skąd: Knurów

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


Można też tak:
[php:1:226ca9c653]
<?
ob_start();
mkPasswd();
$passwd = ob_get_contents();
ob_end_clear();
?>
[/php:1:226ca9c653]
ale jaki to ma sens jak można zmienić w funkcji :]
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.08.2025 - 09:58