Avatar billede Jakie Juniormester
21. april 2011 - 18:58 Der er 19 kommentarer og
1 løsning

Php - Registrering, problemer? Søger lidt hjælp!

Hej Eksperter.

Jeg er nybegynder indenfor php, og har brug for lidt hjælp. ER igang med et tilmeldelse system af brugere. problemet er at mit kode ikke virker.

problemet er, hvis jeg skriver mit kodeord med 8 bogstaver, udskriver den at mit kodeord ikke må være længere end 20 bogstaver eller cifre.

Nogen der kan hjælpe?

Tak for hjælpen.

kode:


<?php
   
   
    //Skal bruge forbindelse til databasen først
    require_once('database.php');
   
    //Array til at liste fejlene
    $errmsg_arr = array();
   
    //Validering flag
    $errflag = false;
   
    //forbinder til mysql server
    $link = mysql_connect($server, $user, $pass);
    if(!$link) {
        die('Failed to connect to server: ' . mysql_error());
    }
   
    //vælger database
    $database = mysql_select_db($db);
    if(!$database) {
        die("Unable to select database");
    }
   
    //SQL indtrangen
    function clean($str) {
        $str = @trim($str);
        if(get_magic_quotes_gpc()) {
            $str = stripslashes($str);
        }
        return mysql_real_escape_string($str);
    }
       
    //Gennemgår POST
    $brugernavn = clean($_POST['brugernavn']);
    $email = clean($_POST['email']);
    $password = clean($_POST['password']);
    $repeatpassword = clean($_POST['repeatpassword']);
   
    //Input validering
    if($brugernavn == '') {
        $errmsg_arr[] = 'Brugernavn mangler at blive udfyldt';
        $errflag = true;
    }
    if($brugernavn > 20) {
        $errmsg_arr[] = 'Brugernavnet må ikke være længere end 20 bogstaver eller cifre';
        $errflag = true;
    }
    if($brugernavn < 6) {
        $errmgs_arr[] = 'Brugernavnet må ikke være mindre end 6 cifre eller bogstaver';
        $errflag = true;
    }
    if($email == '') {
        $errmsg_arr[] = 'Email mangler at blive udfyldt.';
        $errflag = true;
    }
    if($email > 255) {
        $errmsg_arr[] = 'Email må være længere end 255 cifre eller bogstaver.';
        $errflag = true;
    }   
    if($password == '') {
        $errmsg_arr[] = 'Kodeord mangler at blive udfyldt.';
        $errflag = true;
    }
    if($password > 20) {
        $errmsg_arr[] = 'Kodeordet må ikke være længere end 20 cifre eller bogstaver.';
        $errflag = true;
    }
    if($password < 6) {
        $errmsg_arr[] = 'kodeordet må ikke være kortere end 6 cifre eller bogstaver.';
        $errflag = true;
    }
    if($repeatpassword == '') {
        $errmsg_arr[] = 'Bekræft kodeord manlger at blive udfyldt.';
        $errflag = true;
    }
    if( strcmp($password, $repeatpassword) != 0 ) {
        $errmsg_arr[] = 'Kodeorderne matcher ikke hinanden. ';
        $errflag = true;
    }
   
    //Checker for for samme login ID
    if($login != '') {
        $qry = "SELECT * FROM users WHERE username='$username'";
        $result = mysql_query($qry);
        if($result) {
            if(mysql_num_rows($result) > 0) {
                $errmsg_arr[] = 'Login ID er allerede i brug. Prøv igen.';
                $errflag = true;
            }
            @mysql_free_result($result);
        }
        else {
            die("Query failed");
        }
    }
   
   
   
    if($errflag) {
        $_SESSION['ERRMSG_ARR'] = $errmsg_arr;
        session_write_close();
        header("location: register-form.php");
        exit();
    }

   
    $qry = "INSERT INTO users(brugernavn, email, password) VALUES('$username','$email','".md5($_POST['password'])."')";
    $result = @mysql_query($qry);
   
   
    if($result) {
        header("location: register-success.php");
        exit();
    }else {
        die("Query failed");
    }

?>
Avatar billede rix Praktikant
21. april 2011 - 19:19 #1


