Avatar billede TheYaXxE Juniormester
09. november 2012 - 19:26 Der er 9 kommentarer og
1 løsning

Hvis info om logged-in user

Hey guys

Jeg er i gang med at oprette et login-system i php og mySQL og har fået det til at virke så man kan logge ind og ud osv.

meeen. Når en bruger er logget ind, vil jeg gerne have at man kan se info omkring den oprettede bruger, som fx. "min profil" side hvor ens oplysninger står.

Men hvordan pokker gør man lige dette?
Noget med at gemme brugeroplysninger i den session der bruges ved login eller hvad? :)

- Tak på forhånd :)
Avatar billede claes57 Ekspert
09. november 2012 - 19:46 #1
ud fra login så har du et unikt id (typisk fx id i tabellen med brugere), og den gemmes i session som det eneste.
Hvis værdien er tom, så er bruger ikke logget ind, og skal sendes til forsiden.
Ellers, så kan du bruge id til at læse brugerdata en gang til hvis de skal vises på den aktuelle side.
Avatar billede TheYaXxE Juniormester
09. november 2012 - 20:13 #2
Har prøvet at få id'et til at gemme i sessionen, men det er ikke lykkedes mig. Min session fil så således ud:

<?php
session_start();

if(!session_is_registered(adminemail)){
header("location:http://minside.dk/login");

}

$timeout = 20;
$logout_redirect_url = "http://minside.dk/login";

$timeout = $timeout * 60;
if (isset($_SESSION['start_time'])) {
    $elapsed_time = time() - $_SESSION['start_time'];
    if ($elapsed_time >= $timeout) {
        session_destroy();
        header("Location: $logout_redirect_url");
    }
}
$_SESSION['start_time'] = time();
?>
Avatar billede claes57 Ekspert
09. november 2012 - 20:22 #3
det er mere, hvad der sker i login - her er kun en timeout for admin.
Avatar billede TheYaXxE Juniormester
09. november 2012 - 20:50 #4
Sådan ser login siden ud:

<?php

if(isset($_POST['submit']))
{

// username and password sent from form
$adminemail=$_POST['adminemail'];
$adminpassword=$_POST['adminpassword'];

// To protect MySQL injection (more detail about MySQL injection)
$adminemail = stripslashes($adminemail);
$adminpassword = stripslashes($adminpassword);
$adminemail = mysql_real_escape_string($adminemail);
$adminpassword = mysql_real_escape_string($adminpassword);
$sql="SELECT * FROM member WHERE email='$adminemail' and password=SHA1('$_POST[adminpassword]')";
$result=mysql_query($sql);

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);

// If result matched $myusername and $adminpassword, table row must be 1 row
if($count==1){

// Register $myusername, $adminpassword and redirect to file "login_success.php"
session_register("adminemail");
session_register("adminpassword");
$id = $result['id'];
header("location:./");
}

else {
$wrong = '<span class="red">Forkert email eller password!</span>';
    }
}
?>


Der er også en connector fil i toppen af siden som forbinder en til mySQL. Den har jeg bare ikke lige taget med her..
Avatar billede claes57 Ekspert
09. november 2012 - 21:05 #5
det her er stadig kun admin, der logger ind - hvor logger brugere ind?
Hvis det er meningen at alle nye skal kunne logge ind, så skal du ned til
else {
$wrong = '<span class="red">Forkert email eller password!</span>';

det er så ikke nødvendigvis 'wrong' men bare ikke admin, der logger ind.
Avatar billede TheYaXxE Juniormester
09. november 2012 - 22:49 #6
Admin var bare noget jeg kaldte det for. Ved ikke hvorfor. Men kan stadig ikke få det der id med...
Avatar billede claes57 Ekspert
10. november 2012 - 08:47 #7
jf http://php.net/manual/en/function.session-register.php
<?php
// Use of session_register() is deprecated
$barney = "A big purple dinosaur.";
session_register("barney");

// Use of $_SESSION is preferred, as of PHP 4.1.0
$_SESSION["zim"] = "An invader from another planet.";


så det to linjer med
session_register("adminemail");
session_register("adminpassword");
skal moderniseres.
Avatar billede TheYaXxE Juniormester
10. november 2012 - 14:41 #8
fik det til at virke:

I login scriptet tilføjede jeg $_SESSION['adminemail']= $adminemail;

session_register("adminemail");
session_register("adminpassword");
$_SESSION['adminemail']= $adminemail;
header("location:./");


og der hvor jeg vil have brugerdata for den indloggede bruger til at vises skrev jeg dette:

<?php
if($_SESSION['adminemail'])
$result = mysql_query("SELECT * FROM member WHERE email = '$_SESSION[adminemail]'")
    or die(mysql_error()); 

    while($row = mysql_fetch_array( $result )) {
echo '<b>navn</b>' .$row['name'];
echo '<br>';
echo '<b>email:</b>' .$row['email'];
}
?>
Avatar billede claes57 Ekspert
10. november 2012 - 15:31 #9
de to linjer
session_register("adminemail");
session_register("adminpassword");
skal du bare slette - de laver ingenting.
Avatar billede pkdkk Nybegynder
11. november 2012 - 11:41 #10
Hvad med: print_r($_SESSION);
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

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