26. januar 2009 - 23:46Der 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());
} // 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();
///////////////////////////////////// // 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.
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 ? :)
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. :-)
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 :)
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.