Avatar billede ny89 Nybegynder
02. februar 2013 - 23:33 Der er 15 kommentarer og
1 løsning

Login php, Mysql

Hvorfor virker mit script ikke?
Den siger "Forkert brugernavn eller adgangskode".

Lige nu har jeg et brugernavn og adgangskode, som ikke virker, hvordan får jeg det ændret, så den kommer til at connecte med min database?

databasen hedder Membership, tabel users og tabellen består af følgende: id, username, password

Og man skal kunne logge ud igen.
_ _ _ _ _ _
index.php

<html>

<head> </head>
<body>

<form action="admin.php" method="post">
Brugernavn: <input type="text" name="$bruger">
Adgangskode: <input type="password" name="$pass">
<input type="submit" value="Login">
</form>


</body>
</html>


_ _ _ _ _ _
admin.php

<html>
<head></head>
<body>

<?
$brugertjek = "admin";
$passtjek = "1234";
if ($bruger === $brugertjek && $pass === $passtjek)
{
echo "Du er nu logget ind";
}
else
{
echo "Forkert brugernavn eller adgangskode";
exit;
}
?>

</body>
</html>
Avatar billede scootergrisen Nybegynder
02. februar 2013 - 23:41 #1
Ret:
<input type="text" name="$bruger">
<input type="password" name="$pass">

Til:
<input type="text" name="bruger">
<input type="password" name="pass">

Ret:
if ($bruger === $brugertjek && $pass === $passtjek)

Til:
if ($_POST['bruger'] === $brugertjek && $_POST['pass'] === $passtjek)

Fjern :
exit;

Der er slet ikke noget mysql i din kode.
Du kan eventuelt læse denne side : http://codular.com/php-mysqli
Avatar billede ny89 Nybegynder
02. februar 2013 - 23:49 #2
Tak, det virker, men hvordan logger jeg af igen?

Er stadig nybegynder med mysql, derfor har jeg brug for hjælp for at komme i gang.
Avatar billede olebole Juniormester
03. februar 2013 - 13:38 #3
<ole>

Drop MySQL og gå i gang med prpared statements under MySQLI eller PDO.

Det gamle MySQL-API er dybt forældet, langsomt og usikkert. Det betaler sig ikke at bruge tid på, da det formodentlig snart helt udgår af PHP.

/mvh
</bole>
Avatar billede olebole Juniormester
03. februar 2013 - 13:43 #4
- men der er ikke rigtig noget login i det, du laver - eller brugeren skal i hvertfald logge ind på hver eneste side  =)

Du skal sætte en session, så brugeren bliver husket, når hun går til en ny side
Avatar billede ny89 Nybegynder
03. februar 2013 - 15:12 #5
Hej Ole,
Tak, har læst noget af din tekst: http://www.eksperten.dk/guide/1480

Men hvordan kommer jeg videre med mit script? ja, du har ret i at jeg skal have session med.

Til at starte med vil gerne gøre det så simpelt så muligt og med tiden arbejde videre med mit login, når jeg har fået mere styr på det.
Avatar billede olebole Juniormester
03. februar 2013 - 17:39 #6
Hvis jeg var dig, ville jeg nok prøve at finde en eller flere gode bøger om PHP (NB: Gode programmeringsbøger er på engelsk). Et login-script er ikke helt ukompliceret, hvis det skal bruges til noget seriøst (- og det skal det altid, hvis det skal bruges på WWW).

Et dårligt/usikkert login-script er ganske vist farligt for dig, men det må du jo sådan set selv om. Det væsentlige er, at det er til stor fare for alle, som besøger siden - hvad enten de er logget ind eller ej.

Under alle omstændigheder er det en fordel at lære én ting ad gangen. Det er ikke hensigtsmæssigt at lære 'det hele' i ét projekt  =)

Har du overhovedet kikket på det link om sessions, jeg lagde ovenfor? Og har du kikket under Examples og Basic usage?
Avatar billede ny89 Nybegynder
03. februar 2013 - 18:17 #7
Ja, har læst og arbejdet videre men får denne fejlmeddelelse:

Warning: mysql_connect() [function.mysql-connect]: Host 'ns.iwebhotel.dk' is not allowed to connect to this MySQL server in..
kan ikke forbinde



Her er resten af koden:

_ _ _ _ _ _ _ _
index.php

<html>

<head> </head>
<body>

<form action="tjek_login.php" method="post">
Brugernavn: <input type="text" name="bruger">
Adgangskode: <input type="password" name="pass">
<input type="submit" value="Login">
</form>


</body>
</html>



_ _ _ _ _ _ _ _

tjek_login.php

<?php
$Brugernavn="";
$Adgangskode="";
$db_name="membership";
$db_users="users";

mysql_connect("$Brugernavn", "$Adgangskode")or die("kan ikke forbinde");
mysql_select_db("$db_users")or die("Kan ikke forbinde til db");

$bruger=$_POST['bruger'];
$pass=$_POST['pass'];

$bruger = stripslashes($bruger);
$pass = stripslashes($pass);
$bruger = mysql_real_escape_string($bruger);
$pass = mysql_real_escape_string($pass);

$sql="SELECT * FROM $db_users WHERE Brugernavn='$bruger' and Adgangskode='$pass'";
$result=mysql_query($sql);

$count=mysql_num_rows($result);

if($count==1){
session_register("bruger");
session_register("pass");
header("location:login_succes.php");
}
else {
echo "Forkert brugernavn eller adgangskode";
}
?>



_ _ _ _ _ _ _ _
login_succes.php

