[ Flo @ 26.10.2012. 13:06 ] @
Imam jedan problem oko promene lozinke korisnika.
napravio sam formu za izmenu podataka i izgleda ovako:
Code:

<form action="korisnici-izmena-db.php" method="post">
<input type="hidden" name="ID" value="<?php echo $korisnici->ID; ?>" />
            
<input name="ime" type="text" id="ime" value="<?php echo $korisnici->ime; ?>" size="28" />
<input name="username" type="text" id="username" value="<?php echo $korisnici->username; ?>" size="28" />
<input name="email" type="text" id="komercijalna24" value="<?php echo $korisnici->email; ?>" size="28" />
<input name="telefon" type="text" id="telefon" value="<?php echo $korisnici->telefon; ?>" size="28" />
<button type="submit">Izmeni podatke</button></p>
</form>

stranica "korisnici-izmena-db.php" izgleda ovako:
Code:

<?php

// Povezivanje na server BP
$DB = mysql_connect('moj_server', 'korisnicko_ime', 'lozinka');
if (!$DB) die('Problem sa povezivanjem na server BP.');

// Izbor radne BP
if (!mysql_select_db('ime_baze')) die('Problem sa izborom radne BP.');

// Normalizacija ulaznih podataka
$ID = (int) $_REQUEST['ID'];
$ime = mysql_real_escape_string($_REQUEST['ime']);
$username = mysql_real_escape_string($_REQUEST['username']);
$email = mysql_real_escape_string($_REQUEST['email']);
$telefon = mysql_real_escape_string($_REQUEST['telefon']);


// Formiranje upita i izmena podataka korisnika
$Upit = "update korisnici set ime='$ime', username='$username', email='$email', telefon='$telefon' where ID=$ID;";
$Rezultat = mysql_query($Upit, $DB);
if (mysql_error($DB)) die(mysql_error($DB));

// Preusmeravanje korisnika na index.php
die(header('Location: index.php'));

?>

U bazi podataka imam i kolonu CryptedPass gde je smestena lozinka koju hocu da takodje namestim da moze da se promeni.
znaci da napravim stranicu gde ce se uneti trenutna zatim uneti nova lozinka i usnimiti.
Unapred zahvalan
[ ivan.a @ 26.10.2012. 18:58 ] @
Kriptovanu lozinku za upis u bazu generišeš na isti način kao kada se korisnik registrovao na sajt.
Za dodavanje u bazu podataka koristiš istu metodu kao sa primera iznad (samo što prvo kriptuješ lozinku nekom svojom metodom, za koju nisi stavio primer). Dakle, kada se registruje koristiš INSERT, kada menja lozinku UPDATE i to je to.

Inače, ova forma ti uopšte nije sigurna. Jedan od propusta:
mogu ručno izmeniti ID korisnika (hidden polje) i promeniti bilo čije podatke.

Takođe, dobro je koristiti trim() funkciju za svaki request.
[ dalibor991 @ 15.11.2012. 02:06 ] @
K'o sto ivan.a rece ovo ti nije sigurno ali pitanje nije da li je sigurno ili ne

Code:

$stari_pass = $_REQUEST['stari_pass'];
$novi_pass = $_REQUEST['novi_pass'];

//izvuces iz baze stari password mrzi me da kucam kod, valjda znas to, i smestis ga npr u $old_pass
//e sad ako ti je ovaj $old_pass kriptovan moras da kriptujes i $stari_pass, zavisi koju si funkciju koristio md5() ili sha1(), pretpostavimo da si md5()

if ( md5($stari_pass) == $old_pass ) {

$novi_pass = md5($novi_pass);
$sql = "UPDATE korisnici SET password = \"$novi_pass\" WHERE ID=$ID";
if($rezultat == mysql_query($sql)) echo "password promenjen";
else echo "password nije promenjen";

}
else 
echo "pogresan stari password";


[Ovu poruku je menjao dalibor991 dana 16.11.2012. u 20:15 GMT+1]
[ ivan.a @ 15.11.2012. 21:57 ] @
Zar još uvek koristite md5 funkciju za kriptovanje lozinke (još bez hash-a, slug-a)? :)

Ne mora da znači da je on koristio md5 ili sha1 funkciju za lozinke.
Upit nije dobar tj. provera upita...ovo može da daje true svaki put kada je upit izvršen (bez obzira da li je ID polje validno ili je neka druga greška u pitanju).
Code:
if($rezultat = mysql_query($sql)) echo "password promenjen";
[ dalibor991 @ 16.11.2012. 19:18 ] @
ne mora da znaci, nek upotrebi onu koju je on koristio

[Ovu poruku je menjao dalibor991 dana 17.11.2012. u 04:28 GMT+1]