Avatar billede danco Nybegynder
16. september 2008 - 02:08 Der er 15 kommentarer og
1 løsning

Redirect til database side

Hejsa,
jeg er i færd med at lave et login system. Det er min mening af jeg vil have tre rækker i min database. "Brugernavn" "password" og "page". Når Brugernavn og password er accepteret skal brugeren sendes til den side jeg har i den sidste række.
Jeg har allerede fået hjælp herinde til det men det virkede desværre ikke.
herunder paster jeg min checklogin.php

<?php
ob_start();
$host="xx"; // 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
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"); //
header("location:"['$page']");  //<-- det er her problemet ligger
exit;
}
else {
echo "Forkert brugernavn eller kodeord";
}


ob_end_flush();
?>

Forsøger jeg da at kører dette dokument godtager den login men sender ingen steder hen.
Avatar billede fant0mas Nybegynder
16. september 2008 - 07:34 #1
header("Location: $result[page]");
Avatar billede yHec Novice
16. september 2008 - 07:42 #2
Du laver en mysql_fetch_array, så det jo det array du skal hente fra...

header(sprintf("Location: %s", $row[page]));

/y
Avatar billede danco Nybegynder
16. september 2008 - 11:23 #3
Fant0mas;
tak for dit input, desværre løser det ikke mit problem, nu melder den bare om "forkert brugernavn eller kodeord" i stedet.

Y;
En mysql_fetch_array ?
undskyld men det ved jeg ikke lige hvad er :)
Avatar billede yHec Novice
16. september 2008 - 11:54 #4
Det var jo ikke så godt, eftersom du bruger den til at håndteret dit DB-output...

I denne linje:
$row = mysql_fetch_array($result);

Den lavet et array, så du kan hente dine data således: $row['page'] (og de andre felter på samme måde).

Så indsæt hvad jeg skrev tidligere (16/9-2008 07:34:07), så er jeg sikker på de virker.

Hidtil har du ikke indsat noget som helst i din "location:", idet "[page]" ikke indeholder noget, eller er defineret. Det samme med $result[page]...

/y
Avatar billede yHec Novice
16. september 2008 - 11:54 #5
Og for anden gang; prøv lige de løsninger der foreslås, inde du afviser dem......
Avatar billede danco Nybegynder
16. september 2008 - 13:17 #6
jeg kan slet ikke se meningen i hvad du skriver, overhovedet, at der skal bruges et array til at henvises til forstår jeg, men hvordan det rent teknisk skal sættes ind kan jeg ikke se,
Og jeg mener da ikke jeg har afvist nogen forslag uden at afprøve dem først.
Avatar billede yHec Novice
16. september 2008 - 14:09 #7
Det er ikke så svært:
Gør dette:
header(sprintf("Location: %s", $row[page]));
Istedet for dette:
header("location:"['$page']");

Så burde det virke.

/y
Avatar billede danco Nybegynder
16. september 2008 - 14:46 #8
y;
Nu har jeg forsøgt at erstatte den linie med din linie,

og den retunere stadig med "Forkert brugernavn eller kodeord"
har tjekket login oplysningerne i databasen for at sikre at jeg logger med rigtige oplysninger, dette er tilfældet.

Ville det være lettere hvis man brugte header("location:"login_redirct.php");
og derefter i login_redirct.php sendte brugeren videre?
Avatar billede yHec Novice
16. september 2008 - 15:37 #9
og du er sikker på, at $count rent faktisk er lig 1?

Prøv at echo'e den.

/y
Avatar billede fant0mas Nybegynder
16. september 2008 - 15:39 #10
if($count==1){

Så er count nok ikke én.

echo $count;

hvad siger den?
Avatar billede showsource Seniormester
16. september 2008 - 16:59 #11
Det undrer mig lidt at ingen endnu har nævnt brugen af ob_start() og session_register()

Er det en fil du includer?

Anyway, med forbehold for fejl:

<?php

// Du bør ALTID undgå at bruge ob_start()
// Lav/brug hellere scripts hvor det ikke er nødvendigt !!!!!

ob_start();

$host="xx"; // 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");

$myusername = (get_magic_quotes_gpc() ? stripslashes($_POST['myusername']) : $_POST['myusername']);

$myusername = mysql_real_escape_string($myusername)
$mypassword= md5($_POST['mypassword']); // Krypter password

// Gør det til en vane kun at hente de felter du skal bruge, i stedet for alle.
// Her hentes brugernavn og page
$sql = "SELECT username, page FROM ". $tbl_name ." WHERE username='" . $myusername . "' and password='" . $mypassword . "'";

$result = mysql_query($sql) or die (mysql_error());


if(mysql_num_rows($result) == 1){

$user = mysql_result($result,0,0);
$goto = mysql_result($result,0,1);

// Definer aldrig en var, ( f.eks. $myusername ) og derefter bruge f.eks. $_SESSION["myusername"],
// på servere med register_globals sat til on, går der bare ged i den for dig en eller anden dag!


// Brug $_SESSION og IKKE session_register()
$_SESSION["brugernavn"] = $user;

header("location:".$goto);
exit;

}
else
{

echo "Forkert brugernavn eller kodeord";

}


ob_end_flush();
?>
Avatar billede fant0mas Nybegynder
16. september 2008 - 18:03 #12
showsource:
Tjo, men det er vist ikke det største problem. Desuden tror jeg dette er et klassisk eksempel på: lav det for mig, - jeg er ligeglad med hvordan og hvorfor, bare det virker og jeg ikke har brugt mere end 5 minutter på at sætte mig ind i det.

Men hvis du vil følge den til døren, og bruge tid på at rette en tredje parts kode til, samt de fejl rettelsen af ob_start smider - ja så skal du være velkommen.

:0)
Avatar billede yHec Novice
16. september 2008 - 21:26 #13
Jeg gider heller ikke mere. Giver fant0mas helt ret.
Avatar billede danco Nybegynder
23. september 2008 - 00:54 #14
*************Update***************

Jeg fik det til at virke, hvis nogen er interesseret endte den færdige kode med at være sådan her.

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

#
mysql_connect("$host", "$username", "$password")or die("cannot connect");
#
mysql_select_db("$db_name")or die("cannot select DB");
#

#

#
$myusername=$_POST['myusername'];
#
$mypassword=$_POST['mypassword'];
#

#

#
$myusername = stripslashes($myusername);
#
$mypassword = stripslashes($mypassword);
#
$myusername = mysql_real_escape_string($myusername);
#
$mypassword = mysql_real_escape_string($mypassword);
#

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

#
$row=mysql_fetch_assoc($result);
#

#
if($row!=false){
#
session_register("myusername");
#
session_register("mypassword");
#
header("location: ".$row['page']);
#
}
#
else {
#
echo "Forkert Brugernavn eller Password";
#
}
#
?>
Avatar billede danco Nybegynder
27. september 2008 - 22:10 #15
**lukket**
Avatar billede yHec Novice
27. september 2008 - 22:52 #16
Flot. Især at du brugte flere af løsningsforslagene herinde, også tog pointene selv...

(header("location: ".$row['page']);)


/y
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