<?php
 
 
    //Skal bruge forbindelse til databasen først
    require_once('database.php');
 
    //Array til at liste fejlene
    $errmsg_arr = array();
 
    //Validering flag
    $errflag = false;
 
    //forbinder til mysql server
    $link = mysql_connect($server, $user, $pass);
    if(!$link) {
        die('Failed to connect to server: ' . mysql_error());
    }
 
    //vælger database
    $database = mysql_select_db($db);
    if(!$database) {
        die("Unable to select database");
    }
 
    //SQL indtrangen
    function clean($str) {
        $str = @trim($str);
        if(get_magic_quotes_gpc()) {
            $str = stripslashes($str);
        }
        return mysql_real_escape_string($str);
    }
     
    //Gennemgår POST
    $brugernavn = clean($_POST['brugernavn']);
    $email = clean($_POST['email']);
    $password = clean($_POST['password']);
    $repeatpassword = clean($_POST['repeatpassword']);
 
    //Input validering
    if($brugernavn == '') {
        $errmsg_arr[] = 'Brugernavn mangler at blive udfyldt';
        $errflag = true;
    }
    if($brugernavn > 20) {
        $errmsg_arr[] = 'Brugernavnet må ikke være længere end 20 bogstaver eller cifre';
        $errflag = true;
    }
    if($brugernavn < 6) {
        $errmgs_arr[] = 'Brugernavnet må ikke være mindre end 6 cifre eller bogstaver';
        $errflag = true;
    }
    if($email == '') {
        $errmsg_arr[] = 'Email mangler at blive udfyldt.';
        $errflag = true;
    }
    if($email > 255) {
        $errmsg_arr[] = 'Email må være længere end 255 cifre eller bogstaver.';
        $errflag = true;
    } 
    if($password == '') {
        $errmsg_arr[] = 'Kodeord mangler at blive udfyldt.';
        $errflag = true;
    }
    if(strlen($password) > 20) {
        $errmsg_arr[] = 'Kodeordet må ikke være længere end 20 cifre eller bogstaver.';
        $errflag = true;
    }
    if(strlen($password) < 6) {
        $errmsg_arr[] = 'kodeordet må ikke være kortere end 6 cifre eller bogstaver.';
        $errflag = true;
    }
    if($repeatpassword == '') {
        $errmsg_arr[] = 'Bekræft kodeord manlger at blive udfyldt.';
        $errflag = true;
    }
    if( strcmp($password, $repeatpassword) != 0 ) {
        $errmsg_arr[] = 'Kodeorderne matcher ikke hinanden. ';
        $errflag = true;
    }
 
    //Checker for for samme login ID
    if($login != '') {
        $qry = "SELECT * FROM users WHERE username='$username'";
        $result = mysql_query($qry);
        if($result) {
            if(mysql_num_rows($result) > 0) {
                $errmsg_arr[] = 'Login ID er allerede i brug. Prøv igen.';
                $errflag = true;
            }
            @mysql_free_result($result);
        }
        else {
            die("Query failed");
        }
    }
 
 
 
    if($errflag) {
        $_SESSION['ERRMSG_ARR'] = $errmsg_arr;
        session_write_close();
        header("location: register-form.php");
        exit();
    }

 
    $qry = "INSERT INTO users(brugernavn, email, password) VALUES('$username','$email','".md5($_POST['password'])."')";
    $result = @mysql_query($qry);
 
 
    if($result) {
        header("location: register-success.php");
        exit();
    }else {
        die("Query failed");
    }

?>

