Avatar billede danco Nybegynder
10. september 2008 - 20:54 Der er 19 kommentarer og
1 løsning

Login system med brugere

Hejsa,,
jeg sidder og arbejder med et login system der differencere brugere.
Det vil sige, hver bruger vil blive sendt til en unik side.
Hvis bruger1 logger på vil han scriptet sende ham til side1 og hvis bruger2 logger på vil han komme til side2 osv.
jeg har pt. systemet til alm login. hvor hver bruger sendes til samme side. Derfor mangler jeg blot den funktion der sender brugeren til en unik side.
Derudover vil jeg gerne have side hvor jeg som admin kan oprette brugere og i den proces bestemme til hvilke sider de skal sendes.
Jeg håber meget at nogen af jer eksperter vil komme mig til undsætning.
Avatar billede moddi100 Seniormester
10. september 2008 - 21:16 #1
Det er ikke svært. Jeg går ud fra at du henter nogle oplysninger om brugeren et eller andet sted fra?
Det du gør, er bare at gemme navnet på den side de skal sendes til, sammen med brugerens andre oplysninger. Så sender du dem bare hen til den pågældende side.
Avatar billede danco Nybegynder
10. september 2008 - 21:27 #2
Moddi:
Jeg skal jo bruge en script del der via login oplysningerne identificere brugeren og automatisk sender vedkomne videre.
jeg kunne forstille mig det via en if() funktion, men dog uden jeg har andre ideer om hvordan det gøres.
Avatar billede Slettet bruger
11. september 2008 - 02:54 #3
Hvis du har dine oplsyninger for brugerne i en database, så laver du et felt der f.eks. hedder redirectPage eller bare page, alt efter hvad du ønsker, med datatypen varchar(x) her ændre du x til det antal tegn du maks kommer til at bruge, kunne være 15.

Men hvorfor hver sin side, og ikke en der ligner de andre med forskellige oplysninger på?
Hvor mange brugere skal systemet kunne rumme? Hvis det bare er 4-5 stykker er det ikke et problem med din måde, men går hen og bliver mere langhåret hvis du skal ha' 250+ brugere eller i den dur.

Men hvis du evt. kan vise lidt kode fra dit login, så kan vi kigge på hvordan det skal flettes ind.
Avatar billede moddi100 Seniormester
11. september 2008 - 07:31 #4
Hvis vi siger at du har en database med alle oplysningerne om brugeren. I den har du så også lavet et felt der hedder 'Forside'. Bruger 1 har side 17 som forside, Bruger 3 har side 5 som forside osv. I rækken med bruger 1's data, står der altså 'side17.php' i feltet forside.

Så kan du bare hente feltet Forside's indhold og så laver du noget i stil med
<?php header("Location: " . $forside_fra_db); ?>
Avatar billede moddi100 Seniormester
11. september 2008 - 07:37 #5
Hvis det ikke er nok, må du vise noget af din login kode, som gtax87 også siger.
Avatar billede danco Nybegynder
11. september 2008 - 09:57 #6
hej alle ,,

tak for jeres hurtige svar, jeg paster lidt af min kode herunde for at give jer et bedre indblik i det hele.

CREATE TABLE `members` (
`id` int(4) NOT NULL auto_increment,
`username` varchar(65) NOT NULL default '',
`password` varchar(65) NOT NULL default '',
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=2 ;

--
-- Dumping data for table `members`
--

INSERT INTO `members` VALUES (1, 'DIT NAVN', 'DIT PASSWORD');

og herunder er min Checklogin.php

<?php
ob_start();
$host=""; // Host name
$username="xx"; // Mysql username
$password="xx"; // Mysql password
$db_name=""xx; // Database name
$tbl_name="xx"; // Table name


// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

// Define $myusername and $mypassword
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];

// encrypt password
$encrypted_mypassword=md5($mypassword);


$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row

if($count==1){
// Register $myusername, $mypassword and redirect to file "login_success.php"
session_register("myusername");
session_register("mypassword");
header("location:login_success.php");
}
else {
echo "Forkert brugernavn eller kodeord";
}

ob_end_flush();
?>
Avatar billede Slettet bruger
11. september 2008 - 13:48 #7
Du kan tilføje evt. hvis det skal være en side de skal sendes til:
CREATE TABLE..... (
{....}
`page` varchar(65) NOT NULL default '',
) TYPE=MyISAM AUTO_INCREMENT=2 ;


Disse 2 linjer ville jeg ændre.

$mypassword=$_POST['mypassword'];

// encrypt password
$encrypted_mypassword=md5($mypassword);

Så ledes at du ikke har en ukrypteret $password "læggende", ville ændre $mypassword = md5($_POST['mypassword']);

Forstår ikke rigtigt hvorfor du kryptere det, du bruger det jo ikke rigtig til noget; En idé ville være at ha' passwordsene i databasen krypteret også, og så tjekke op mod dette i stedet.


Du kan så her tilføje $row = mysql_fetch_array($result);

$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);


SÅ kan vi i din if($count.....) {
//brug dataen fra databasen
//$row['page']; kunne så være den nye direct side.
header("location:login_success.php");
}
Avatar billede danco Nybegynder
11. september 2008 - 15:28 #8
qtax;
Jeg forestiller mig noget lign dit forslag. At oprette en række i databasen hvori der gemmes siden brugeren skal sendes til.
Men er det ikke muligt at ændre checklogin.php således at den identificere login oplysninger og så sender til siden der er registreret til brugeren.

Det er den specifikke kodning jeg er i tvivl om.

Jeg kan forstå at nedenstående kodedel siger at hvis brugernavn og password er korrekt sendes brugeren til login_succes.php

