Avatar billede overgreat Forsker
10. februar 2006 - 11:33 Der er 16 kommentarer og
1 løsning

random kodeord, som ikke er at finde i forvejen i databasen

Hej

Jeg har som ide, at lave et random-kodeord på ti cifre/bogstaverm som jeg kan sætte ind i et felt i nedenstående tabel.

Det er vigtigt for mig at den kan lave et kodeord, der ikke findes i forvejen i databasen.....

På forhånd tak


--------------------
CREATE TABLE `nyhedsbrev` (
  `id` int(11) NOT NULL auto_increment,
  `navn` text NOT NULL,
  `email` text NOT NULL,
  `kodeord` text NOT NULL,
  PRIMARY KEY  (`id`)
) TYPE=MyISAM;

-------------
Avatar billede steven_ Nybegynder
10. februar 2006 - 11:39 #1
Hvis det er til et aktiveringslink er en md5-hashet nok på sin plads - selvom det godt kan ske at der findes to ens - men jeg tror dette er mere teori end praksis da sandsynligheden er minimal.
Avatar billede hmm10 Nybegynder
10. februar 2006 - 11:40 #2
Kan du ikke bare lave email uniq, og tjek om den findes inden du opretter brugeren. derefter kan du jo bare sætte md5('email'); og tage de første/sidste 10 tegn?
Avatar billede barklund Nybegynder
10. februar 2006 - 11:43 #3
Hvorfor skal det være unikt? Og i så fald kan du muligvis bruge uniqid() :)
Avatar billede steven_ Nybegynder
10. februar 2006 - 11:49 #4
ellers skal det vel bare se noglelunde sådan her ud:

<?php
function makePassword( $password, length=10 )
{
    $password = substr( md5( $password ), 0, 10 );
   
    if( mysql_query("select count(`id`) from `nyhedsbrev` where `kodeord` = '" . $password . "'") >= 1 )
    {
        echo "<script type=\"text/javascript\">window.location.reload(true);</script>";
    }
}
?>
Avatar billede steven_ Nybegynder
10. februar 2006 - 11:49 #5
<?php
function makePassword( $password, length=10 )
{
    $password = substr( md5( $password ), 0, $length );
 
    if( mysql_query("select count(`id`) from `nyhedsbrev` where `kodeord` = '" . $password . "'") >= 1 )
    {
        echo "<script type=\"text/javascript\">window.location.reload(true);</script>";
    }
}
?>
Avatar billede barklund Nybegynder
10. februar 2006 - 11:50 #6
kan funktionen ikke bare kalde sig selv? Forholdsvist mærkeligt at bruge klienten til rekursivitet :)
Avatar billede barklund Nybegynder
10. februar 2006 - 11:51 #7
Men issuet her er, hvad det skal bruges til - jeg tvivler på, at unikhed virkeligt er nødvendigt :)
Avatar billede codebase Praktikant
10. februar 2006 - 11:59 #8
function makePassword( ) {
    $unikPassword = 1;
    while ( $unik == 1 ) {
        $password = substr( md5( time() ), 0, 10 );
        $unikPassword = mysql_query("select count(`id`) from `nyhedsbrev` where `kodeord` = '" . $password . "'");
    }
    return $password;
}

utestet men noget ala dette skulle kunne gøre det.. ;)
Avatar billede fixxxer Nybegynder
10. februar 2006 - 14:28 #9
Jeg vil uden ydeligere tilladelse tro at codebases løsning skulle se sådan her ud:

function makePassword( ) {
    $unikPassword = 1;
    while ( $unikPassword == 1 ) { //vel bare en typo?
        $password = substr( md5( time() ), 0, 10 );
        $unikPassword = mysql_query("select count(`id`) from `nyhedsbrev` where `kodeord` = '" . $password . "'");
    }
    return $password;
}
Avatar billede codebase Praktikant
10. februar 2006 - 14:31 #10
jepz ;)
Avatar billede fixxxer Nybegynder
10. februar 2006 - 14:43 #11
codebase >> Har jeg lige fået en mail fra dig?
Avatar billede codebase Praktikant
10. februar 2006 - 14:45 #12
ja
Avatar billede fixxxer Nybegynder
10. februar 2006 - 14:46 #13
sejt.. :)
Avatar billede olebole Juniormester
10. februar 2006 - 14:54 #14
<ole>

Hvis kodeordet er unikt, har du naturligvis sat det felt til at være unikt i DB'en  ;o)

Så kan du blot prøve at indsætte - og undertykke fejl:
  @mysql_query( $SQL );

Hvis mysql_errno() efterfølgende er 1062, eksisterer kodeordet i forvejen - og du genererer et nyt kodeord, som du indsætter. Det kan gøres i en simpel while-løkke  :)

/mvh
</bole>
Avatar billede overgreat Forsker
26. februar 2006 - 22:16 #15
olebole kan du ikke forklare din sidste kommentar nærmere?
Avatar billede barklund Nybegynder
27. februar 2006 - 09:23 #16
overgreat, du har ikke lige kommenteret på, hvorfor unikhed er et krav - det har jeg aldrig selv stødt på og jeg har set en del applikationer efterhånden, så jeg undrer mig lidt :)
Avatar billede overgreat Forsker
10. juli 2007 - 17:39 #17
jeg lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester