Gå til innhold

Logg-Inn script: 2-spørsmål


Gjest medlem-77217

Anbefalte innlegg

Gjest medlem-77217
Skrevet

Heisann!

 

Jeg har to problemer som jeg tenkte jeg skulle få fikset her.

 

#1:

----

 

Jeg har en innloggings kode som er bassert på flatfile, men som jeg nå skal gjøre om til mysql. Jeg har kommet fram til noe slikt:

 

$query = mysql_query("SELECT navn FROM db") or die(mysql_error());
$brukerdata = $_POST['query'];
$query2 = mysql_query("SELECT pass FROM db") or die(mysql_error());
$passorddata = $_POST['query2'];

 

 

#2:

----

 

Jeg vil også at folk må logge inn før de kan bruke diverse funksjoner jeg har på siden min, men hvordan gjør jeg dette?

Videoannonse
Annonse
Gjest medlem-77217
Skrevet

#1:

 

Kan du gi meg et forklart eksempel? Ble veldig usikker nå.

 

Å hva mener du med at jeg har missforstått mysql? Jeg har ikke tatt med connectingen til databasen hvis det er det du tenker på... Det har jeg en egen fil for.

 

#2:

 

Takker, ser greit ut.

Skrevet

Det ser ut som at du henter ut tabell fra database. Du skal hente ut kolonne fra tabell. Har du én tabell med to kolonner (bruker og pass) eller to tabeller (bruker og pass) med én kolonne hver?

SQL-syntaksen er:

SELECT kolonne FROM tabell

og for flere kolonner:

SELECT kolonne1, kolonne2, kolonne3 FROM tabell

Gjest medlem-77217
Skrevet

Jeg er helt forvirret nå. La meg prøve å forklare hvordan jeg tror det er.

 

Database

-Tabell

--Kolonne

 

Så når du har SELECT kolonnen (som da f.eks er pass VARCHAR (1) NOT NULL) FROM tabllen (som da er db). I dette tilfellet har jeg 1 tabell med to kolonner.

-----

 

Men kan du ikke skrive en snurt som henter info fra mysql og sammenligner det med $_POST funksjonen? Hadde satt pris på det.

Skrevet (endret)

Du kalte tabellen for db (database), og kjørte nesten samme spørringen mot databasen to ganger. Derfor begynte jeg å tvile.

PHP
<?php

// Uskadeliggjør brukernavn

$username mysql_real_escape_string($_POST['user']);

 

// Kjør spørring

$result mysql_query("SELECT name, pass FROM db WHERE name = '{$username}' LIMIT 1");

 

// Hent ut data fra resultatet og lag array av det.

$user_data mysql_fetch_assoc($result);

 

// Hvis passord fra database er lik passord i POST

if ($user_data['pass'] === $_POST['pass']) {

// LOGG INN

} else {

// Passord eller brukernavn er feil

}

?>

Veldig enkel MySQL og PHP hvis man har satt seg inn i bruken av dem.

 

Edit: Men å lagre brukernes passord i klartekst er ikke veldig sikkert. Da kan enten du eller en cracker fort misbruke dem. Selv ville jeg vært så ærlig mot brukerne at jeg hadde både saltet og hashet passordene.

Hvis det er et system der flere brukere skal registrere seg da, og ikke bare du.

Endret av endrebjorsvik
Skrevet (endret)

<?php

// henter data fra DB
$res = $db->query('SELECT * FROM tabell');

// henter data ut fra DB-resultatet (første raden)
$row = $res->fetch_assoc();
// $row er da en array som inneholder alle kolonnene i den første raden

// sammenlign med POSTDATA
if($row['kolonne'] == $_POST['var']) {
 // putt hva som helst her
}

 

EDIT: var vist ikke rask nok

Endret av PHPdude
Gjest medlem-77217
Skrevet
Du kalte tabellen for db (database), og kjørte nesten samme spørringen mot databasen to ganger. Derfor begynte jeg å tvile.

PHP
<?php

// Uskadeliggjør brukernavn

