Avatar billede JJ77 Juniormester
17. november 2006 - 14:46 Der er 21 kommentarer og
1 løsning

md5 laver for lang kode

Når en bruger har oprettet sig får han tilsendt en email med et valideringslink. der er bare det problem, at i nogle mailprogrammer kan linket blive for langt så det vises på flere linier. fx i jubiimail hvor nedenstående ikke virker. Hvis man fx istedet kopiere linket fra jubiimail og sætter det ind i adresselinien på browseren får man ingen gang det hele med.. meget mystisk

http://www.blabla.dk/members/validate.php?key=64d635ad653785559b
205cf166ae0823

den unikke kode bliver lavet med $uniqueId = md5(uniqid....
Kan man tvinge md5 til at generere et nr. som er kortere end 32 tegn?

Eller hvad gør jeg?
Avatar billede JJ77 Juniormester
17. november 2006 - 14:56 #1
Det går galt lige så snart at et mailprogram tvinger linket vist på to linier..
Avatar billede udvikler Nybegynder
17. november 2006 - 15:03 #2
substr($var, 0, 30)

den kode viser kun de første 30 tegn i variablen $var
Avatar billede udvikler Nybegynder
17. november 2006 - 15:06 #3
det første cifre efter variablen viser hvor den skal starte med at læse variablen og det sidste cifre står for hvor mange tegn den skal læse.

altså vil koden forneden vise "cde" fra variablen "abcdefg"

substr($var, 2, 3)
Avatar billede hmortensen Nybegynder
17. november 2006 - 15:07 #4
Avatar billede udvikler Nybegynder
17. november 2006 - 15:12 #5
hmortensen - det ville give problemer hos dem der ikke tillader html i deres mail.
Avatar billede hmortensen Nybegynder
17. november 2006 - 15:14 #6
Ja, og cookies giver problemer ved login, og javascript giver problemer ved menuer.
Man kan ikke leve i det forrige århundrede altid.
Avatar billede davidfossil Nybegynder
17. november 2006 - 15:15 #7
Den nørdede variant er selvfølgelig at dekode hex-decimal strengen til en håndfyld bytes og derefter kode dem til base32 eller base64 - begge dele vil fylde væsentligt færre chars, men beholde den samme grad af "uniqueness". Eftersom jeg intet kender til PHP er jeg desværre ikke i stand til at give dig nogle anvisninger/kodeeksempler på ovenstående, men det burde da kunne lade sig gøre :)
Avatar billede JJ77 Juniormester
17. november 2006 - 15:16 #8
Hej igen.. jeg har fået det til at virke ved at fjerne md5 så det ser således ud:

$uniqueId = (uniqid($username));

Er det ok? nu laver den bare en værdi på 12 tegn.
Avatar billede udvikler Nybegynder
17. november 2006 - 15:19 #9
15:16:53 -> kom med hele koden der skaber variablen tak :)
Avatar billede JJ77 Juniormester
17. november 2006 - 15:26 #10
<?PHP
require_once('common.php');

$password = sanitize_variable($_REQUEST['password']);
$password1 = sanitize_variable($_REQUEST['password1']);

