/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Random Password
Fra : Erik Ginnerskov


Dato : 04-12-04 21:37

Hej NG

Denne kode burde generere et tilfældigt password på 8 alfanumeriske
karakterer og udskrive det på siden:

<?php
$pass = "";
function makeRandomPassword() {
$salt = "abchefghjkmnpqrstuvwxyz0123456789";
srand((double)microtime()*1000000);
$i = 0;
while ($i <= 7) {
$num = rand() % 33;
$tmp = substr($salt, $num, 1);
$pass = $pass . $tmp;
$i++;
}
return $pass;
}
echo "<p>Dit tilfældige password er: <b>" . $pass . "</b</p>";
?>

.... men der udskrives ikke noget mellem <b> og </b> - hvorfor?

--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://html-faq.dk
http://ginnerskov.frac.dk



 
 
Bertel Lund Hansen (04-12-2004)
Kommentar
Fra : Bertel Lund Hansen


Dato : 04-12-04 21:46

Erik Ginnerskov skrev:

>echo "<p>Dit tilfældige password er: <b>" . $pass . "</b</p>";

>... men der udskrives ikke noget mellem <b> og </b> - hvorfor?

Erstat $pass med makeRandomPassword().

$pass er kun kendt inden for funktionen.

--
Bertel
http://bertel.lundhansen.dk/   FIDUSO: http://fiduso.dk/

Erik Ginnerskov (04-12-2004)
Kommentar
Fra : Erik Ginnerskov


Dato : 04-12-04 21:54

Bertel Lund Hansen wrote:

>> echo "<p>Dit tilfældige password er: <b>" . $pass . "</b</p>";
>
>> ... men der udskrives ikke noget mellem <b> og </b> - hvorfor?
>
> Erstat $pass med makeRandomPassword().

Så fik jeg den til at udskrive. Men jeg får også en fejlmelding:

Notice: Undefined variable: pass in
C:\Dokumenter\HTML\kladde1\scripts\phppass\random.php on line 21

Det er denne linje, der refereres til:

$pass = $pass . $tmp;

Det samlede script nu:

<?php
function makeRandomPassword() {
$salt = "abchefghjkmnpqrstuvwxyz0123456789";
srand((double)microtime()*1000000);
$i = 0;
while ($i <= 7) {
$num = rand() % 33;
$tmp = substr($salt, $num, 1);
$pass = $pass . $tmp;
$i++;
}
return $pass;
}
echo "<p>Dit tilfældige password er: <b>" . makeRandomPassword() .
"</b</p>";
?>

--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://html-faq.dk
http://ginnerskov.frac.dk



Leonard (04-12-2004)
Kommentar
Fra : Leonard


Dato : 04-12-04 22:13

"Erik Ginnerskov" <erik@donotspammmeplease.invalid> wrote:

>Så fik jeg den til at udskrive. Men jeg får også en fejlmelding:
>
> Notice: Undefined variable: pass in
>C:\Dokumenter\HTML\kladde1\scripts\phppass\random.php on line 21

Det er bare en warning, men du kan gøre det godt ved at indsætte:

$pass = "";

et sted i din funktion, men før din while ...

--
med venlig hilsen
Leonard - http://leonard.dk/

Erik Ginnerskov (04-12-2004)
Kommentar
Fra : Erik Ginnerskov


Dato : 04-12-04 22:15

Leonard wrote:
> "Erik Ginnerskov" <erik@donotspammmeplease.invalid> wrote:

> Det er bare en warning, men du kan gøre det godt ved at indsætte:
>
> $pass = "";
>
> et sted i din funktion, men før din while ...

Bingo, takker

--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://html-faq.dk
http://ginnerskov.frac.dk



Christian Joergensen (04-12-2004)
Kommentar
Fra : Christian Joergensen


Dato : 04-12-04 23:52

On Sat, 04 Dec 2004 22:14:45 +0100, Erik Ginnerskov wrote:

>> Det er bare en warning, men du kan gøre det godt ved at indsætte:
>>
>> $pass = "";
>>
>> et sted i din funktion, men før din while ...
>
> Bingo, takker

For lige at runde af, opstaar fejlen fordi du bruger en ikke allerede
initialiseret variabel paa den "semantiske" hoejre side[1] af en tildeling.

Det undgaar man ved at give den en vaerdi foer tildelingen.

[1] Med de specielle operatorer .=, += mfl. gaelder reglen ogsaa, da man
kan sige at lhs-operanden ogsaa optrader paa hoejre side semantisk set.

--
Christian Jørgensen | Codito, Ergo Sum
http://www.razor.dk |


Erik Ginnerskov (05-12-2004)
Kommentar
Fra : Erik Ginnerskov


Dato : 05-12-04 01:11

Christian Joergensen wrote:

> For lige at runde af, opstaar fejlen fordi du bruger en ikke allerede
> initialiseret variabel paa den "semantiske" hoejre side[1] af en
> tildeling.
>
> Det undgaar man ved at give den en vaerdi foer tildelingen.
>
> [1] Med de specielle operatorer .=, += mfl. gaelder reglen ogsaa, da
> man kan sige at lhs-operanden ogsaa optrader paa hoejre side
> semantisk set.

Det er sikkert rigtigt, men desværre sort snak for mig - endnu.

--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://html-faq.dk
http://ginnerskov.frac.dk



Bertel Lund Hansen (05-12-2004)
Kommentar
Fra : Bertel Lund Hansen


Dato : 05-12-04 12:14

Erik Ginnerskov skrev:

>> [1] Med de specielle operatorer .=, += mfl. gaelder reglen ogsaa, da
>> man kan sige at lhs-operanden ogsaa optrader paa hoejre side
>> semantisk set.

>Det er sikkert rigtigt, men desværre sort snak for mig - endnu.

Det er nu ikke så svært endda:

<?
   $third = $first.$second;
?>

Det giver advarslen fordi $first og $second er ukendte variable.

<?
   $first = "Begynd";
   $second = " slut";
   $third = $first.$second;
?>

Ingen advarsel. Både $first og $second har fået en værdi før de
bruges.

Om operatoren +=:
I C-agtige sprog og altså også i PHP kan man skrive

   $result += 7;

Det svarer helt til

   $result = $result + 7;

Hvis $result er ukendt, giver det selvfølgelig samme advarsel som
de andre eksempler.

Det korte og det lange er at alle udtryk der står på højre side
af lighedstegnet, skal være veldefinerede for at man ikke får en
advarsel. Systemet vil forsøge at rette op på fejlen idet det
tildeler ukendte varable en nulværdi (0, "" eller lignende), men
det er jo kun et gæt.

Det er en god idé at skrive programmet så advarslen ikke kommer -
uanset om det virker efter hensigten. Dels er det en god vane,
dels er det ikke sikkert at det i *alle* tilfælde vil virke efter
hensigten, men måske kun lige i dem man får testet.

Somme tider skyldes advarslen at man har glemt at indsætte en
startværdi. Det kan f.eks. være at man egentlig ville begynde med
at sætte $result til 100, men blot har glemt at skrive den linje.

--
Bertel
http://bertel.lundhansen.dk/   FIDUSO: http://fiduso.dk/

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408929
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste