Avatar billede php-nybegynderen Nybegynder
05. april 2006 - 21:58 Der er 6 kommentarer

Login / CMS

Den kunne ligeså godt have været under MySQL, men tror nu det er her den hører til.

Jeg er nybegynder i PHP, og kan derfor ikke lave noget der er særlig beskyttet, men nu er jeg så gået i gang med at lave et ubeskyttet login system.

Jeg starter meget simpelt med min form:

(login.php)
<form method='post' action='login-check.php'>
<input type='username' name='brugernavn' value='brugernavn'><br>
<input type='password' name='password' value='password'><br>
<input type='submit' value="Log ind">

Så kommer min tjekker:

(login-check.php)
    if(!isset($_REQUEST["brugernavn"]) OR !isset($_REQUEST["password"])) {
    echo "Ingen adgang.";
    exit; }

    else {

    $brugernavn = "admin";
    $password = "mikkel123";

    if($_REQUEST["brugernavn"] != $brugernavn OR $_REQUEST["password"] != $password) {
    echo "Forkert brugernavn eller password.";
    exit; }

    else {

    include("database.php");

    if($_REQUEST["brugernavn"] = $brugernavn && $_REQUEST["password"] = $password) {
    mysql_query("update admin set admin='1'") or die(mysql_error());
    header("location: admin.php");
    exit; } } }

Oveni det er der selvfølgelig <?php ?>, men det er ikke med her.

Min idé med det er at når man logger ind, så sættes den til 1 = at admin systemet er aktiveret, så alle systemer i CMS'en er mulige at benytte. Jeg ved godt i kan alt mulig smartere, i kunne evt. skrive det her. Men i hvert fald vil jeg prøve at gå videre.

Jeg bliver så sendt ind til (admin.php), hvor alle siderne står, så jeg kan redigere og hvad jeg vil.

<?php

    include("database.php");
    mysql_query("update admin set admin='$admin'") or die(mysql_error());

    if($admin != 1) {
    echo "Ingen adgang.";
    exit; }

    else {

?>

<html>

<head>
</head>

<body>
<p>HEJ</p>
</body>

</html>

<?php

}

?>

Ligemeget om jeg er logget ind eller ej, så siger den Ingen adgang. Jeg har efterfølgende tænkt mig, at admin sætter sig til 0, når man logger ud. Derudover er alle sider i CMS systemet sat til target='_blank' - Så det er en popup. Jeg er ret sikker på det er en fejl i det at jeg sætter den til 1 og måske også den måde jeg hiver den ud i min redigeringsside. Nogen der kan hjælpe?

Hilsen Mikkel.
Avatar billede terrak Nybegynder
05. april 2006 - 22:31 #1
Husk 2x lighedstegn når du sammenligner:
if($_REQUEST["brugernavn"] == $brugernavn && $_REQUEST["password"] == $password) {

http://dk2.php.net/operators

Og så synes jeg også du skulle overveje at bruge $_POST til at hente dine "POST" data, i stedet for $_REQUEST. Det gør det lidt lettere at holde styr på, hvor variablerne kommer fra. Se evt
http://dk2.php.net/manual/en/reserved.variables.php


.. og så synes jeg at det er stærkt, at du selv vil lære det hele fra bunden, uden alt mulig smart kode fra os - bliv ved med det :-)
Avatar billede php-nybegynderen Nybegynder
06. april 2006 - 19:47 #2
Heh ;)

POST betyder vel ikke så meget i forhold til at det burde virke, men i hvert fald. Kan godt se at det kan være nemmere :P (tak)

Havde godt overvejet om man skulle sætte ==, men endte ikke ud med det.

Men det er vel ikke det, der gør at "scriptet" ikke virker? Jeg er ret sikker på at det er det med at sætte admin til 1 / 0. Jeg kan bare ikke selv finde fejlen, ved ikke så meget om det, men er ud fra min logiske forstand kommet frem til det der.

Ved ikke om nogen lige vil kigge lidt på de her linjer:



    mysql_query("update admin set admin='$admin'") or die(mysql_error());

    if($admin != 1) {
Avatar billede php-nybegynderen Nybegynder
06. april 2006 - 19:47 #3
if($_REQUEST["brugernavn"] = $brugernavn && $_REQUEST["password"] = $password) {
    mysql_query("update admin set admin='1'") or die(mysql_error());

Jeg kom til at sende for tidligt :/
Avatar billede terrak Nybegynder
06. april 2006 - 20:04 #4
mysql_query("update admin set admin='".$admin."'") or die(mysql_error());

..har du forbundet til databasen med mysql_connect()?
http://dk2.php.net/mysql_connect

Hvor bliver $admin sat?
Avatar billede php-nybegynderen Nybegynder
06. april 2006 - 22:02 #5
(database.php)
<?php

    $host = "...";
    $user = "...";
    $pass = "...";
    $db = "...";
    $connection = mysql_connect($host,$user,$pass);
    mysql_select_db("$db", $connection);

?>

Jamen - Regner med at admin i databasen bliver lavet om til $admin i min kodning. Således at når jeg skriver hvis den er 1, så kan man komme ind på en af admin siderne. Jeg har sat admin til varchar(1) i databasen med standardværdi på 0.
Avatar billede terrak Nybegynder
06. april 2006 - 23:29 #6
Det din sql-kode gør nu, er at den opdaterer tabellen `admin` og sætter feltet `admin` lig værdien af PHP-variablen $admin, hvis det er det du er ude på, så skulle det gerne virke. Jeg kan dog stadig ikke se hvor der står noget med
$admin = ....

Prøv evt:
if(isset($admin)) {

if ($admin != 1) {
echo "Ingen adgang.";
exit;
}

} else {
die("variablen 'admin' er ikke sat!");
}

Hvis du ikke har
mysql_connect("host","brugernavn","kodeord");
i din kode, har du ikke oprettet en forbindelse til MySQL-serveren og kan derfor hverken læse eller skrive til databasen. Hvorfor ikke?  - Fordi så kunne alle forbinde til din MySQL-server og skrive og læse i din databasen, hvilket ikke er hensigtsmæssigt.
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