if(!isset($_REQUEST['submit']))
{

    /* show the signup form */
   
    require("signup.txt");
}
else
{
    if($password != $password1)   
    {   
        echo "     <script type=\"text/javascript\">
                alert(\"Adgangskoder matcher ikke!\");
                </script>";
        require("signup.txt");                     
    }   
    else
    {
        if(!is_valid_username())
        {
            echo "     <script type=\"text/javascript\">
                alert(\"Indtast venligst i alle felter!\");
                </script>";
            require("signup.txt");                 
        }
        else if(!is_valid_addr())
        {
            echo "     <script type=\"text/javascript\">
                alert(\"Den indtastede e-mail adresse er ikke gyldig eller uacceptabel!\");
                </script>";
            require("signup.txt");                 
        }
        else
        {
            if(is_valid_referer())
            {
               
                /*
                * everything has worked out let's create that account.
                */
                       
                require    ("../inc/config.php");
                $username = sanitize_variable($_REQUEST['username']);   

               
                $userStatus = ($validate_email == 0) ? 1 : 0;
                                   
                $query = "insert into users SET
                    userName = '$username',
                    userPassword = password('$password'),
                    userStatus =$userStatus";

                mysql_query($query,$con);   
               
                if(mysql_errno() == 0)   
                {   
                    $uniqueId = (uniqid($username));
                    $email = sanitize_variable($_REQUEST['email']);   
                    $firstname = sanitize_variable($_REQUEST['firstname']);   
                    $lastname = sanitize_variable($_REQUEST['lastname']);   
                    $userid = mysql_insert_id();
                    $ip = sanitize_variable($_SERVER['REMOTE_ADDR']);
                    /*
                    * create the profile
                    */
                    $query = "insert into userProfile SET
                            userId = $userid,
                            userFirstName = '$firstname',
                            userLastName= '$lastname',
                            userEmail = '$email',
                            userValidationKey = '$uniqueId',
                            userIP = '$ip',
                            userSignUp = now()";
                   
                    mysql_query($query,$con);   
                    //echo mysql_error();
               
                    if(mysql_errno() == 0)
                    {
                        require("thanks.txt");
                        $f = join("",file("welcome-email.txt"));
                           
                        /* generate formatted message */
                        if($validate_email)
                        {
                            $link = "$site_url" ."members/validate.php?key=$uniqueId";
                            $message = sprintf($f,"$firstname $lastName",$link,$site_url);
                            mail($email,"$site_name medlemskab bekræftelse",$message,"From: $member_service_email\n");
                        }
                        else
                        {
                            if($welcome_email == 1)
                            {
                                $message = sprintf($f,"$firstname $lastName",$site_url);
                                mail($email,"$site_name medlemskab bekræftelse",$message,"From: $member_service_email\n");
                            }
                        }
                    }
                    else
                    {   
                        //echo mysql_error();
                        echo "     <script type=\"text/javascript\">
                                alert(\"Det valgte brugernavn er optaget!\");
                                </script>";
                        require("signup.txt");                 
                    }   
                }
                else
                {   
                    //echo mysql_error();
                    echo "     <script type=\"text/javascript\">
                                alert(\"Det valgte brugernavn er optaget!\");
                                </script>";
                    require("signup.txt");                 
                }   
            }
            else   
            {   
                echo "     <script type=\"text/javascript\">
                                alert(\"Fejl. Du skal tillade cookies! Kan du ikke løse problemet, kontakt venligst webmaster@blabla.dk\");
                                </script>";
                require("signup.txt");                 
            }
        }
    }
}
?>
Avatar billede JJ77 Juniormester
17. november 2006 - 15:28 #11
før så følgende linie sådan ud: $uniqueId = md5(uniqid($username))
Avatar billede labisama Nybegynder
17. november 2006 - 15:28 #12
$uniqueId = md5($username);
$uniqueId = substr($uniqueId, 0, 12);
Avatar billede JJ77 Juniormester
17. november 2006 - 15:29 #13
Det er da også noget "#"#¤¤% at nogle emailprogrammer ikke kan håndtere en url som er lang..
Avatar billede JJ77 Juniormester
17. november 2006 - 15:30 #14
vil du ikke venligst forklare hvad følgende præcis gør?

$uniqueId = substr($uniqueId, 0, 12);
Avatar billede labisama Nybegynder
17. november 2006 - 15:30 #15
I mine aktiveringsmails.

Der laver jeg en URL som du er igang med. Og samtidigt skriver jeg aktiveringskoden og brugerid - så det er muligt manuelt at aktivere sig.
Avatar billede labisama Nybegynder
17. november 2006 - 15:31 #16
$uniqueId = md5($username); //Laver md5 hash kode
$uniqueId = substr($uniqueId, 0, 12); //Afkorter md5 hash koden til 12 tegn
Avatar billede JJ77 Juniormester
17. november 2006 - 15:32 #17
vil det sige at de skal stå lige efter hinanden, eller skal den første skiftes ud med den nye?
Avatar billede labisama Nybegynder
17. november 2006 - 15:37 #18
Lige efter hinanden, og istedet for:

$uniqueId = (uniqid($username));
Avatar billede JJ77 Juniormester
17. november 2006 - 15:38 #19
og hvorfor har du fjernet(uniqid)  -  md5(uniqid($username));
Avatar billede labisama Nybegynder
17. november 2006 - 15:45 #20
Fordi jeg kan ikke lige se hvad du skal bruge det til?
Avatar billede JJ77 Juniormester
17. november 2006 - 15:51 #21
ok.. takker mange gange.. det ladet til at funke nu :-) .. smider du ikke et svar labisama :-)
Avatar billede labisama Nybegynder
17. november 2006 - 15:54 #22
Det lyder godt :)
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