Avatar billede cronaldo Nybegynder
26. januar 2009 - 23:46 Der er 10 kommentarer og
1 løsning

Array problemer når den skal overføres mellem 2 funktioner

Her eksperter, jeg har flg. funktioner, men den opretter ikke sessions.. Den udskriver teksten med "Du er nu logget ind som:" men intet brugernavn..
Kan I fortælle mig, hvad der er galt - og evt. nogle punkter jeg kan forbedre mine funktioner?



function getUserData()
{
   
    global $usernameLogInName, $passwordLogInPass, $password;
   
    IF($_POST['action'] == "login"){
        IF(!empty($usernameLogInName) AND !empty($passwordLogInPass)){
            $resultLogInUser9987 = mysql_query("SELECT * FROM login WHERE brugernavn = \"$usernameLogInName\" AND kodeord = \"$passwordLogInPass\" ORDER BY id DESC LIMIT 1") or die(mysql_error());
   
            $numresultLogInUser9987 = mysql_num_rows($resultLogInUser9987);   
       
            IF($numresultLogInUser9987 > 0){
                while($row = mysql_fetch_array($resultLogInUser9987)){
                   
                    $userInfo[$row['id']] = Array (
                        'id'            => $row['id'],
                        'brugernavn'    => $row['brugernavn'],
                        'niveau'        => $row['niveau'],
                        'adminniv'        => $row['adminniv'],
                        'virkniv'        => $row['virkniv'],
                        'grafikniv'        => $row['grafikniv'],
                        'kontotype'        => $row['kontotype'],
                        'banned'        => $row['banned'],
                        'sidstelogin'    => $row['sidstelogin']
                    );
                   
                    logInUser();
                   
                } // end of while loop
            } ELSE { // Check if there was any hits from the database
                echo "De indtastede data blev ikke matchet i databasen, prøv igen!";
            }
        } ELSE {
            /////////////////////////////////////
            // If one of the input's is not filled!
            //
           
            echo "Du har glemt at udfylde brugernavn eller kodeord. Prøv igen!";
           
            // end of the check about input's
            /////////////////////////////////////
        }
    } ELSE IF($_GET['action'] == "logout"){
        logUserOut();
    }
   
    global $userInfo;
}

function logInUser()
{
    global $usernameLogInName, $passwordLogInPass, $password;
    global $userInfo;
   
    foreach ((array) $userInfo as $userData){

        /////////////////////////////////////
        // If the user is not banned create sessions
        //
        $_SESSION['profilid'] = $userData['id'];
        $_SESSION['status'] = "login";
        $_SESSION['brugernavn'] = $userData['brugernavn'];
        $_SESSION['banned'] = $userData['banned'];
        $_SESSION['kontotype'] = $userData['kontotype'];
        $_SESSION['niveau'] = $userData['niveau'];
        $_SESSION['adminniv'] = $userData['adminniv'];
        $_SESSION['grafikniv'] = $userData['grafikniv'];
        $_SESSION['virkniv'] = $userData['virkniv'];   
        $_SESSION['brugerip'] = getRealIpAddr();
       
        // End of create sessions
        //////////////////////////////////////
   
    }
   
    echo    "Du er nu logget ind som: ".$userData['brugernavn'];
    echo    "<br />";
    echo    "Siden dit sidste login er der: ";           
    echo    whatHasHappenedInForum();   

}
Avatar billede majbom Novice
27. januar 2009 - 08:11 #1
echo    "Du er nu logget ind som: ".$_SESSION['brugernavn'];
Avatar billede dkfire Nybegynder
27. januar 2009 - 08:48 #2
Drop alle de global og giv dine funktioner parametre i stedet.
Eller bedre lav en klasse til dit login.
Avatar billede coderdk Praktikant
27. januar 2009 - 09:51 #3
Hvad dkfire skrev! :)
Avatar billede cronaldo Nybegynder
27. januar 2009 - 10:59 #4
splazz: Har jeg prøvet - problemet er jo netop at sessionerne ikke bliver oprettet :)

dkfire: Hvordan vil dette se ud i praksis? :)
Avatar billede michael_stim Ekspert
27. januar 2009 - 11:02 #5
function getUserData($usernameLogInName, $passwordLogInPass, $password)

Kald:

getUserData('mitLoginNavn', 'PassOrd1', 'PassOrd2')
Avatar billede dkfire Nybegynder
27. januar 2009 - 13:15 #6
Og husk session_start() i toppen af din kaldte fil.
Avatar billede dkfire Nybegynder
27. januar 2009 - 13:24 #7
Og så er der noget kode jeg ikke lige har forstået.
Hvorfor gør du følgende:

while($row = mysql_fetch_array($resultLogInUser9987)){
                 
                    $userInfo[$row['id']] = Array (
                        'id'            => $row['id'],
                        'brugernavn'    => $row['brugernavn'],
                        'niveau'        => $row['niveau'],
                        'adminniv'        => $row['adminniv'],
                        'virkniv'        => $row['virkniv'],
                        'grafikniv'        => $row['grafikniv'],
                        'kontotype'        => $row['kontotype'],
                        'banned'        => $row['banned'],
                        'sidstelogin'    => $row['sidstelogin']
                    );

Og
foreach ((array) $userInfo as $userData){

        /////////////////////////////////////
        // If the user is not banned create sessions
        //
        $_SESSION['profilid'] = $userData['id'];
        $_SESSION['status'] = "login";
        $_SESSION['brugernavn'] = $userData['brugernavn'];
        $_SESSION['banned'] = $userData['banned'];
        $_SESSION['kontotype'] = $userData['kontotype'];
        $_SESSION['niveau'] = $userData['niveau'];
        $_SESSION['adminniv'] = $userData['adminniv'];
        $_SESSION['grafikniv'] = $userData['grafikniv'];
        $_SESSION['virkniv'] = $userData['virkniv']; 
        $_SESSION['brugerip'] = getRealIpAddr();
     
        // End of create sessions
        //////////////////////////////////////
 
    }

Når du nu kun henter en række fra database ud ??
mysql_query("SELECT * FROM login WHERE brugernavn = \"$usernameLogInName\" AND kodeord = \"$passwordLogInPass\" ORDER BY id DESC LIMIT 1")
Der er ingen ide i at bruge et dobbelt array når der kun er række som hentes.

Dernæst, hvorfor skrive "global $usernameLogInName, $passwordLogInPass, $password;" i
logInUser() når du ikke bruger de variabler i den funktion?

Du bør overveje at tage et skridt tilbage og starte med at tænke design af din koden, inden du koder videre. Lav en plan for de funktioner som du vil bruge og hvad de skal kunne, samt hvilke funktioner som kalder hvem. Så vil du hurtigt finde ud af hvordan du smartest indretter din kode.
Avatar billede cronaldo Nybegynder
28. januar 2009 - 13:46 #8
okay .. det er fordi jeg netop nu er begyndt at bruge funktioner :) så skal lige lære de programmeringsmæssige "sædvaner" :)
Men har dog også overvejet blot at sætte $_SESSION-oprettelsen ind i min while - det giver vel i princippet ingen forskel ? :)
Avatar billede dkfire Nybegynder
28. januar 2009 - 15:04 #9
Nej det gør ingen forskel for din kode.
Men jeg vil foreslå dig i at læse lidt mere om funktioner inden du går videre.

Dernæst kan dine navne for dine funktioner nok komme til at forvirre dig noget.
Du kan din funktion getUserData men du bruger den til at logge en bruger ind. Brug din logInUser til kun at logge brugere ind, dvs alt hvad der har med log ind at gøre, både tjek i databasem og gemme i session.
Funktionen getUserData skal måske kun hente bruger information og enten returnere eller vise informationen og ikke andet.
Der ved giver dine funktionsnavne mere mening og bedre kode. :-)
Avatar billede cronaldo Nybegynder
28. januar 2009 - 18:07 #10
okay :) ..
Jamen jeg vil gerne give dig point for det :)..
Det har givet mig en del :) .. Nu virker selve login delen .. så er der et par MYSQL-problemer desværre ;) .. men der kommer lige et nyt emne da de her point var tilegnet det andet spørgsmål :)

Mange tak, smid svar, dkfire :)
Avatar billede dkfire Nybegynder
28. januar 2009 - 18:29 #11
Jamen det var så lidt :-)
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