Avatar billede Pkallesoe Nybegynder
26. januar 2010 - 23:09 Der er 16 kommentarer og
1 løsning

Php/msql login - session problem?

Hej,

jeg får følgene fejl:

Parse error: syntax error, unexpected T_INCLUDE in /var/www/login-test.php on line 4

og min kode er:

<?Php
session_start()

include "db.php";


if(!isset($_POST['Submit'])) { //Tester om brugeren kom fra  login.php
    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 `profil` 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['email'] = $postbruger;
        $_SESSION['password'] = $postpass; //Sætter session variablerne
        header("Location:inde.php");


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


Nogen gode ideer til hvorfor?
Avatar billede erikjacobsen Ekspert
26. januar 2010 - 23:17 #1
Du mangler vel et semikolon
Avatar billede Pkallesoe Nybegynder
26. januar 2010 - 23:27 #2
Ah, flot :S

men nu får jeg dette:
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /var/www/login-test.php:1) in /var/www/login-test.php on line 2

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /var/www/login-test.php:1) in /var/www/login-test.php on line 2
Du skal komme fra login.php
Avatar billede erikjacobsen Ekspert
26. januar 2010 - 23:36 #3
Et gæt: der står noget før dit:    <?php

Og det kan være en utf8-bom på 3 tegn, der er "usynlige". Prøv at gemme login-test.php som iso8859-1 i stedet for utf-8.
Avatar billede Pkallesoe Nybegynder
27. januar 2010 - 00:02 #4
Der var selvfølgelig sneget et mellemrum ind.. :S
så nu spiller det :)

Det sidste var jeg ikke helt med på ?
Avatar billede Slettet bruger
27. januar 2010 - 09:15 #5
Advarsel
Du skal huske at escape dine input. Ellers bliver siden sårbar over for SQL Injections.

$filtreret = mysql_real_escape_string($_POST['felt'], $db);
Avatar billede erikjacobsen Ekspert
27. januar 2010 - 10:07 #6
Det med utf-8 kan du så glemme indtil videre.

Man skal ikke begynde at fedte rundt med escaping af input og den slags. Læs http://en.wikipedia.org/wiki/SQL_injection og gå bed til "Parameterized statements" - det er den eneste fornuftige måde at håndtere det problem på.
Avatar billede Pkallesoe Nybegynder
27. januar 2010 - 14:14 #7
super, jeg kigger på det senere i dag, men mange tak - vender nok tilbage da jeg ikke er helt med på hvordan det virker - men i første omgang prøver jeg mig frem
Avatar billede Pkallesoe Nybegynder
27. januar 2010 - 14:41 #8
$db = new PDO('pgsql:dbname=database');
$stmt = $db->prepare("SELECT priv FROM testUsers WHERE username=:username AND password=:password");
$stmt->bindParam(':username', $user);
$stmt->bindParam(':password', $pass);
$stmt->execute();

Jeg kan det ikke helt gemmeskue hvad der er hvad og gør hvad?
$db er det connection til databasen? så jeg ikke skal bruge min include fil?
og når mit password er MD5 encrytet, skal det så stå i feltet? eller skal der bare stå password?
$stmt->bindParam(':username', $user); <- betyder dette at username er gemt som variablen $user eller?
Avatar billede Slettet bruger
27. januar 2010 - 15:05 #9
#6, jeg er uenig. Prepared (eller parameterized) statements er helt klart den sikreste måde, men escaping er også glimrende, når bare det gøres med en databasespecifik funktion, i dette tilfælde mysql_real_escape_string.
Den væsentligste forskel er, at det er lettere blot at indoperere escaping i en eksisterende løsning, og man derfor ikke, som Pkallesoe, bliver rundtosset af kodningsarbejde. (Selvom man selvfølgelig bør starte nye projekter med parameterizing eller preparing.)
Avatar billede Pkallesoe Nybegynder
27. januar 2010 - 16:45 #10
Eftersom jeg er igang med at lave/lærer helt fra bunden - vil jeg være super glad for hvis i kunne forklare mig hvordan man bruger prepared mere præcist :)
Avatar billede Slettet bruger
27. januar 2010 - 20:10 #11
Jeg vil prøve at forklare det linje for linje. Bemærk at det eksempel du skrev bygger på databasen PostgreSQL, og da du bruger MySQL retter jeg det til en smule:

$db = new PDO('mysql:dbname=database'); // Opretter et nyt objekt af klassen PDO, som bruges til at lave query-objekter med. "database" udskiftes med den database du bruger.

$stmt = $db->prepare("SELECT Id FROM 'profil' WHERE brugernavn = :brugernavn AND password = :password"); // Laver et nyt query-objekt (statement-objekt) med to parametre, ":username" og ":password". Disse kan senere erstattes med data.

$stmt->bindParam(':brugernavn', $postbruger); // Erstatter ":brugernavn" med indholdet af $postbruger.

$stmt->bindParam(':password', $postpass); // Erstatter ":password" med indholdet af $postpass.

$stmt->execute(); // Sender query'en til databasen. $postbruger og $postpass bliver først læst her.


Håber det var forståeligt. Ellers må du bare spørge videre.
Avatar billede Pkallesoe Nybegynder
28. januar 2010 - 15:38 #12
Ah, super det hjalp lidt - men er i tvivl om man stadig skal bruge den "normale" måde at connecte til db'sen ved connect, databasenavn, kode og bruger ? eller ?
Avatar billede Slettet bruger
28. januar 2010 - 22:48 #13
Nej, brug hellere den metode der er indbygget i PDO.

$db = new PDO('mysql:dbname=database', 'dbbruger', 'dbkode'); // Opretter et nyt databaseforbindelse til databasen "database" med brugernavnet "dbbruger" og kodeordet "dbkode"
Avatar billede Pkallesoe Nybegynder
29. januar 2010 - 00:23 #14
Super! Mange mange tak, det vil jeg rode videre med !
Avatar billede Slettet bruger
29. januar 2010 - 08:14 #15
Kan vi lukke?
Avatar billede Pkallesoe Nybegynder
06. januar 2011 - 21:44 #16
Ja for satan da, kom helt fra alt det her, pga jeg skulle ud og sejle, og så glemte jeg alt om mit hobby projekt. beklager mange gange, smid et svar og jeg skal give dig de point
Avatar billede Slettet bruger
06. januar 2011 - 23:37 #17
Her får du så et svar :)
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
Computerworld tilbyder specialiserede kurser i database-management

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