Har en sida (micronavigator.se) där besökare kan lägga in länkar till sina hemgjorda sajter under valfri kategori. Kan vara för att Randomize() kommandot ligger inne i while-loopen. Du bör också stänga myrs varje gång där- det kommer suga minne annars. Du borde även deklarera myarr utanför while-loopen, det görs annars om och om igen vilket tar tid också.. Flyttade ut array-initieringen och randomize. Hur kan man få samma slumptal vid olika besök på sidan? Lite mindre kod för loopen:Randomize
När man lagt till sin länk slumpas ett lösenord fram som man sedan använder vid ändring eller radering.
Mitt mysko problem är om man lagt till en en länk och sedan väljer radera.
Lägger man sedan till en ny länk, så får man samma lösenord som det man just raderat.
Brukar inte hända på första försöket, men därefter.
UserIDFlag=true
While UserIDFlag
Randomize
myArray(0)="1"
myArray(1)="2"
myArray(2)="3"
...
myArray(33)="z"
myStr=""
for j=1 to 4
no=(33 - 0 + 1) * rnd + 0
myStr=myStr & myArray(int(no))
next
mySql="select linkid from link where userid='" & myStr & "'"
Set myRs = myConnection.Execute(mySql)
if myRs.eof then
UserIDFlag = false
end if
Wend
While-satsen är till för att undvika att flera får samma lösenord.
Hoppas någon förstår vad jag menar och har ett bra svar :)Sv: Randomize
Exempel:
<code>
Function gen_key(iKeyLength)
Dim strOutput
Dim char_array
char_array = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", _
"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", _
"K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", _
"U", "V", "W", "X", "Y", "Z")
Randomize()
Do While Len(strOutput) < iKeyLength
strOutput = strOutput & char_array(Int(36 * Rnd()))
Loop
gen_key = strOutput
End Function
</code>
Sedan rutinen som körs vid registreringen innan man skapar den nya användaren
<code>
medlemsnr = gen_key(12)
do
set rst = con.execute("select count(1) from tblUser where password = '" & medlemsnr & "'")
if not (rst.eof or rst.bof) then
if rst(0) > 0 then
medlemsnr = gen_key(12)
rst.close
else
exit do
end if
else
exit do
end if
loop
rst.close
set rst=nothing
</code>Sv:Randomize
Måste man stänga myRs (recordset) varje gång efter databashämtning?
Trodde man kunde göra det sist på asp-sidan, när man är färdig med alla hämtningar.
(att den använde samma utrymme vid varje hämtning)
Testade en "fuskis", att mha application spara senaste lösenordet och därmed kunna undvika det. Det funkar iofs, men jag ser att det ofta väljs gamla lösenord lite senare. Något är skumt med slumpen i rnd, VAD.
<code>
if (myRs.eof) and (application("new") <> myStr) then
UserIDFlag = false
application("new") = myStr
end if
</code>Sv: Randomize
Även om jag tar en annan browser så får jag samma slumptal.
Randomize ska ju skapa ett frö från systemtiden. Inte har väl asp-motorn någon slags cache som minns tidigare besök. Vad jag lärt mig är varje besök unikt.
Hur noggrann är systemtiden? Antar att den går ner på iaf tiondelar för att skapa unika värden.Sv:Randomize
Dim NotFound
Set rst = CreateObject("ADODB.Recordset")
Do
medlemsnr = gen_key(12)
rst.Open "SELECT Null FROM tblUser WHERE password = '" & medlemsnr & "'", con
NotFound = rst.eof
rst.Close
Loop Until NotFound