Avatar billede tobbersecondary Nybegynder
30. januar 2008 - 19:17 Der er 4 kommentarer og
3 løsninger

PHP & MySQL profil-login

Jeg er igang med at udvikle et databasestyret website (PHP & MySQL) og er stødt på et problem.
Jeg skal lave et login-system, som giver alle godkendte brugere adgang til hver deres unikke profil.
Jeg kan godt lave et login-system, som giver mange brugere adgang til den samme admin-side (med samme indhold), men kan ikke gennemskue, hvordan jeg samtidig henter indholdet af fx et bestemt id op på siden afhængigt af, hvem der logger ind.

Jeg foretrækker en løsning med brug af session id.
Håber, nogen kan hjælpe.
Avatar billede supersquirrel Nybegynder
30. januar 2008 - 19:39 #1
Som jeg forstår det, vil du finde brugerens id, og derefter trække et indhold ud der kun er ment til det id?
Avatar billede tobbersecondary Nybegynder
30. januar 2008 - 19:55 #2
Ja!
For at gøre det simpelt kunne man forestille sig en MySQL-database med 2 tabeller:

Tabel 1: brugernavn + password
Tabel 2: profil

Når brugere logger på med navn + password fra tabel 1, skal have adgang til samme admin-side, men med forskelligt indhold fra en bestemt id i tabel 2.


Håber, dette giver mening.
Avatar billede rosvall Nybegynder
31. januar 2008 - 20:03 #3
Der er ingen grund til at bruge to tabeller til login/profil, hvis du kan nøjes med en række pr. profil
Lav dig en tabel i stil med

CREATE TABLE brugere (
  brugerid INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  pwhash VARCHAR(41) NOT NULL ,
  brugernavn VARCHAR( 128 ) NOT NULL ,
  profildata1 WHATEVER ,
  profildata2 WHATEVER ,
  ...
  UNIQUE (
      brugernavn
  )
)

Nye brugere indsættes med
INSERT INTO brugere
SET brugernavn = '$nyt_brugernavn', pwhash = PASSWORD('$nyt_password') ...

Og loginforsøg tjekkes med
SELECT brugerid
WHERE brugernavn = '$indtastet_og_renset_brugernavn' AND pwhash = PASSWORD('$indtastet_og_renset_password')

Du kan så lave dig et script i stil med
<?
session_start();
if($_SESSION['brugerid'])
  $logged_in = true;
else
  $logged_in = false;

// evt. if(!$logged_in) header('Location: URL-til-login-side');
?>
...og require()'e det, på alle sider du vil have beskyttet.

Din loginside laver du med

<?
if($indtastet_brugernavn && $indtastet_password){
  $indtastet_og_renset_brugernavn = mysql_escape_string($indtastet_brugernavn);
  $indtastet_og_renset_password = mysql_escape_string($indtastet_password);
  // brug ovenstående sql-sætning til at teste om login-info passer
  // lav evt. en header('Location: URL-til-beskyttet-side');
}else{
  // vis side med <form> til indtastning af brugernavn/password
}

?>



Nu er der en eller anden pengegrisk narrehat, der vil have at jeg skal betale for at få et større felt at skrive mit svar i, så jeg har umiddelbart svært ved at overskue mit svar. Jeg håber det er tilstrækkeligt.
Avatar billede rosvall Nybegynder
31. januar 2008 - 20:04 #4
Nåja, du vil selvfølgelig sætte $_SESSION['brugerid'] på din loginside, når du har testet brugernavn/password.
Avatar billede rosvall Nybegynder
31. januar 2008 - 20:06 #5
Og hvis du vil have en funktion til at logge ud, skal du bare bruge
unset($_SESSION['brugerid']);
Avatar billede rosvall Nybegynder
31. januar 2008 - 20:18 #6
Når du senere laver tabeller med forskelligt brugergeneret data, vil du have stor glæde af at JOIN'e tabellen med brugergenereret data med din bruger-tabel, så du får brugernavn og anden profil-info med i et hug.
Se http://en.wikipedia.org/wiki/JOIN
Et relevant eksempel er, hvis du laver et forum, og har en tabel med indlæg, med kolonnerne:
brugerid INT NOT NULL PRIMARY KEY,
traadid INT NOT NULL PRIMARY KEY,
indlaegid INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
tidspunkt ...,
tekst ...

Så kan du JOIN'e tabellen brugerid og forum_indlaeg således:
SELECT b.brugernavn, b.profildata1, fi.tidspunkt, fi.tekst
FROM brugere AS b
JOIN forum_indlaeg AS fi ON fi.brugerid = b.brugerid




OBS: Der er nok trykfejl og tanketorsk i det hele, da intet er testet!
Avatar billede tobbersecondary Nybegynder
02. maj 2008 - 16:15 #7
Undskyld den lange svartid...
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