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.
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.
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?
Se toimisi tosiaan tuolla header("Location: polku/paa.php");
https://www.php.net/manual/en/function.header.
Eli käytät kun olet tarkistanut, että kirjautuminen on onnistunut voit käyttää tuota headeria toiselle sivulle siirtymiseen.
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.
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.
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.
Kiitos paljon, sain toimimaan koko homman eka kertaa. Nyt virittelemään ja viilaamaan.
Aihe on jo aika vanha, joten et voi enää vastata siihen.