Avatar billede benjaboy Nybegynder
05. juni 2009 - 12:17 Der 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);

$username=$_POST['username'];
$password=$_POST['password'];

$sql="SELECT * FROM $tbl WHERE username='".$username."' and password='".$password."'";
$result=mysql_query($sql);
$count=mysql_num_rows($result);
if($count==1){

session_start();
$_SESSION["logged"] = 1;
header("location:index.php");
} else {

$_SESSION["logged"] = 0;
header("location:login.php");
}

?> 

Men den kommer med disse 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 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

En der kan hjælpe?
Avatar billede erikjacobsen Ekspert
05. juni 2009 - 12:19 #1
Prøv at få at vide hvad der er galt med din sql:

  $result=mysql_query($sql) or die(mysql_error());

Og lad være med at lægge det på nettet, til fri afbenyttelse, indtil du ved alt om at undgå sql-injections.
Avatar billede beef12 Nybegynder
05. juni 2009 - 12:24 #2
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.
Avatar billede benjaboy Nybegynder
05. juni 2009 - 12:25 #3
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.
Avatar billede benjaboy Nybegynder
05. juni 2009 - 12:30 #4
Ja det var rigtigt nok det med $tbl.

Men forstår ikke det andet i skriver?
Avatar billede erikjacobsen Ekspert
05. juni 2009 - 12:35 #5
Din SQL-fejl er jo nok som anført, at $tbl er tom.

SQL-injections? Hvis du ikke ved noget om det, så vil du jo nok blivet hacket en dag.
Avatar billede benjaboy Nybegynder
05. juni 2009 - 12:50 #6
Har nu fundet ud af hvad SQL-injections er.
Har du et råd eller et link til en god atikel hvor der står noget i om hvordan man beskytter sig :)?

Mvh Benjamin
Avatar billede grippen Nybegynder
05. juni 2009 - 12:56 #7
evt brug mysql_real_escape_string()
Avatar billede benjaboy Nybegynder
05. juni 2009 - 13:07 #8
Skal den så se sådan her ud eller hvordan fungere det der mysql_real_escape_string()?

$username=$_POST['username'];
$password=$_POST['password'];
$username1 = mysql_real_escape_string($username)
$password1 = mysql_real_escape_string($password)
Avatar billede erikjacobsen Ekspert
05. juni 2009 - 13:13 #9
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.
Avatar billede 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)."'";
Avatar billede 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.
Avatar billede benjaboy Nybegynder
05. juni 2009 - 13:25 #12
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
Avatar billede dkfire Nybegynder
05. juni 2009 - 13:46 #13
Du har ikke giver mysql_num_rows() den rigtige variable.
Du skal give den $sql og ikke $result

$count=mysql_num_rows($sql);
Avatar billede benjaboy Nybegynder
05. juni 2009 - 13:56 #14
Her er linje 13-15:

$sql = "SELECT * FROM ".$tbl." WHERE username= '".mysql_real_escape_string($username)."' and password  ='".mysql_real_escape_string($password)."'";
$count = mysql_num_rows($sql);
if($count==1){

Og den samme fejl komme stadig.

Mvh Benjamin
Avatar billede dkfire Nybegynder
05. juni 2009 - 14:30 #15
Mig der lige overså noget :-(

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 ?
Avatar billede 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.
Avatar billede benjaboy Nybegynder
05. juni 2009 - 22:44 #17
Tak.

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

-------------------
dette er 18 til 20

session_start();
$_SESSION["logged"] = 1;
header("location:index.php");
Avatar billede dkfire Nybegynder
05. juni 2009 - 23:30 #18
Hvad har du på linje 2 ?
Avatar billede benjaboy Nybegynder
05. juni 2009 - 23:37 #19
$tbl = "members";
Avatar billede dkfire Nybegynder
05. juni 2009 - 23:42 #20
Prøv at vise os hele din side login.php ?
for der er noget som skriver ud til browseren.
Avatar billede benjaboy Nybegynder
05. juni 2009 - 23:47 #21
Her er hele koden:

<?php
include("style/top.php");
$tbl = "members";

$username = $_POST['username'];
$password = $_POST['password'];
$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); 
if($count==1){

session_start();
$_SESSION["logged"] = 1;
header("location:index.php");
} else {

$_SESSION["logged"] = 0;
//header("location:login.php");
echo"Du er ikke logget ind. Der er sket en fejl!";
}

?>    </div><?
include("style/bund.php");
?>
Avatar billede dkfire Nybegynder
05. juni 2009 - 23:51 #22
Hvad laver top.php ?
Har du nogen form for tomme linjer eller andet før din første <?php ?
Avatar billede benjaboy Nybegynder
05. juni 2009 - 23:53 #23
Nej har jeg ikke.
Den laver top designet.
Vil du gerne se den også?
Avatar billede dkfire Nybegynder
05. juni 2009 - 23:57 #24
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.
Avatar billede benjaboy Nybegynder
05. juni 2009 - 23:57 #25
Denne kommer med disse 2 fejl:

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
Avatar billede benjaboy Nybegynder
06. juni 2009 - 00:00 #26
Hey tak nu virker det sku! :)
Avatar billede dkfire Nybegynder
06. juni 2009 - 00:04 #27
En god huskeregel: Hav så meget php kode som muligt før noget design.
Avatar billede benjaboy Nybegynder
06. juni 2009 - 00:06 #28
ja tak for rådet.

Hmm. nyt problem.
hvordan gør jeg så lige sådan at jeg kan se på andre sider at jeg er logget ind?
Avatar billede benjaboy Nybegynder
06. juni 2009 - 00:28 #29
Har fundet ud af det nu :)
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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