Jump to content
Vitas

Modificar palavra passe com a confirmação de antiga

Recommended Posts

Vitas

Boas!

Eu queria fazer um update record para mudar a pass, mas antes queria que o utilizador confirme a antiga preenchendo uma textbox.

Ja tentei fazer a query com o count mas sem resultado.

Algumas ideias?

Cumps

Share this post


Link to post
Share on other sites
tmjramalho

Boas!

Podes usar uma query deste tipo:

$query = "update tabela_utilizadores set pass=MD5('".$_GET['nova_pass']."') where pass=MD5('".$_GET['pass_antiga']."') and email='".$_GET['email@utilizador.com']."'";

Penso que é o suficiente.


http://interessespessoais.com/hobbies e assuntos profissionais

Share this post


Link to post
Share on other sites
softklin

Só para complementar a resposta, podes correr essa query em problemas, porque apenas altera a palavra-passe se a anterior estiver correcta.

Para verificares se a palavra-passe foi efectivamente alterada, usa a função mysql_affected_rows, que, no caso em que a palavra-passe antiga estava certa e foi trocada para a nova, ele devolve exactamente o total de 1 linha alterada. Caso contrário, retorna 0 linhas afectadas.


Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Share this post


Link to post
Share on other sites
Vitas

Hmm..

Vou experimentar a questão da query. Em relação ao mysql_affected_rows onde eu uso isso? Depois da query? Agradecia se mostrasse um simples exemplo, peço desculpa por tar a chatear muito mas eu sou novato nisto  :)

Obrigado

Share this post


Link to post
Share on other sites
softklin

Eu na altura nem tomei atenção aos detalhes da query, mas cuidado, não se esqueçam de passar os dados de input por um filtro antes de as colocarem numa query:

$query = sprintf(
"update tabela_utilizadores set pass='%s' where pass='%s' and email='%s'",
md5($_GET['nova_pass']),
md5($_GET['email@utilizador.com']),
mysql_real_escape_string($_GET['email@utilizador.com'])
);

Como é óbvio, deves adaptar aos campos que tens. Usei o MD5 do PHP, mas no caso não deve haver diferença.


Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Share this post


Link to post
Share on other sites
Vitas

Bem eu reparei num detalhe, é que o update só é feito se a palavra passe antiga estiver correcta era como eu queria mas o problema é que ele nem sequer dá erro se essa estiver mal, ele corre o update, ate lhe meti um echo e ele apresenta os valore todos bem só que não faz o update na base de dados.

Eu gostaria que quando o utilizador preenche mal a palavra passe antiga que o sistema dê erro a a visar que está mal e obrigue ao utilizador preencher bem ou cancelar a acção.

Algumas ideias?

Obrigado

Share this post


Link to post
Share on other sites
IvanGS

simples, fazes duas query's, um select e um update....

fazes primeiro o select para verificar se a password antiga inserida corresponde á que foi introduzida, se for igual faz o update, se for diferente dá erro.

Share this post


Link to post
Share on other sites
brunoais

Eu gostaria que quando o utilizador preenche mal a palavra passe antiga que o sistema dê erro a a visar que está mal e obrigue ao utilizador preencher bem ou cancelar a acção.

Algumas ideias?

Obrigado

Se o affected rows indicar 0, podes indicar o erro, se indicar 1, confirmas que foi alterado com sucesso.


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
Vitas

hmm tentei fazer o que disse mas só me diz que a palavra passe antiga está incorrecta.

Eu uso o seguinte código:

<?php
$new = ($_POST['newpw']);
$old = ($_POST['oldpw']);
if($_POST['hidden'] == 1){
$sql = "UPDATE utilizadores SET palavrapasse= '$new' WHERE utilizador = '$colname_session' and palavrapasse='$old'";
$updatepw = mysql_query ($sql, $PrefeitosDB) or die ("Erro ao actualizar os dados" . mysql_error());
 if(mysql_affected_rows == 1) {

?>
<script language="javascript">
alert('Palavra-passe alterada com sucesso');
window.location('indexAdmin.php');
</script>
<?php } else { ?>
<script language="javascript">
alert('Palavra-passe antiga está incorrecta!');
history.go(-1);
</script>
<?php }} ?>

Obs: não consigo colocar a codificação md5 antes do Post, se colocar ele funciona na pagina mas não acontece nada na bd.

Share this post


Link to post
Share on other sites
brunoais

Em que encriptação/hash algorithm é que tens as passwords na DB?


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
Vitas

não coloquei nenhuma encriptação para a pass, como esse é um projecto para a escola criei um simples campo pass com o tipo char

Share this post


Link to post
Share on other sites
brunoais

Tenta, para começar, fazer um select do tipo:

"SELECT $old AS old, $new AS new"

e obter o resultado. Depois tenta usar esses valores para pesquisar diretamente usando o phpmyadmin. e ver o resultado.


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
Vitas

o problema principal não é a encriptação é que quando faço qualquer coisa ele só apresenta a condição do else, nunca realiza a primeira

é por isso que quando muda de pass com sucesso ele diz que a password antiga está incorrecta é pq nao sai do else e eu não sei porque..


eu acho que a condição do mysql_afected_rows está apresentar sempre 0 e por isso que ele so retorna o else, mas porque que quando o update é feito como deve de ser ele continua a dizer que affected_rows é 0?

Share this post


Link to post
Share on other sites
Vitas

Já resolvi o problema, bastava de meter o mysql_affected_rows reconhecer um delete/update/insert record anterior, ou seja colocar depois do update e não meter nenhum link.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.