prøv dette her
info:
brug strlen() hvis du ville finde ud af hvormange tegn der er i en væriabel
Avatar billede rix Praktikant
21. april 2011 - 19:21 #2
ups :( rettelse

<?php


    //Skal bruge forbindelse til databasen først
    require_once('database.php');

    //Array til at liste fejlene
    $errmsg_arr = array();

    //Validering flag
    $errflag = false;

    //forbinder til mysql server
    $link = mysql_connect($server, $user, $pass);
    if(!$link) {
        die('Failed to connect to server: ' . mysql_error());
    }

    //vælger database
    $database = mysql_select_db($db);
    if(!$database) {
        die("Unable to select database");
    }

    //SQL indtrangen
    function clean($str) {
        $str = @trim($str);
        if(get_magic_quotes_gpc()) {
            $str = stripslashes($str);
        }
        return mysql_real_escape_string($str);
    }
   
    //Gennemgår POST
    $brugernavn = clean($_POST['brugernavn']);
    $email = clean($_POST['email']);
    $password = clean($_POST['password']);
    $repeatpassword = clean($_POST['repeatpassword']);

    //Input validering
    if($brugernavn == '') {
        $errmsg_arr[] = 'Brugernavn mangler at blive udfyldt';
        $errflag = true;
    }
    if(strlen($brugernavn) > 20) {
        $errmsg_arr[] = 'Brugernavnet må ikke være længere end 20 bogstaver eller cifre';
        $errflag = true;
    }
    if(strlen($brugernavn) < 6) {
        $errmgs_arr[] = 'Brugernavnet må ikke være mindre end 6 cifre eller bogstaver';
        $errflag = true;
    }
    if($email == '') {
        $errmsg_arr[] = 'Email mangler at blive udfyldt.';
        $errflag = true;
    }
    if($email > 255) {
        $errmsg_arr[] = 'Email må være længere end 255 cifre eller bogstaver.';
        $errflag = true;
    }
    if($password == '') {
        $errmsg_arr[] = 'Kodeord mangler at blive udfyldt.';
        $errflag = true;
    }
    if(strlen($password) > 20) {
        $errmsg_arr[] = 'Kodeordet må ikke være længere end 20 cifre eller bogstaver.';
        $errflag = true;
    }
    if(strlen($password) < 6) {
        $errmsg_arr[] = 'kodeordet må ikke være kortere end 6 cifre eller bogstaver.';
        $errflag = true;
    }
    if($repeatpassword == '') {
        $errmsg_arr[] = 'Bekræft kodeord manlger at blive udfyldt.';
        $errflag = true;
    }
    if( strcmp($password, $repeatpassword) != 0 ) {
        $errmsg_arr[] = 'Kodeorderne matcher ikke hinanden. ';
        $errflag = true;
    }

    //Checker for for samme login ID
    if($login != '') {
        $qry = "SELECT * FROM users WHERE username='$username'";
        $result = mysql_query($qry);
        if($result) {
            if(mysql_num_rows($result) > 0) {
                $errmsg_arr[] = 'Login ID er allerede i brug. Prøv igen.';
                $errflag = true;
            }
            @mysql_free_result($result);
        }
        else {
            die("Query failed");
        }
    }



    if($errflag) {
        $_SESSION['ERRMSG_ARR'] = $errmsg_arr;
        session_write_close();
        header("location: register-form.php");
        exit();
    }


    $qry = "INSERT INTO users(brugernavn, email, password) VALUES('$username','$email','".md5($_POST['password'])."')";
    $result = @mysql_query($qry);


    if($result) {
        header("location: register-success.php");
        exit();
    }else {
        die("Query failed");
    }

?>
Avatar billede Jakie Juniormester
21. april 2011 - 19:37 #3
Tak for dit hurtige svar :)

Det lykkedes. Problemet er nu bare at Query failed :P
Avatar billede rix Praktikant
21. april 2011 - 19:46 #4
skift

//Checker for for samme login ID
    if($login != '') {
        $qry = "SELECT * FROM users WHERE username='$username'";
        $result = mysql_query($qry);
        if($result) {
            if(mysql_num_rows($result) > 0) {
                $errmsg_arr[] = 'Login ID er allerede i brug. Prøv igen.';
                $errflag = true;
            }
            @mysql_free_result($result);
        }
        else {
            die("Query failed");
        }
    }

ud med dette

//Checker for for samme login ID
    if($login != '') {
        $qry = "SELECT * FROM users WHERE username='$username'";
        $result = mysql_query($qry) OR DIE(mysql_error());
        if($result) {
            if(mysql_num_rows($result) > 0) {
                $errmsg_arr[] = 'Login ID er allerede i brug. Prøv igen.';
                $errflag = true;
            }
            @mysql_free_result($result);
        }
        else {
            die("Query failed");
        }
    }

og skriv hvad du får ud af det ?
Avatar billede Jakie Juniormester
21. april 2011 - 20:11 #5
Jeg får det samme - stadig query failed :)

Det er den sidste query, hvis man kan sige det sådan.
Avatar billede rix Praktikant
22. april 2011 - 10:29 #6
hmm så prøv at erstate dette


    $qry = "INSERT INTO users(brugernavn, email, password) VALUES('$username','$email','".md5($_POST['password'])."')";
    $result = @mysql_query($qry);

med


    $qry = "INSERT INTO users(brugernavn, email, password) VALUES('$username','$email','".md5($_POST['password'])."')";
    $result = @mysql_query($qry)OR DIE(mysql_error());
Avatar billede Jakie Juniormester
22. april 2011 - 11:52 #7
Tak Rix, fik rettet fejlen.

Bare et nyt problem.

Cannot modify header information - headers already sent by

?? :)
Avatar billede rix Praktikant
22. april 2011 - 13:35 #8
det skriver den for det meste når du udskriver noget til browseren
F.eks
<?php
$etellerandet = "et eller andet";
echo $etellerandet;
header("location: register-form.php");
exit();
?>
der ville du få den fejl medelse
det skulle så f.eks ændres til
<?php
$etellerandet = "et eller andet";
echo $etellerandet;
header("location: register-form.php");
exit();
echo $etellerandet;
?>

men kan du ikke lige skrive hele fejl medelsen for den siger vel noget med
on line 0
Avatar billede Jakie Juniormester
23. april 2011 - 00:39 #9
Jo er ikke lige på min rigtige computer, så kan ikke angive linje nummer, men kan give stedet :)

Fejlen er ved den linje, hvor der står:  header("location: register-success.php");
Avatar billede Jakie Juniormester
23. april 2011 - 16:45 #10
Okay fik det lavet ved bare at sige echo istedet for location osv :)

Problemet er nu bare at jeg kan oprette den samme bruger med det samme brugernavn :)


Hvordan får jeg lige rettet det :)

Forresten du skal nok få point :)
Avatar billede rix Praktikant
23. april 2011 - 21:06 #11
okey det forstod jeg ikke men hvis du fik det til at virke så er det jo fint :D
prøv at skifte dette her ud

if(mysql_num_rows($result) > 0) {

med

if(mysql_num_rows($result) != 0) {
Avatar billede Jakie Juniormester
24. april 2011 - 01:06 #12
Det virkede desværre ikke:)
Avatar billede rix Praktikant
24. april 2011 - 01:32 #13
damm nogen gange kan man se sig blind :D
du gemmer post væriabel i $brugernavn altså sådan her

    $brugernavn = clean($_POST['brugernavn']);

men du søger efter en brugernavn med en anden væriabel nemlig $username i

$qry = "SELECT * FROM users WHERE username='$username'";

så du skal altså ændre den til

$qry = "SELECT * FROM users WHERE username='".$brugernavn."'";

og så burde det virke :D
Avatar billede Jakie Juniormester
24. april 2011 - 11:09 #14
Uha det havde jeg ikke set :D

Det virker bare stadig ikke :D

Er der nogen andre måder man kan gøre det på?
Avatar billede rix Praktikant
24. april 2011 - 11:14 #15
hehehe dette har jeg også lige set
du efterspøger om brugernavnet er taget med denne sql

"SELECT * FROM users WHERE username='$brugernavn'";

og sætter data fra den nye bruger ind i

$qry = "INSERT INTO users(brugernavn, email, password) VALUES('$username','$email','".md5($_POST['password'])."')";

som jeg kan se er det den samme tabel men to forseklige navne som brugernavnet bliver sat ind i den ene heder username og den anden heder brugernavn :D
Avatar billede Jakie Juniormester
24. april 2011 - 11:28 #16
Er det så..


$qry = "INSERT INTO users(username, email, password) VALUES('$brugernavn','$email','".md5($_POST['password'])."')";
$result = @mysql_query($qry)OR DIE(mysql_error());

Men der skal vel ikke laves noget om på den? :)
$qry = "SELECT * FROM users WHERE username='$brugernavn'";
Avatar billede rix Praktikant
24. april 2011 - 11:57 #17
hvis du gemmer dine brugres brugernavn i username så skal du ikke ændre denne

$qry = "SELECT * FROM users WHERE username='$brugernavn'";
Avatar billede Jakie Juniormester
24. april 2011 - 17:04 #18
Godt nok :)

Jeg må prøve at finde en løsning på det andet problem. Det virker stadig ikke.

Du får hvert fald pointene. :D
Avatar billede rix Praktikant
24. april 2011 - 17:11 #19
det andet problem?
Avatar billede Jakie Juniormester
24. april 2011 - 17:27 #20
Jeg kan stadig oprette den samme bruger :)

Altså, jeg kan stadig oprette en bruger, der har det samme brugernavn som en anden bruger.
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
Kurser inden for grundlæggende programmering

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