[tut] inlogscript

Discussion in 'HTML en webdesign' started by mastersem, Jan 20, 2009.

  1. mastersem

    mastersem New Member

    Joined:
    Nov 11, 2008
    Messages:
    16
    Likes Received:
    0
    Mod-edit: Geknipt uit dit topic

    hier ik had voor een ander forum een login/register script met uitleg gepost. hoop dat je er wat van leert:

    Benodigdheden:
    [li]Host die PHP en MySQL ondersteund.
    [li]Beetje kennis van PHP en MySQL (alles wordwel ong. uitgelegd, maar basis is handig)
    [li]Text editor, ik raad Notepad++ aan maar notepad is ook goed

    Wat ik verwacht:
    [li]Rep Punt!
    [li]Een bedankje in een reply!

    laten we dan maar eens beginnen! maak een mysql database aan en een mysql user, en geef ze alle privileges.

    Stap 0, Database:
    Stap 0 is een bijstap als je het nog niet gedaan hebt. je moet namelijk een users table maken. dit is het script:
    Code:
    CREATE TABLE members (
    `id` INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `username` VARCHAR(15) ,
    `password` VARCHAR(255) ,
    `email` VARCHAR(255)
    )
    id gaat automatisch omhoog omdat iedere user een speciale ID krijgen. hij kan maximaal 10 cijfers bevatten, dat zijn 9.999.999.999 users die hij nu kan nemen. dat is ruim genoeg aangezien er nog niet eens zoveel mensen op de aarde bestaan :p.

    Stap 1, Connect script:
    Stap 1 is het Connect script(connect.php), hier is hij dan:
    Code:
    <?php
    //Connect script
    //vul alles in
    $host = "localhost"; //host van je server, meestal is dit localhost
    $dbuser = "mysql_user"; //username die je hebt gebruikt
    $dbpass = "mysql_pass"; //password dat je gegeven hebt
    $db = "mysql_database"; //database die je gemaakt hebt.
    //nu niks meer veranderen.
    $con = mysql_connect($host,$dbuser,$dbpass) or die("could not connect to server " . mysql_error()); //maakt connectie naar de server, en als het niet lukt gaat hij dood (weergeeft de error voor debuggen)
    mysql_select_db($db,$con) or die("couldn't connect to database" . mysql_error());
    //hij selecteerd de database die jij ingevult hebt. als het niet lukt gaat hij dood.
    ?>
    Als je het niet begrijpt... lees de comments nog een keer.

    nu hebben we een connectie met de server!

    Stap 2, Login script:
    Stap 2 is het login script! (login.php)
    Code:
    <?php
    session_start();
    include("connect.php"); //hij moet connect.php erbij doen. deze voert hij dus uit.
    //check of page wel bestaat.
    if (isset($_GET['page']))
    {
     if ($_GET['page'] == 1)
     {
      //verkrijg de info die de user verzonden heeft
      $username = $_POST['username'];
      $password = $_POST['password'];
      //bescherm tegen mysql injecties
      $password = mysql_escape_string($password);
      $password = htmlspecialchars($password);
      $username = mysql_escape_string($username);
      $username = htmlspecialchars($username);
      //beveilig het wachtwoord
      $password = md5($password);
      $query = "SELECT * FROM members WHERE username='$username' AND password='$password'";
      //zoek het ID van de user die inlogd.
      $result = mysql_query($query);
      $count = mysql_num_rows($result);
      //tel hoeveel ID's er zijn gevonden
      if ($count == 1)
      {
       //user is gevonden!
       $rows = mysql_fetch_assoc($result);
       $_SESSION['ID'] = $rows['ID'];
       header("location: login_succes.php");
      }
      else
      {
       //user niet gevonden. we vertellen het hem!
       echo "username/password invalid, please try again";
      }
     }
    }
    //en nu gaan we het login form showen!
    ?>
    <form name="login" action="login.php?page=1" method="post">
    Username: <br />
    <input type="text" name="username">
    <br />Password: <br />
    <input type="password" name="password">
    <br /><input type="submit" value="login">
    </form>
    dit is het, het is allemaal moeilijk om te begrijpen, maar dat komt wel. zometeen komt deel 2 met stap 3 en stap 4! tot dan!

    DEEL 2:
    Stap 3, Register script:
    Dit is stap 3, het register script (register.php):
    Code:
    <?php
    $succes = false;
    if (isset($_REQUEST['login'])) {
     //verkrijg username en de 2 wachtwoorden
     $username = $_POST['username'];
     $pass1 = $_POST['password'];
     $pass2 = $_POST['password2'];
     if ($pass1 == $pass2) {
      //alles is goed, dus we gaan nu password encrypten en emails checken
      $pass = md5($pass1);
      $email = $_POST['email'];
      $email2 = $_POST['email2'];
      //check of email hetzelfde is als email2
      if ($email == $email2) {
       //ze zijn goed dus we gaan checken of email al gebruikt is
       $emaild = mysql_query("SELECT * FROM members WHERE email='".$email."'") or die(mysql_error());
       //we selecteren alle rows van members waar email variable $email is
       if (mysql_num_rows($emaild) == 0) {
        //het email is niet gebruikt, nu gaan we checken of de username al gebruikt is
        $userd = mysql_query("SELECT * FROM members WHERE username='".$username."'") or die(mysql_error());
        //we selecteren alle rows van members waar username $username is
        if (mysql_num_rows($userd) == 0) {
         //username is niet gebruikt, dus we gaan hem erin schrijven
         mysql_query("INSERT INTO members (username,password,email) VALUES ('".$username."','".$pass."','".$email."')") or die(mysql_error());
         echo "succesfully registered";
         $succes = true; //laat het form verdwijnen :P
        }
        else {
         //username is al in gebruik
         echo "username already exists";
        }
       }
       else {
        //email al in gebruik
        echo "email already in use";
       }
      }
      else {
       //emails zijn niet hetzelfde
       echo "email's do not match";
      }
     }
     else {
      //wachtwoorden zijn niet hetzelfde
      echo "password's do not match";
     }
    
    }
    if (!$succes) {
    echo '<form name="login" action="' . $_SERVER['PHP_SELF'] . '" method="post">
    Username: <br />
    <input type="text" name="username">
    <br />Password: <br />
    <input type="password" name="password">
    <br /><input type="submit" name="login" value="login">
    </form>';
    }
    ?>
    ik hoop dat je de laatste wel snapt, want dit is heel simpel gezegt html, met als action dat hij naar dezelfde pagina gaat alleen dan met GET variable act = 1. het is een behoorlijk script, maar dan krijg je wel wat!

    dit is allemaal heel mooi, maar wat nu, je kan inloggen, maar er gebeurt verder niks, en je kan registreren. daarom moet je een pagina hebben waar je zowieso naartoe gaat als je ingelogd hebben, dit maken we nu even login_succes.php, dit mag jij veranderen naar wat jij wilt!

    Stap 4, login is een succes!:
    dit is stap 3, succes login! (login_succes.php):
    Code:
    <?php
    session_start();
    if (isset($_SESSION['ID'])) {
     echo "member page";
    }
    else {
     echo "not logged in";
    }
    ?>
    simpel niet? ff uitleggen. hij start de functie session met session_start(). daarna kijkt hij of $_SESSION['ID'] bestaat die we in de inlog script geplaatst hebben. wanneer hij er is moet je alles wat met de member te maken heeft erin zetten met echo enzo. anders zegt hij dat hij niet ingelogd is.

    op de member page kun je verschillende scripts plaatsen die je op het internet kan vinden. bijv www . criminalspoint . com (ik verwijder link als het niet mag :p). succes :p

    voorbeeld van mijn game: Gangstah Life
    zelf gemaakt, zonder enige scripts van criminalspoint of iets dergelijks.
     
    Last edited by a moderator: Jan 29, 2010
  2. Laz

    Laz Active Member

    Joined:
    Sep 19, 2006
    Messages:
    1,097
    Likes Received:
    1
    Opzich een redelijkte tutorail. Heb echter alleen wat (hele) belangrijke punten waar je op moet letten.

    Ik neem je tut/script door van boven naar beneden

    1. (stap 2) inlog script

    Ik zie dat je GET gebruikt om dezelfde pagina aan te roepen. Dit raad ik echter af. PHP heeft hier zelf ook een hele leuke functie voor, namelijk $_SERVER['PHP_SELF']
    Je veranderd je form action dan in <form action="<?php echo $_SERVER['PHP_SELF']; ?>">
    Dit is veel makkelijker, mooier en misschien wel wat veiliger.

    Hoe kun je dan kijken of post is verzonden? Dat is niet zo groot punt. Je kunt het bijvoorbeeld controleren door if(isset($_POST) of if(isset($_POST['login']). Wat ik met die laatste bedoel ($_POST['login]) is dat je je submit button een naam geeft, namelijk login. De isset controleert dan of de knop is aangeklikt. Heb je meerdere forms, dan kun je ook een hidden veld met een waarde neerzetten en daar op controleren.


    Dan het volgende punt. Jouw controles.
    Om te kijken of je een result heb van je database query heb ik een tip om weer een regel minder te krijgen in je script. (Het is maar een regel minder, maar elke regel minder is werk minder ;))

    Jij gebruikt een count. Mijn tip is om die result controle gelijk te doen in de if-statement.
    dus dan krijg je het volgende
    PHP:
    if(mysql_num_rows($result) > 1){
        
    // als het aantal rijen groter dan 1 is, dan...
        // wat je ook kan doen is gelijk aan 1, == 1
        // of gelijk of groter dan 1, => 1
    }
    is toch weer een regel en een variable minder.

    2. (stap 3) registrer.php

    Hier hetzelfde als wat ik hierboven noemde, het aanroepen van dezelfde pagina en de controles.

    Verder maak jij hier zelf een fout waardoor ik gewoon 2 verschillende e-mailadres kan invoeren en gewoon wordt geregistreerd.
    PHP:
    $email $_POST['email'];
      
    $email2 $_POST['email'];
    Ik neem aan dat die 2de $_POST['email2'] moet zijn. Het zijn kleine tikfoutjes maar cruciaal voor je website/applicatie.

    Het is ook belangrijk om de ingevoerde emailadressen te controleren, wat je niet doet. Welke functie je hier voor kunt gebruiken is ereg()
    voorbeeld:
    PHP:
    if (! ereg('[A-Za-z0-9_-]+\@[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+'$email)){ 
    }
    Dat was even snel die pagina.

    3. Beveiligde pagina.

    Hier heb ik maar een klein puntje wat niet zo belangrijk is. In dit geval is de beveiligde pagina een homepage maar gerust mag worden getoont dat je niet bent ingelogt. Maar heb jij bepaalde pagina's waar je perse ingelogt moet zijn en dat ze niet zomaar pagina's gaan raden (dus pagina's gaan aanroepen die eventueel kunnen bestaan), dan zou ik als ik jou was de niet ingelogde gebruikers afvangen met:
    PHP:
    if(!isset($_SESSION['id'])){
       
    header("Location: index.php");
    }
    Nou heb wat punten door genomen, hoop dat je er iets aan hebt. Voor een hobby programmeur (weet niet of ik het zo mag noemen) is het niet zo erg dat er zulke fouten worden gemaakt, maar zou je jezelf hierin verder willen gaan, dus echt je baan van willen maken, dan zul je snel op je vingers getikt worden ;)

    Maar, zoals ik al in het begin zei, is het een redelijke tutorial.
     
  3. kieviet

    kieviet +GoW| =N=

    Joined:
    Oct 28, 2008
    Messages:
    1,682
    Likes Received:
    2
    Zal ik mijn script ook even hier neerzetten?? Teminste.. heb ik samen met een vriend gemaakt..
     
  4. Laz

    Laz Active Member

    Joined:
    Sep 19, 2006
    Messages:
    1,097
    Likes Received:
    1
    nee, geen tuts door elkaar gaan plaatsen
     
  5. kieviet

    kieviet +GoW| =N=

    Joined:
    Oct 28, 2008
    Messages:
    1,682
    Likes Received:
    2
  6. mastersem

    mastersem New Member

    Joined:
    Nov 11, 2008
    Messages:
    16
    Likes Received:
    0
    Haha, dit is lang geleden geschreven toen ik nog net begon ;).

    bedankt voor de reacties, ik zal het even aanpassen.

    EDIT: ah kan niet aanpassen xD
     
  7. Laz

    Laz Active Member

    Joined:
    Sep 19, 2006
    Messages:
    1,097
    Likes Received:
    1
    post maar, dan wijzig ik hem wel
     
  8. mastersem

    mastersem New Member

    Joined:
    Nov 11, 2008
    Messages:
    16
    Likes Received:
    0
    Voor deel 2 stap 3:
    Code:
    <?php
    $succes = false;
    if (isset($_REQUEST['login'])) {
     //verkrijg username en de 2 wachtwoorden
     $username = $_POST['username'];
     $pass1 = $_POST['password'];
     $pass2 = $_POST['password2'];
     if ($pass1 == $pass2) {
      //alles is goed, dus we gaan nu password encrypten en emails checken
      $pass = md5($pass1);
      $email = $_POST['email'];
      $email2 = $_POST['email2'];
      //check of email hetzelfde is als email2
      if ($email == $email2) {
       //ze zijn goed dus we gaan checken of email al gebruikt is
       $emaild = mysql_query("SELECT * FROM members WHERE email='".$email."'") or die(mysql_error());
       //we selecteren alle rows van members waar email variable $email is
       if (mysql_num_rows($emaild) == 0) {
        //het email is niet gebruikt, nu gaan we checken of de username al gebruikt is
        $userd = mysql_query("SELECT * FROM members WHERE username='".$username."'") or die(mysql_error());
        //we selecteren alle rows van members waar username $username is
        if (mysql_num_rows($userd) == 0) {
         //username is niet gebruikt, dus we gaan hem erin schrijven
         mysql_query("INSERT INTO members (username,password,email) VALUES ('".$username."','".$pass."','".$email."')") or die(mysql_error());
         echo "succesfully registered";
         $succes = true; //laat het form verdwijnen :P
        }
        else {
         //username is al in gebruik
         echo "username already exists";
        }
       }
       else {
        //email al in gebruik
        echo "email already in use";
       }
      }
      else {
       //emails zijn niet hetzelfde
       echo "email's do not match";
      }
     }
     else {
      //wachtwoorden zijn niet hetzelfde
      echo "password's do not match";
     }
    
    }
    if (!$succes) {
    echo '<form name="login" action="' . $_SERVER['PHP_SELF'] . '" method="post">
    Username: <br />
    <input type="text" name="username">
    <br />Password: <br />
    <input type="password" name="password">
    <br /><input type="submit" name="login" value="login">
    </form>';
    }
    
    btw, van wat je zei over het terugsturen naar index.php als je niet bent ingelogt. je kan de persoon ook naar een pagina sturen waar word vertelt dat je geen toegang hebt. bijv:
    Code:
    if(!isset($_SESSION['id'])){
       header("Location: noacces.php");
    }
    en daarin kan je dan weer bijv. het login script doen met php include:
    Code:
    <?php
    echo "U heeft geen toegang tot deze pagina, u moet eerst ingelogt zijn!<br />";
    include("login.php");
    ?>
    de beveiliging is inderdaad niet perfect. maar dit is om te leren niet om je een heel perfect super login hyper security etc. dat moet je zelf maar doen :p
     
  9. Laz

    Laz Active Member

    Joined:
    Sep 19, 2006
    Messages:
    1,097
    Likes Received:
    1
    ik weet niet meer wat ik allemaal zei, dan moet ik het terug lezen maar daar heb ik (nu) geen zin in :p is allemaal van een jaar geleden.

    Heb nu de code van deel 2 aangepast voor je.
     
  10. mastersem

    mastersem New Member

    Joined:
    Nov 11, 2008
    Messages:
    16
    Likes Received:
    0
    hehe idd, en dit script is zelfs 2 jaar oud ofsow :p
     
  11. DriVeR

    DriVeR New Member

    Joined:
    Feb 9, 2009
    Messages:
    99
    Likes Received:
    0
    Als ik naar mijn site ga (www.exoflyff.com/register.php)
    Krijg ik GEEN registerpage maar login page ? :eek: kan iemand mij met dit probleem helpen? danku
     
  12. LightPhoenix

    LightPhoenix New Member

    Joined:
    Mar 5, 2009
    Messages:
    3
    Likes Received:
    0
    @Laz: inplaats van ereg kun je beter een functie nemen zoals preg of preg_match, ereg is verouderd sinds recente versies van php is dit veranderd :p
     

Share This Page

Loading...