<html>
<head></head>
<body>

Du er nu logget ind

</body>
</html>
Avatar billede scootergrisen Nybegynder
03. februar 2013 - 18:35 #8
Som ole bole skrev så lad være med at brug det gamle mysql API.
Det er deprecated i PHP 5.5.0.
Brug i stedet mysqli (der er et "i" til sidst).

Læs den side jeg kom med link til. Jeg er også ny til det her mysqli og jeg læste den side og lærte lidt om det.

Det er noget i denne stil :


$server = '';
$bruger = '';
$kodeord = '';
$database = '';
$tablenavn = '';

$db = new mysqli($server, $bruger, $kodeord, $database);

if ($db->connect_errno > 0) {

  echo 'Kunne ikke forbinde til database [' . $db->connect_error . ']';
  exit;

}

if ($stmt = $db->prepare("SELECT * FROM $tablenavn WHERE brugernavn=? AND adgangskode=?")) {

  $stmt->bind_param('ss', $bruger, $pass);
  $stmt->execute();
  $stmt->bind_result($resultat);

  if ($stmt->fetch()) {

  }

  $stmt->close();

}

Avatar billede olebole Juniormester
03. februar 2013 - 19:29 #9
- og du kan også læse hele teksten i min guide. Det nytter ikke at 'pluklæse' i den slags  =)

Du kan som sagt også vælge prepared statements under PDO. PDO er lidt lettere at arbejde med, når der skal bindes parametre - og så kan PDO bruges mod flere forskellige databaser.

Jeg kan varmt anbefale at bruge en del tid på hver og så vælge det, der passer bedst til i din kodestil
Avatar billede ny89 Nybegynder
03. februar 2013 - 21:13 #10
Synes godt nok det er svært. Nu har jeg læst en masse.
Jeg kan logge på med både rigtig og forkert brugernavn og/eller adgangskode, hvilket er meget skidt. Hvad gør jeg forkert??


<?php

$server = 'localhost';
$bruger = '';
$kodeord = '';
$database = 'membership';
$tablenavn = 'users';

$db_conn = new mysqli($server, $bruger, $kodeord, $database);
    if($db_conn->connect_errno > 0){
        die('Kunne ikke forbinde til databasen [' . $db_conn->connect_error . ']');
        exit();
}
$stmt = $db_conn->stmt_init();
if($stmt->prepare("SELECT * FROM $tablenavn WHERE 'Brugernavn'=? AND 'Adgangskode'=?")) {
    $stmt->bind_param('ss', $bruger, $pass);
    $stmt->execute();
    $stmt->close();
  }

$db_conn->close();
?>

<form method="post" action="login_succes.php">
Brugernavn: <input type="text" name="bruger">
Adgangskode: <input type="password" name="pass">
<input type="submit" name="submit" value="Login">
</form>


Kunne ikke lige gennemskue, hvorfor 'ss' skulle med?
Avatar billede olebole Juniormester
03. februar 2013 - 21:47 #11
De to s'er betyder, at de to parametre er to strenge. Det er forklaret i guiden under: NB: Læg mærke til udtrykket: ... osv.

Jeg har fuld respekt for, at du gerne vil bygge en Ferrari - men du er nødt til at lære at bukke et stykke jern først  *o)

Det er ikke vanskeligere at skrive webkode, end det er at bygge en sportsvogn. Du må ikke glemme, at webudvikling er et fag på lige fod med alle mulige andre fag. Det tager adskillige år at lære, og det står ingen steder skrevet, at nogen har krav på at kunne det - eller at alle skal kunne lære det.

Begynd med at få styr på helt grundlæggende ting - dels i PHP og dels i MySQLI. Så kan du altid lære at sætte tingene sammen og skrive mere komplekse scripts/applikationer, når du har lært det grundlæggende  =)
Avatar billede ny89 Nybegynder
03. februar 2013 - 22:44 #12
Jeg har arbejdet en del med php og mysql en gang til noget andet, men har ikke brugt det i lang tid og vil gerne i gang igen.

Jeg har ikke lavet et login før i php og mysqli, derfor har jeg oprettet denne tråd for at få hjælp. Ved godt at der er meget hjælp at hente på nettet og i bøger.
Avatar billede scootergrisen Nybegynder
04. februar 2013 - 01:30 #13
Det kode jeg skrev var ikke et færdigt eksempel det var for at få dig igang.

Dette :
if($stmt->prepare("SELECT * FROM $tablenavn WHERE 'Brugernavn'=? AND 'Adgangskode'=?")) {
    $stmt->bind_param('ss', $bruger, $pass);

Betyder at der hvor der er spørgsmålstegn i queryen (?) de steder bruges ved bind_param() til at indsætte en værdi.

Så det ville vist svare til at skrive :
"SELECT * FROM $tablenavn WHERE 'Brugernavn'=$bruger AND 'Adgangskode'=$pass"

Det skulle være en mere sikker måde så man undgå SQL injection.

Også prøv og læs det jeg har skrevet med $_POST så du kan få værdierne fra formularen ind.
Avatar billede ny89 Nybegynder
04. februar 2013 - 09:11 #14
Super, det giver god mening.
Avatar billede ny89 Nybegynder
06. februar 2013 - 11:25 #15
Send et svar :)

Jeg valgte at gå tilbage til den nemme løsning og lavet et login med mysql. Vil helt sikkert gerne lære mysqli, når jeg får tid til det.
Avatar billede ny89 Nybegynder
14. april 2013 - 17:03 #16
Lukker tråden :)
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