Avatar billede overgreat Forsker
07. februar 2006 - 09:40 Der er 27 kommentarer og
2 løsninger

login via mysql database

Hej

Jeg har en tabel ved navn vshbruger. Her har jeg oprettet to felter ved navn email og password.

Hvorledes laver jeg et login, hvor jeg tjekker op om de eksisterer i tabellen i forvejen.

Hvis ikke skal der bare komme en fejlbesked.
Hvis de eksisterer skal de bare hoppe videre til formular.php.

Håber på hjælp!
Avatar billede greew Nybegynder
07. februar 2006 - 09:46 #1
Dette er umiddelbart som jeg ser det.. det er meget simpelt lavet!

<?
// connect til mysql databasen
$email = den email, brugeren indtaster
$password = det password, brugeren indtaster
$q = mysql_query("SELECT * FROM vshbruger WHERE email == '".$email."' AND password = '".$password."'");
$a = mysql_fetch_array($q);
if ($a['email'] != $email) {
die("fejlbesked");
} else {
header("Location: formular.php");
}
?>

Mvh.
Jesper
Avatar billede hmortensen Nybegynder
07. februar 2006 - 09:58 #2
Har rettet et par småfejl i ovenstående:
<?php
// connect til mysql databasen
$email = den email, brugeren indtaster
$password = det password, brugeren indtaster
$q = mysql_query("SELECT email FROM vshbruger WHERE email = '".$email."' AND password = '".$password."' LIMIT 1") or die(mysql_error());
if (mysql_num_rows($q) == 1)
{
    die("fejlbesked");
} else {
    header("location: formular.php");
}
?>
Avatar billede overgreat Forsker
07. februar 2006 - 10:05 #3
Hej

Jeg har lavet følgende... men selvom jeg skriver en email og tilsvarende password går den til fejl beskeden... kan i hjælpe?

<?
if($test==test){
include("config.php");

$db = mysql_connect($server, $user, $pass);

mysql_select_db($database, $db);

$email = $email;
$password = $password;

$q = mysql_query("SELECT email, password FROM vshbruger WHERE email = '".$email."' AND password = '".$password."' LIMIT 1") or die(mysql_error());
if (mysql_num_rows($q) == 1)
{
    die("<td width='600' height='447' valign='top' align='center'><br><br><h2><b>Vi har desværre ikke kunnet identificere dig i vores database.<br><br> Dette skyldes enten fejl i email eller password. <br><br>Ved gentagende problemer, er du velkommen til at oprette dig igen som ny kunde.</b></h2></td>");
} else {
    header("location: formular.php");
}
}
?>

<td width='600' height='447' valign='top' align='center'>
<FORM METHOD=POST ACTION='sudoku.php?indhold=eksisterende&test=test' ENCTYPE="multipart/form-data">
<h2><br>
<br>Indtast email
<br><INPUT TYPE=text NAME="email" cols="15">
<br>
<br>
<br>Indtast password
<br><INPUT TYPE=text NAME="password" cols="15">
<br>
<br><INPUT TYPE=submit VALUE=Tilmeld></h2>
</form>
</td>
Avatar billede greew Nybegynder
07. februar 2006 - 10:07 #4
Prøv at ændre:
$email = $email;
$password = $password;

til

$email = $_POST['email'];
$password = $_POST['password'];
Avatar billede greew Nybegynder
07. februar 2006 - 10:08 #5
hmortensen: og udmærkede rettelser :-)
Avatar billede overgreat Forsker
07. februar 2006 - 10:08 #6
hjælper desværre ikke....
Avatar billede greew Nybegynder
07. februar 2006 - 10:14 #7
Hehe.. prøv lige at ændre

if (mysql_num_rows($q) == 1)

til

if (mysql_num_rows($q) != 1)
Avatar billede hmortensen Nybegynder
07. februar 2006 - 10:23 #8
greew: Hov ja, du havde jo fejlbeskeden først ;)

overgreat:
Hvorfor:
if($test==test){

Hvilken effekt skulle dette ha:
$email = $email;
$password = $password

Husk at hente POST data med $_POST['feltnavn'] og GET data med $_GET['navn']
Avatar billede overgreat Forsker
07. februar 2006 - 10:28 #9
Hej

Nedenstående er hvad jeg har nu.


Jeg har slettet...
$email = $email;
$password = $password

Jeg har også ændret til

if (mysql_num_rows($q) != 1)

Men det hjælper ikke.

Grunden til test er, at jeg har den i toppen i af siden. Når jeg aktiverer formularen får jeg den til at inkludere selve testen af email og password.

-----------------
<?
if($test==test){
include("config.php");

$db = mysql_connect($server, $user, $pass);

mysql_select_db($database, $db);

$q = mysql_query("SELECT email, password FROM vshbruger WHERE email = '".$email."' AND password = '".$password."' LIMIT 1") or die(mysql_error());
if (mysql_num_rows($q) != 1)
{
    die("<td width='600' height='447' valign='top' align='center'><br><br><h2><b>Vi har desværre ikke kunnet identificere dig i vores database.<br><br> Dette skyldes enten fejl i email eller password. <br><br>Ved gentagende problemer, er du velkommen til at oprette dig igen som ny kunde.</b></h2></td>");
} else {
    header("location: formular.php");
}
}
?>

<td width='600' height='447' valign='top' align='center'>
<FORM METHOD=POST ACTION='sudoku.php?indhold=eksisterende&test=test' ENCTYPE="multipart/form-data">
<h2><br>
<br>Indtast email
<br><INPUT TYPE=text NAME="email" cols="15">
<br>
<br>
<br>Indtast password
<br><INPUT TYPE=text NAME="password" cols="15">
<br>
<br><INPUT TYPE=submit VALUE=Tilmeld></h2>
</form>
</td>
Avatar billede overgreat Forsker
07. februar 2006 - 10:29 #10
Den hopper ikke videre til formular.php men bliver bare på siden?
Avatar billede greew Nybegynder
07. februar 2006 - 10:35 #11
Prøv at ændre:

$q = mysql_query("SELECT email, password FROM vshbruger WHERE email = '".$email."' AND password = '".$password."' LIMIT 1") or die(mysql_error());

til

$sql = "SELECT email, password FROM vshbruger WHERE email = '".$email."' AND password = '".$password."' LIMIT 1";
print $sql;
$q = mysql_query($sql) or die(mysql_error());

og se hvad $sql giver
Avatar billede overgreat Forsker
07. februar 2006 - 10:43 #12
Den printer følgende:

SELECT email, password FROM vshbruger WHERE email = 'overgaard.henrik@gmail.com' AND password = 'overgreat' LIMIT 1
Avatar billede greew Nybegynder
07. februar 2006 - 10:44 #13
Og du har kun den entry stående en enkelt gang i databasen? Hvis den står der flere gange, så fungerer det ikke..
Avatar billede hmortensen Nybegynder
07. februar 2006 - 10:48 #14
SQL kaldet vil enten returnere 0 eller 1 række, når der er LIMIT 1 på.

Ret til:
if($test == "test"){

Indsæt exit; efter:
header("location: formular.php");
exit;
Avatar billede greew Nybegynder
07. februar 2006 - 10:50 #15
Jeg har ingen ide, om det er absolut nødvendigt, men i alle de eksempler, jeg kan finde, står Location med stort L i stedet for l.. Jeg ved ikke om det ændrer noget.. men prøv eventuelt :-)
Avatar billede hmortensen Nybegynder
07. februar 2006 - 10:50 #16
Det har ingen betydning.
Avatar billede greew Nybegynder
07. februar 2006 - 10:51 #17
hmortensen: Ok.. it was worth a shot :-)
Avatar billede overgreat Forsker
07. februar 2006 - 10:56 #18
Jeg vedhæfter lige linket.
Så kan i prøve at logge ind:

http://www.molster.dk/sudoku.php?indhold=eksisterende

emailen som er en tester er : overgaard.henrik@gmail.com
passwordet er: test
selve koden er som følger:

<?
if($test == "test"){
include("config.php");

$db = mysql_connect($server, $user, $pass);

mysql_select_db($database, $db);

$sql = "SELECT email, password FROM vshbruger WHERE email = '".$email."' AND password = '".$password."' LIMIT 1";
print $sql;
$q = mysql_query($sql) or die(mysql_error());
if (mysql_num_rows($q) != 1)
{
    die("<td width='600' height='447' valign='top' align='center'><br><br><h2><b>Vi har desværre ikke kunnet identificere dig i vores database.<br><br> Dette skyldes enten fejl i email eller password. <br><br>Ved gentagende problemer, er du velkommen til at oprette dig igen som ny kunde.</b></h2></td>");
} else {
    header("location: formular.php");
exit;}
}
?>

<td width='600' height='447' valign='top' align='center'>
<FORM METHOD=POST ACTION='sudoku.php?indhold=eksisterende&test=test' ENCTYPE="multipart/form-data">
<h2><br>
<br>Indtast email
<br><INPUT TYPE=text NAME="email" cols="15">
<br>
<br>
<br>Indtast password
<br><INPUT TYPE=text NAME="password" cols="15">
<br>
<br><INPUT TYPE=submit VALUE=Tilmeld></h2>
</form>
</td>
Avatar billede hmortensen Nybegynder
07. februar 2006 - 10:58 #19
Det er fordi formular.php ikke findes.
Avatar billede overgreat Forsker
07. februar 2006 - 11:07 #20
Hej

nu har jeg ændret det til index.php som findes... men den gør stadig det samme
Avatar billede hmortensen Nybegynder
07. februar 2006 - 11:25 #21
Du kan ikke lave en header("location: "); når du har udskrift før dette kald.
Avatar billede overgreat Forsker
07. februar 2006 - 11:34 #22
kan jeg få den til at hoppe til ny side på en anden måde?
Avatar billede flim Nybegynder
07. februar 2006 - 12:41 #23
Jo, med meta tags
Avatar billede overgreat Forsker
07. februar 2006 - 13:01 #24
? meta tags`.... hvordan gør man dette?
Avatar billede hmortensen Nybegynder
07. februar 2006 - 13:04 #25
<meta http-equiv=Refresh content="0; url=index.php">

Men en pænere løsning ville være at behandle dataen på en side uden design, og derfra sende brugeren til den korrekte side vha. header().
Avatar billede overgreat Forsker
07. februar 2006 - 13:09 #26
Ad lange omveje er jeg nået til løsningen. Mange tak for hjælpen. Den var både lærerig og god.

Hmortensen og greew sender i et svar hver?
Avatar billede hmortensen Nybegynder
07. februar 2006 - 13:11 #27
Kommer her :)
Avatar billede greew Nybegynder
07. februar 2006 - 15:23 #28
værsågod
Avatar billede kennedk Nybegynder
07. februar 2006 - 21:26 #29
Hej
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