05. juni 2009 - 12:17Der er
28 kommentarer og 1 løsning
Hjælp til login script
Hejsa.
Jeg er ved og prøve noget nyt. Jeg har altid kørt med færdige login systemer men nu har jeg lavet en hjemmeside unden men vil gerne have et admin login til den.
Så har denne kode der skal logge en ind:
<?php $mysql_host = ""; //her skriver du host til mysql. $mysql_user = ""; //skriv brugernavn til mysql, default root. $mysql_pw = ""; //skriv dit password til mysql. $mysql_db = ""; //skriv databasen du vil bruge her. mysql_connect($mysql_host, $mysql_user, $mysql_pw); mysql_select_db($mysql_db);
$sql="SELECT * FROM $tbl WHERE username='".$username."' and password='".$password."'"; $result=mysql_query($sql); $count=mysql_num_rows($result); if($count==1){
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /usr/home/web/web335179/benjaboy.dk/test/test/test1/login.php on line 15
Warning: Cannot modify header information - headers already sent by (output started at /usr/home/web/web335179/benjaboy.dk/test/test/test1/login.php:2) in /usr/home/web/web335179/benjaboy.dk/test/test/test1/login.php on line 24
Har du ikke glemt at definere $tbl? Eller er den defineret udenfor din copy/paste zone?
Nu er det godt nok længe siden at jeg har kodet php, men du skal (mener jeg huske) benytte strip_slashes eller noget i den dur for at forhindre sql injections i dit tilfælde her.
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE username='admin' and password='Password'' at line 1
Hvad mener du med? Og lad være med at lægge det på nettet, til fri afbenyttelse, indtil du ved alt om at undgå sql-injections.
Det er gammeldags - men måske sikkert nok. Man skal bruge mysqli (eller PDO) med prepared-statements. Men læs om sql-injections - det kan ikke forklares kort her.
Synes godt om
Slettet bruger
05. juni 2009 - 13:19#10
Ja mysql_real_escape_string() er fint nok at bruge.
Dette behøves dog ikke: $username=$_POST['username']; $password=$_POST['password']; $username1 = mysql_real_escape_string($username) $password1 = mysql_real_escape_string($password)
Altid husk at gøre det i dit SQL: $sql="SELECT * FROM ".$tbl." WHERE username= '".mysql_real_escape_string($username)."' and password ='".mysql_real_escape_string($password)."'";
Synes godt om
Slettet bruger
05. juni 2009 - 13:20#11
SQL Injections for at gøre det ultra, ultra kort - gør at jeg ville f.eks. kunne skrive som bruger navn: 'DROP DATABASE, og så ville den udføre den kommando.
Oka tak for hjælpen. Bare smid nogle. Lige kort den kommer med denne fejl: Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /usr/home/web/web335179/benjaboy.dk/test/test/test1/login.php on line 14
Prøv: $sql = "SELECT * FROM ".$tbl." WHERE username= '".mysql_real_escape_string($username)."' and password ='".mysql_real_escape_string($password)."'"; $result=mysql_query($sql) or die(mysql_error()); $count=mysql_num_rows($result);
Har du huske at sætte $tbl til et navn på din tabel ?
Synes godt om
Slettet bruger
05. juni 2009 - 16:05#16
Jeg ville nok lade password være en MD5 Hash eller Sha1. Så er det en tand mere sikkert.
Ja det har jeg men nu er problemet; session_start();
For disse fejl: Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /usr/home/web/web335179/benjaboy.dk/test/test/test1/login.php:2) in /usr/home/web/web335179/benjaboy.dk/test/test/test1/login.php on line 18
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /usr/home/web/web335179/benjaboy.dk/test/test/test1/login.php:2) in /usr/home/web/web335179/benjaboy.dk/test/test/test1/login.php on line 18
Warning: Cannot modify header information - headers already sent by (output started at /usr/home/web/web335179/benjaboy.dk/test/test/test1/login.php:2) in /usr/home/web/web335179/benjaboy.dk/test/test/test1/login.php on line 20
Det behøver jeg ikke. Du må ikke har skrevet noget som helst, INTET html, til browseren før du kalder session_start() eller header()!
Efter som din top sikkert udskriver noget html til browseren, kan du ikke kalde session_start() eller header() efterfølgende. Da du ikke skal bruge dit design til noget behøver du jo ikke inkludere top.php eller bund.php.
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /usr/home/web/web335179/benjaboy.dk/test/test/test1/style/top.php:3) in /usr/home/web/web335179/benjaboy.dk/test/test/test1/login.php on line 12
Warning: Cannot modify header information - headers already sent by (output started at /usr/home/web/web335179/benjaboy.dk/test/test/test1/style/top.php:3) in /usr/home/web/web335179/benjaboy.dk/test/test/test1/login.php on line 14
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.