Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  7 730
Hei

Jeg trenger litt hjelp til et innloggings-script jeg lageri php og mysql

Det jeg har av php:

- index.php
- konfigurer.php
- ontop/index.php

logginnform.php :

Kode

<form action="<?php $_SERVER['PHP_SELF'] ?>" method="post">
<table border="0" align="center">
	<tr>
    	<td>Brukernavn</td><td><input type="text" name="brukernavn" /></td>
    </tr>
    	<tr>
        	<td>Passord</td><td><input type="password" name="passord" /></td>
        </tr>
        	<tr>
            	<td>&nbsp;</td><td><input type="submit" name="logginn" value="Logg inn" /></td>
        </tr>
</table>

</form>
ont_brukere tabellen:

Kode

CREATE TABLE ont_brukere (
brukerid int primary key not null auto_increment,
navn varchar(20) not null,
etternavn varchar(20) not null,
brukernavn varchar(25) not null,
passord varchar(255) not null,
epost varchar(40) not null,
datoreg varchar(20) not null
)
Spørringen jeg brukte når jeg skulle registrere den midlertidlige brukeren:

Kode

INSERT INTO ont_brukere (navn, etternavn, brukernavn, passord, epost, datoreg)
VALUE ('Daniel', 'Lurås', 'ONTOP', '1d0e893c24c85ed9b0117cb16dw4ec2', 'tnd@thenordicdj.com', '5. Desember 2007');
Jeg sliter med å finne feilen. Noen som ser noen feil i den?
Kan også være greit om jeg kunne fått litt hjelp til sikkerheten her

Takker på forhånd

Mvh Daniel
Nøyaktiv hva er det som gjør at du mener det er feil her? Gjør det litt enklere for oss å vite om det er logikk, syntax eller databasefeil vi leter etter.
Når jeg skriver inn brukernavnet ONTOP og passordet *** etc.. Får jeg opp "Du er ikke logget inn!".
Istedet for å gå ut ifra at if(!$brukere['brukernavn']) funker som en boolean, bør du sjekke med isset() eller != NULL på arrayelementet. Kan i alle fall begynne med det og ta det derifra.

Edit: For ordensskyld, kan det sikkert være en lur ting å bruke sessions for øyeblikket. For det scriptet ditt så litt... Skummelt ut, med cookie. I alle fal hva injections angår.
Sist endret av m0b; 5. desember 2007 kl. 02:05.
Har gjort som du sa, og jeg får opp meldingen "Du skrev inn feil passord!".

edit:
Mener du at jeg bare skal endre alt fra cookies til sessions?
Sist endret av boblesaft; 5. desember 2007 kl. 02:07.
Stemmer.

Vel, nå ser du at den i alle fall kommer så langt som å kjøre igang sjekkingen. Kjør print_r på både $passord og $sqldata arrayet ditt og se hvilke verdier som ligger der. Har den fått hentet ut verdiene slik du forventer?

Hvis ikke kan du gjerne endre spørringen til

Kode

SELECT * FROM `ont_brukere` WHERE `brukernavn` = '%s';
Forøvrig... "Hvis ikke $sqldata['passord'] ikke er lik $passord, så er passordet feil." Kanskje en logisk brist her?

Kode

if(!$sqldata['passord']!=$passord)
Hvis du skal bruke ! som prefiks til uttrykket og du skal ha det til å stemme så vil det korrekte være å gjøre:

Kode

if( !($sqldata['passord'] === $passord) )
Men det mest korrekte som du leter etter er:

Kode

if( $sqldata['passord'] !== $passord )
Uansett, prøv å benytt !==, eller strcmp() når du sammenligner strenger. Dette er binary-safe og gir deg masse cigar. Men husk at strcmp returnerer 0 dersom strengene du sammenligner er like.
Sist endret av m0b; 5. desember 2007 kl. 02:26.
|d13m0b:
hehe, hvordan ! har kommet før $sqldata aner jeg ikke For jeg vet jo meget godt at den ikke skal være der.
Jeg fjernet den, og nå funker det i hvert fall
Jeg skal prøve meg litt frem med = tegnende, så skal jeg se hva jeg får frem
Jeg bruker også sessions nå og det funker strålende

Jeg fikk også noen gode forslag fra Dyret om PHP_SELF, exit etter header i forhold til sikkerhet
Noen andre sikkerhetsmessige forslag?

Mvh Daniel
Sist endret av boblesaft; 5. desember 2007 kl. 02:46.
Trigonoceps occipita
vidarlo's Avatar
Donor
Ikkje sikkerhetsmessig, men bruk et standardisert datoformat. Eg bruker enten unix-timestamps i varchar-felt (av lathet) eller dato-felttypen i mysql, litt avhengig av bruksområdet. Fordelen med å bruke det er at du då lett kan vise t.d "Registrert for 129 dager siden", spesielt om du bruker mysql-datafeltet for dato. Då kan du bruke NOW() - `date`