$username mysql_real_escape_string($_POST['user']);

 

// Kjør spørring

$result mysql_query("SELECT name, pass FROM db WHERE name = '{$username}' LIMIT 1");

 

// Hent ut data fra resultatet og lag array av det.

$user_data mysql_fetch_assoc($result);

 

// Hvis passord fra database er lik passord i POST

if ($user_data['pass'] === $_POST['pass']) {

// LOGG INN

} else {

// Passord eller brukernavn er feil

}

?>

Veldig enkel MySQL og PHP hvis man har satt seg inn i bruken av dem.

 

Edit: Men å lagre brukernes passord i klartekst er ikke veldig sikkert. Da kan enten du eller en cracker fort misbruke dem. Selv ville jeg vært så ærlig mot brukerne at jeg hadde både saltet og hashet passordene.

Hvis det er et system der flere brukere skal registrere seg da, og ikke bare du.

7272133[/snapback]

Men hvordan crypter jeg passord da?

Skrevet (endret)

$crypted = sha1($password);

 

EDIT: Bare så det er klart snakker vi ikke om kryptering her, men om "hashing". Dette er en ureverserbar prosess i motsetning til kryptert tekst som kan dekrypteres

Endret av PHPdude
Gjest medlem-77217
Skrevet

Så da blir det ca:

 

<?php
$username = mysql_real_escape_string($_POST['user']);
$crypted = sha1($username);

$result = mysql_query("SELECT name, pass FROM db WHERE name = '{$crypted}' LIMIT 1");

$user_data = mysql_fetch_assoc($result);

if ($user_data['pass'] === $_POST['pass']) {

} else {
echo "Feil! HAHAHHAHH! DUST!|111";
}
?>

<form name="sporring" method="post" action="innlogging.php" enctype="multipart/form-data">
Brukernavn:  
<input type="text" name="username" maxlength="30">
<br>
Passord:       
<input type="password" name="pass" maxlength="30">
<br>
<input type="submit" value="Logg inn">
</form>

Gjest medlem-77217
Skrevet

Blir det to mysql_real_escape_string da eller?

 

<?php
$password = mysql_real_escape_string($_POST['password']);
$crypted = sha1($password);
?>

Skrevet (endret)

Det er unødvendig å hashe brukernavnet.

Du trenger ikke å kjøre mysql_real_escape_string() på strenger som ikke skal inn i en databasespørring.

Endret av endrebjorsvik
Gjest medlem-77217
Skrevet

Men både brukernavnet å passordet skal jo inn i en databasespørring :( Og jeg hasher ikke brukernavnet der gjør jeg?

Skrevet

All data som skal inn i en SQL-spørring må escapes, dette er VELDIG viktig, med mindre du er HELT sikker på at den ikke kan inneholde farlige tegn.

Men bare passordet skal hashes ja, ikke brukernavnet.

Gjest medlem-77217
Skrevet

Men hvor skal jeg da plassere crypteringen i denne koden?

 

<?php
// Uskadeliggjør brukernavn
$username = mysql_real_escape_string($_POST['user']);

// Kjør spørring
$result = mysql_query(\"SELECT name, pass FROM db WHERE name = '{$username}' LIMIT 1\");

// Hent ut data fra resultatet og lag array av det.
$user_data = mysql_fetch_assoc($result);

// Hvis passord fra database er lik passord i POST
if ($user_data['pass'] === $_POST['pass']) {
 // LOGG INN
} else {
 // Passord eller brukernavn er feil
}
?>

Skrevet
<?php
// Uskadeliggjør brukernavn
$username = mysql_real_escape_string($_POST['user']);

// Kjør spørring
$result = mysql_query(\"SELECT name, pass FROM db WHERE name = '{$username}' LIMIT 1\");

// Hent ut data fra resultatet og lag array av det.
$user_data = mysql_fetch_assoc($result);

// Hvis passord fra database er lik passord i POST
if ($user_data['pass'] === sha1($_POST['pass'])) {
 // LOGG INN
} else {
 // Passord eller brukernavn er feil
}
?>

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...