Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Kirjautuneen käyttäjän tunnistaminen

Sivun loppuun

thela [08.04.2013 18:57:40]

#

Olen omatoimirakennellut sivuja html ja php koodauksella. Olen myös tehnyt tietokannan, josta olen saanut sivut hakemaan tietoa kun määrittelen "käsin" millä ehdolla sitä haetaan. Mutta ajatus olisi saada se toimimaan siten, että ohjelma tunnistaa kirjautuneen käyttäjän ja hakee juuri hänen tietojaan tietokannan tauluista. Tauluissa on siis useiden käyttäjien tietoja.

Alla olevassa koodinpätkässä tuo id='3' pitäisi saada korvattua dynaamisella asiakaskohtaisella tunnisteella.

$tulos = mysql_query("SELECT * FROM asiakastiedot WHERE id = '3'", $yhteys)

Varmaan se vaatii mm. istunnon tai evästeen käyttöä, mutta en vaan osaa rakentaa!!

Eli tarvisin siis kirjautuneen käyttäjän tunnistamissysteemin ja sitten opastuksen miten sitä käytetään tietokantahauissa.

Kiitos paljon jos tätä kautta saan vastauksen. Tietoa näistä kaikista on eri puolilla, mutta niin erilaisia ja sekavia, etten ole niistä saanut tolkkua.

Ripe [08.04.2013 19:20:15]

#

Tuo kirjautuminen voidaan toteuttaa todella yksinkertaistetusti näin:

// login.php
$_SESSION['uid'] = $_POST['uid'];
$_SESSION['username'] = $_POST['username'];
header("Location: /");

Nämä $_POST-taulukossa olevat tiedot tulevat kirjautumislomakkeelta.

Ja kannattaa käyttää PDO:ta mysql_ -alkuisten funktioiden sijaan. Tuo sinun kyselysi näyttää tältä PDO:lla toteutettuna:

$pdo = new PDO("mysql:host=localhost;dbname=tietokantataulu", "user", "password");

$query = $pdo->prepare("SELECT * FROM asiakastiedot WHERE id = ?");
// $_SESSION['uid'] voi olla vaikka 3
$query->execute(array($_SESSION['uid']));

$result = $query->fetchAll();

Istunnon eli $_SESSION-taulukon käyttö on paras tapa tuollaiseen kirjautumisen hallintaan.

Rekisteröityminen hoituu tällä tavoin:

$pdo = new PDO("mysql:host=localhost;dbname=tietokantataulu", "user", "password");

$query = $pdo->prepare("INSERT INTO asiakastiedot (username, password) VALUES (?, ?)");

$password = password_hash($_POST['password'], PASSWORD_DEFAULT);

$query->execute(array($_POST['username'], $password));

$_SESSION['username'] = $_POST['username'];

Ja täältä löytyy hyvä ohje password_hash-funktion ja muiden salasanafunktioiden käyttöön.

Koko kirjautumis/rekisteröitymiskoodeja en anna suoraan, on parempi itsesi kannalta, että opit tekemään sen itse, ja sinulle annetaan neuvoja.

thela [09.04.2013 15:48:18]

#

Moi ja kiitos paljon Ripelle.

Pakko tunnustaa että ihan ei ole kristallinkirkasta vielä..
Mutta sain viriteltyä eri keinoilla käyttäjän tunnistamisen ja käyttäjäkohtaisten tietojen haun kannasta. Ongelmana on vielä niinkin yksinkertainen asia kuin ohjaus pääsivulle kirjautumissivulta. Mulla on siinä lomakkeessa ao lause, joka kai tallettaa tietoja.

<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">

Kun kirjaudun millä tahansa tunnuksilla, oikeilla tai väärillä, kirjautumislonake jää näkyviin eli ei tapahdu mitään. Kun kirjaudun oikeilla tunnuksilla ja kun avaan sen jälkeen pääsivun, sinne on kuitenkin päivittyneet kirjautuneen käyttäjän tiedot.

Eli miten saan tuolla tavalla rakennetun systeemin kirjaudu - napin johtamaan pääsivulle, olkoon se vaikka paa.php?

tmub [09.04.2013 15:56:49]

#

Se toimisi tosiaan tuolla header("Location: polku/paa.php");
https://www.php.net/manual/en/function.header.php

Eli käytät kun olet tarkistanut, että kirjautuminen on onnistunut voit käyttää tuota headeria toiselle sivulle siirtymiseen.

Ripe [09.04.2013 15:59:26]

#

Sinulla on kansio, jossa on myös etusivu. Etusivu on index.php, kirjautumislomake loginform.html, kirjautuminen login.php, rekisteröitymislomake registerform.html, rekisteröityminen register.php ja uloskirjautuminen logout.php

// loginform.html
<form action="login.php" method="post">
    <input type="text" name="username" placeholder="Käyttäjänimi"/>
    <input type="password" name="password" placeholder="Salasana"/>
    <input type="submit" value="Kirjaudu"/>
</form>

<?php
// login.php
// Laitetaan sessioon että on kirjauduttu, tietokantaan en nyt tässä laita
$_SESSION['username'] = $_POST['username'];
header("Location: index.php"); // Tämä rivi ohjaa etusivulle
?>

// registerform.html
<form action="register.php" method="post">
    <input type="text" name="username" placeholder="Käyttäjänimi"/>
    <input type="password" name="password" placeholder="Salasana"/>
    <input type="password" name="password_again" placeholder="Salasana uudelleen"/>
    <input type="submit" value="Rekisteröidy"/>
</form>

<?php
// register.php
$password = $_POST['password'];
$password_again = $_POST['password_again'];

if ($password == $password_again){
    // tietokantaan syöttö
    $_SESSION['username'] = $_POST['username'];
    header("Location: index.php");
} else {
    die("Salasanat eivät täsmää");
}
?>

// index.php
<h1>Tervetuloa, <?= $_SESSION['username']; ?></h1>

Ja anteeksi, oli ensimmäisessä viestissäni vähän huonosti selitetty.

Lebe80 [09.04.2013 16:04:16]

#

Ripe kirjoitti:

Sinulla on kansio, jossa on myös etusivu. Etusivu on index.php, kirjautumislomake loginform.html, kirjautuminen login.php, rekisteröitymislomake registerform.html, rekisteröityminen register.php ja uloskirjautuminen logout.php

Onko jokin tietty syy miksi .php ja .html -tiedostoja sekaisin?

edit:
Itse en tosin heittäisi muuttujien arvoja sessioon tuolta rekisteröinti-sivulla, vaan asettaisin ne sitten ihan suoraan jo sinne tietokantaan ennen header -siirtoja...

editedit:
Taisikin olla vain "jokin esimerkki" tietokantaan laiton sijaan tuo sessio-härpäke. eli ei mitään siitä sen enempää... Tietenkin sessio-rivien tilalla olisi voinut olla joku pseudo-funktio, joka olisi kuvannut sitä tietokantaan tallentamista/hakua.

Ripe [09.04.2013 16:06:45]

#

No ei ole kovin kummoista syytä, nuo .html-päätteiset sivut ovat staattisia, nillä ei tarvita php:tä, eli käytän päätteenä .html:lää. Eli ihan yhtä lailla voi käyttää .php:tä kaikissa.

Oletan, että kysyjä osaa laittaa tietoa tietokantaan, joten en sen kummemmin sitä ala selittelemään.
Eli olet oikeassa, oli tuommoinen esimerkki.

thela [09.04.2013 18:39:28]

#

Kiitos paljon, sain toimimaan koko homman eka kertaa. Nyt virittelemään ja viilaamaan.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta