Avatar billede larsjansen Nybegynder
21. januar 2010 - 18:32 Der er 1 kommentar og
1 løsning

Forklaring af simpel PHP login kode

Hej

Jeg skal tyde hvad der præcist sker i denne PHP kode.
Er der nogle der kan forklare mig, på !begynder! niveau, hvad der sker, linje for linje? Gerne med (din tekst) i parantes hvor du forklarer. :)

<?php
session_start();
$conn = mysql_connect("localhost", "brugernavn", "password");
mysql_select_db("database"); //Indtast selv de rigtige oplysninger

if(!isset($_POST['Submit'])) { //Tester om brugeren kom fra  login.html
    echo "Du skal komme fra login.php";
    }else{
        $postbruger = $_POST['Brugernavn'];
        $postpass = $_POST['Password'];
//For læservenligheden overføres post variablerne til normale variabler
       
        $resultat = mysql_query("SELECT Id FROM `brugere` WHERE Brugernavn = '$postbruger' AND
Password = '$postpass'");//Spørger efter ID

        $number = mysql_num_rows($resultat);//Tæller antaller af resultater
        if($number == 1) { //Hvis der kun er et resultat, bliver brugeren logget in
        $_SESSION['loget_in'] = 1;
        $_SESSION['Brugernavn'] = $postbruger;
        $_SESSION['Password'] = $postpass; //Sætter session variablerne
        echo "Du er nu logget in";

        }else echo"De indtastede oplysninger er ikke korrekte";
        }
?>
</body>
</html>
22. januar 2010 - 09:44 #1
Nu ved jeg ikke hvor meget begynder niveau du mener.  Hvis jeg fortaeller noget der er indlysende er det ikke for at fornaerme din intelligens.

For det foerste viser du en del af en stoerre kode.  Dine sidste to linier er </body> og </html>, saa der maa tidligere i koden forekomme <html> som fortaeller browseren at det mellem <html> og </html> skal fortolkes som html kode, og <body> som viser browseren at det mellem <body> og </body> er det der skal vises paa siden, til forskel fra det der er i <head></head>.

Saa maa der vaere en anden fil med kode som aabenbart hedder login.php.  Den fil laver en side der maa indeholde en formuler med to input felter, en med navn 'Brugernavn' og en med navn 'Password', og formuleren maa indeholde en sende-knap med navnet 'submit.'  Formuleren maa ogsaa  have en Action instruktion der sender indholdet af formen til din side og goer brug af en metode der hedder POST.

Yderligere maa der vaere en mysql system hvortil du har adgang via et brugernavn og et password.  Mysql'en indeholder, mindst, en database du har adgang til, og databasen indeholder, mindst, en tabel der hedder 'brugere'.  Den tabel indeholder brugernavn og password for brugere, og tabellen har, mindst, tre kolonner, 'ID', 'Brugernavn', og 'Password'.  Der maa saa vaere en anden fil hvor nye brugere kan oprettes og deres brugernavn og password fyldes ind i tabellen.

Saa tilbage til din kode.  Den foerste linie er <?php. Den skal ses i sammenhaeng med ?> i tredje sidste linie.  Naar din side bliver sendt til serveren saa vil serveren fortolke afsnittet mellem <?php og ?> som instruktioner i php sproget. Jeg retter lige paa opstillingen.  Saa kan jeg selv lettere finde rundt i det, og du maaske ogsaa.  Fordi pladsen er snaever her kommer der nogle forstyrrende linieskift.  Hvis du kopierer det til en fuld-side Notepad kommer strukturen forhaabenlig tilbage.

<?php
session_start();
$conn = mysql_connect("localhost", "brugernavn", "password");
mysql_select_db("database"); //Indtast selv de rigtige oplysninger

if(!isset($_POST['Submit']))
{ //Tester om brugeren kom fra  login.html
  echo "Du skal komme fra login.php";
}
else
{
  $postbruger = $_POST['Brugernavn'];
  $postpass = $_POST['Password'];
  //For læservenligheden overføres post variablerne til normale variabler
     
  $resultat = mysql_query("SELECT Id FROM `brugere` WHERE Brugernavn = '$postbruger' AND Password = '$postpass'");//Spørger efter ID
  $number = mysql_num_rows($resultat);//Tæller antaller af resultater

  if($number == 1)
  {
    //Hvis der kun er et resultat, bliver brugeren logget in
    $_SESSION['loget_in'] = 1;
    $_SESSION['Brugernavn'] = $postbruger;
    $_SESSION['Password'] = $postpass; //Sætter session variablerne
    echo "Du er nu logget in";

  }
  else echo"De indtastede oplysninger er ikke korrekte";
}
?>

1.  Lidt terminologi.  ! betyder 'ikke', echo betyder 'skriv', isset betyder 'eksisterer'.  Det der staar mellem en { og en } er blokke af instruktioner som hoerer sammen. Det der staar efter // er kommentarer der ikke udfoeres.

2.  I linien session_start() instruerer du serveren til at oprette en session for det det foelger.  Senere i koden kommer der instruktioner om at saette brugernavn og password i sessionen saa den kan komme i gang.

3.  I de foelgende to linier instruerer du serveren om at connecte dig til mysql'en og aabne den database hvor tabellen befinder sig.  Til det skal der bruges oplysninger om hvor mysql'en befinder sig (her "localhost" hvilket tyder paa at den sidder paa din egen computer) brugernavn og et password hvilke du ikke roeber her, og navnet paa databasen som du skal fylde ind.  Her skal du lige passe paa - det drejer sig om dit eget brugernavn og password, ikke at forveksle med det der staar i tabellen i kolonnerne 'Brugernavn' og 'Password'.  Naar serveren udfoerer de instruktioner sender den et svar tilbage (i.e. 'det lykkedes'.)  Det svar bevarer du i en variabel $conn.

4.  Saa er det meningen at den tidligere side, som maa eksistere og maa indeholde den omtalte formular, at den side skal sende en stroem af data til din side.  I det foelgende tester du om det er sket.  Hvis nej saa skriver du en fejlmelding "Du skal komme fra login.php".  Hvis ja saa laeser du det modtagne og goer noget ved det.  Hvis du har modtaget noget saa vil der eksistere en variabel med navn $_POST['Submit'].  Hvis den eksisterer, saa vil der ogsaa vaere to andre variable, $_POST['Brugernavn'] og $_POST['Password'].  De er blevet skabt ved at indfylde formuleren fra den tidligere side hvor input felterne netop hed 'Brugernavn' og 'Password'.  Indholdet af $_POST['Brugernavn'] flytter du over i en ny variable $postbruger fordi det kortere, og ligeledes med $postpass.

5.  Kommet hertil vil du undersoege om det modtagne brugernavn og password staar i database-tabellen.  Du skriver en forespoergsel til mysql, mysql_query, hvor du beder om at faa id'en for alle de linier i tabellen der har brugernavn og password ligesom de du lige har modtaget.  Den kode, et eller andet sted, der opretter nye brugerer soerger aabenbart for at der ikke kommer duplikater i databasen, saa der er to muligheder:  du vil enten faa 0 svar eller du vil faa 1 svar.  Hvis du faar 1 svar saa koerer du videre, ellers saa afviser du med fejlmeldingen "De intastede oplysninger er ikke korrekte".  Men jeg er kommet forud.

6.  I det Structured Query Language, SQL, ville forespoergslen lyde, for eksempel:  SELECT id FROM brugere WHERE Brugernavn = "Klodshans" AND Password = "abcde."  Det passer du ind php-sproget og indsaetter de oplysninger du har modtaget og gemt i variabelerne $postbruger og $postpass.  Resultatet af forespoergslen gemmer du i variabelen $resultat.

7.  Saa laver du en ny variabel, $number, hvor du gemmer det antal linier $resultat indeholder, $number = mysql_num_rows($resultat).  Som sagt, hvis det antal er 1 saa instruerer du serveren til at udfylde $_SESSION med det modtagne brugernavn og password. Ellers skriver du, echoer du, en fejlmelding.

Jeg haaber det er nyttigt.  Er det ogsaa til eksamen?
Avatar billede larsjansen Nybegynder
22. januar 2010 - 17:30 #2
Igen. Udført hjælp!
Det er noget af et arbejde du lægger i det! Forstår det meget bedre nu! og ja, det er til eksamen også :)

Svar accepteret! Og mange tak endnu engang!
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
Kurser inden for grundlæggende programmering

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