if($count==1){
// Register $myusername, $mypassword and redirect to file "login_success.php"
session_register("myusername");
session_register("mypassword");
header("location:login_success.php");
}
else {
echo "Forkert brugernavn eller kodeord";

så det der skal ændres er vel "bare" den location der sendes til.
Som du nok allerede kan se er jeg ikke så erfaren med php.
Avatar billede danco Nybegynder
11. september 2008 - 15:31 #9
-------UPDATE TIL SPØRGSMÅL--------

Denne system skal bruges til at mine brugere kan logge ind og se den hjemmeside jeg udvikler for dem.
Den store sikkerhed er derfor næppe nødvendig men dog heller ikke ren "HTML eller Javascript agtigt"
Avatar billede moddi100 Seniormester
11. september 2008 - 15:37 #10
Koden kunne se sådan ud:

// Define $myusername and $mypassword
if(get_magic_quotes_gpc()) // Hvis der automatisk tilføjes slashes til specialtegn, fjern dem da.
{
$myusername=stripslashes($_POST['myusername']);
$mypassword=stripslashes(md5($_POST['mypassword'])); // Krypter også password
} else {
$myusername=$_POST['myusername'];
$mypassword=md5($_POST['mypassword']); // Krypter også password
}

// Escape alle specialtegn i querien også. Så får du ikke så mange uheldige overraskelse i form af hacking.
$sql="SELECT * FROM $tbl_name WHERE username='" . mysql_real_escape_string($myusername) . "' and password='" . mysql_real_escape_string($mypassword) . "'";
$result=mysql_query($sql);

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

// Hent brugerens forside
$row = mysql_fetch_array($result);

// If result matched $myusername and $mypassword, table row must be 1 row

if($count==1){
// Register $myusername, $mypassword and redirect to file "login_success.php"
session_register("myusername");
session_register("mypassword"); // Jeg ville personligt aldrig gemme et password i f.eks. sessions.
header("location:" . $row['page']);
exit;
}
else {
echo "Forkert brugernavn eller kodeord";
}


Variablen $row['page'] skulle gerne indeholde indholdet fra feltet i din database med samme navn. Bemærk der er forskel på store og små bogstaver
Avatar billede danco Nybegynder
11. september 2008 - 15:49 #11
Så det du siger er at jeg kan erstatte min oprindelige kode med denne bid ,, så vil brugeren blive sendt til den side jeg har i databasen uder "page" ?
Avatar billede moddi100 Seniormester
11. september 2008 - 15:51 #12
ja, du skal dog også kryptere alle password i databasen med md5
Avatar billede moddi100 Seniormester
11. september 2008 - 15:52 #13
Hvis du har nogle du skal have krypteret er her en side:
http://www.hjemmesideskolen.dk/scripts/phppass/kryptering.php
Avatar billede danco Nybegynder
11. september 2008 - 17:12 #14
Mange tak for hjælpen,

du får de 60 point, men hvordan kan jeg lave et form der smider oplysningerne ind i databasen.
hvis det kan lade sig gøre vil jeg jo være i stand til at lave nye brugere ved at logge ind på den side :)
Avatar billede moddi100 Seniormester
11. september 2008 - 18:04 #15
Adminkode: (VIGTIGT: Kun du skal have adgang til denne!)

admin.php
<?php
$host=""; // Host name
$username="xx"; // Mysql username
$password="xx"; // Mysql password
$db_name=""xx; // Database name
$tbl_name="xx"; // Table name


// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

if(isset($_POST['submit']))
{
  if(get_magic_quotes_gpc())
  {
    $brugernavn = stripslashes($_POST['nybruger_brugernavn']);
    $password = md5(stripslashes($_POST['nybruger_password']));
    $page = stripslashes($_POST['nybruger_page']);
  } else {
    $brugernavn = $_POST['nybruger_brugernavn'];
    $password = md5($_POST['nybruger_password']);
    $page = $_POST['nybruger_page'];
  }
 
  $sql = "INSERT INTO $tbl_name (username, password, page) VALUES ('" . mysql_real_escape_string($brugernavn) . "', '" . mysql_real_escape_string($password) . "', '" . mysql_real_escape_string($page) . "')";

  $result = mysql_query($sql);
 
  if($result){
    echo "Brugeren blev succesfuldt oprettet!";
  } else {
    echo "Brugeren kunne ikke oprettes!";
  }
}
?>

// Selve formen:
<form action='admin.php' method='post'>
Brugernavn: <input type='text' name='nybruger_brugernavn' /><br />
Password: <input type='text' name='nybruger_password' /><br />
Side: <input type='text' name='nybruger_page' /><br />
<input type='submit' name='submit' /> <input type='reset' value='Nulstil' />
</form>

// Slut på siden admin.php

Dette er utestet, men det burde virke
Avatar billede Slettet bruger
13. september 2008 - 13:16 #16
Hvis du nu har mange passwords i din database og for ikke selv skal sidde og rette dem alle sammen, så vælger du datatypen varchar(43) for password.
Så kan du kører denne sql:

UPDATE xx SET password = md5(password)

Så skulle den gerne være hjemme, men tag lige en backup af databasen før du gør dette.
Avatar billede moddi100 Seniormester
14. september 2008 - 10:40 #17
gtax87 > hvorfor i alverden plads til 43 tegn?? md5() returnerer en streng på 32
Avatar billede Slettet bruger
14. september 2008 - 13:14 #18
Ups tænkte på sha1('').
Avatar billede Slettet bruger
14. september 2008 - 13:15 #19
Hehe som forøvrigt bruger 40 tegn og ikke 43... en rimelig smutter... beklager jeg.
Avatar billede moddi100 Seniormester
14. september 2008 - 13:16 #20
Bare iorden
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