Este é o código original de um curso que estou fazendo (dw+php+mysql do imasters) que está dando erro.
Alguém pode me dizer o que está acontecendo?
O erro é que o link para verificação da chave para criar uma nova senha não está funcionando.
http://localhost:8080/site/login-lembrete.php?action=criar-senha&key=123 //Chave inválida
http://localhost:8080/site/login-lembrete.php?action=criar-senha&key=2bcbe064b85f946cd35g876h4rt567hg //Chave válida que peguei do banco
Testei o link direto no browser com uma chave certa e uma errada e nas duas está exibindo a mensagem 'A chave informada é inválida' que só deve ser exibida quando a chave for inválida.
Com a chave válida também aparece a mensagem, mas alterei a senha e o form funcionou. Então o problema não está no link, estou certo?
E também, quando a chave é inválida deveria ser exibido o outro formulário, que é para a solicitação de uma nova senha. Mas fica no mesmo formulário e exibe a mensagem de chave inválida.
Estou quebrando a cabeça para achar o erro, mas não estou conseguindo.
login-lembrete.php
<?php require_once('Connections/connDB.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
$theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
$theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}
}
$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}
$colname_rsVerificaChave = "-1";
if (isset($_POST['strUsrKey'])) {
$colname_rsVerificaChave = $_POST['strUsrKey'];
}
mysql_select_db($database_connDB, $connDB);
$query_rsVerificaChave = sprintf("SELECT COUNT(*) AS total FROM pn_usuarios WHERE strUsrKey = %s", GetSQLValueString($colname_rsVerificaChave, "text"));
$rsVerificaChave = mysql_query($query_rsVerificaChave, $connDB) or die(mysql_error());
$row_rsVerificaChave = mysql_fetch_assoc($rsVerificaChave);
$totalRows_rsVerificaChave = mysql_num_rows($rsVerificaChave);
if ( 1 == $row_rsVerificaChave['total'] ) {
if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form")) {
$strKey = md5( uniqid( microtime()));
$updateSQL = sprintf("UPDATE pn_usuarios SET strUsrPassword=%s, strUsrKey = '$strKey' WHERE strUsrKey=%s",
GetSQLValueString($_POST['strUsrPassword'], "text"), // Aqui o autor esqueceu o MD5
GetSQLValueString($_POST['strUsrKey'], "text"));
mysql_select_db($database_connDB, $connDB);
$Result1 = mysql_query($updateSQL, $connDB) or die(mysql_error());
}
} else {
$msg_retorno = 'A chave informada é inválida';
}
$colname_rsDadosUsuario = "-1";
if (isset($_POST['strUsrEmail'])) {
$colname_rsDadosUsuario = $_POST['strUsrEmail'];
}
mysql_select_db($database_connDB, $connDB);
$query_rsDadosUsuario = sprintf("SELECT strUsrName, strUsrEmail, strUsrKey, COUNT(*) AS total FROM pn_usuarios WHERE strUsrEmail = %s GROUP BY strUsrEmail", GetSQLValueString($colname_rsDadosUsuario, "text"));
$rsDadosUsuario = mysql_query($query_rsDadosUsuario, $connDB) or die(mysql_error());
$row_rsDadosUsuario = mysql_fetch_assoc($rsDadosUsuario);
$totalRows_rsDadosUsuario = mysql_num_rows($rsDadosUsuario);
if ( isset( $_POST['action']) and $_POST['action'] == 'solicitar-senha' ) :
if ( 1 == $row_rsDadosUsuario['total'] ) :
$titulo = sprintf( '%s, crie uma nova senha em nosso site', $row_rsDadosUsuario['strUsrName']);
$mensagem = sprintf( '
Olá %s,
Utilize a URL abaixo para acessar nosso site e criar uma nova senha de acesso.
http://localhost:8080/site/login-lembrete....enha&key=%s
', $row_rsDadosUsuario['strUsrName'], $row_rsDadosUsuario['strUsrKey']);
$cabecalho = 'From: Nome do Site <sem-reposta@endereco-site.com.br';
mail( $row_rsDadosUsuario['strUsrEmail'], $titulo, $mensagem, $cabecalho);
else :
$msg_retorno = 'O e-mail informado não está cadastrado em nosso banco de dados.';
endif;
endif;
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<?php if ( isset( $_GET['action'], $_GET['key']) and $_GET['action'] == 'criar-senha' ) : ?>
<?php if ( isset( $msg_retorno) ) : ?>
<p><?php echo $msg_retorno; ?></p>
<?php endif; ?><form name="form" method="POST" action="<?php echo $editFormAction; ?>">
<p>
<label for="strUsrPassword">Informe uma senha: </label>
<input type="password" id="strUsrPassword" name="strUsrPassword" />
</p>
<p>
<label for="strUsrPassword2">Confirme a senha: </label>
<input type="password" id="strUsrPassword2" name="strUsrPassword2" />
</p>
<p>
<input type="submit" value="Enviar" />
<input type="hidden" name="strUsrKey" value="<?php echo $_GET['key']; ?>" />
<input type="hidden" name="action" value="criar-nova-senha" />
</p>
<input type="hidden" name="MM_update" value="form" />
</form>
<?php else : ?>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<p>
<label for="strUsrEmail">E-mail: </label>
<input type="text" id="strUsrEmail" name="strUsrEmail" />
</p>
<p>
<input type="submit" value="Enviar" />
<input type="hidden" name="action" value="solicitar-senha" />
</p>
</form>
<?php endif; ?>
</body>
</html>
<?php
mysql_free_result($rsDadosUsuario);
mysql_free_result($rsVerificaChave);
?>
Também não entendi porque o código exibe o "nome do usuário" e a "chave" novamente em seguida
Pergunta
Alex_DTP
Este é o código original de um curso que estou fazendo (dw+php+mysql do imasters) que está dando erro.
Alguém pode me dizer o que está acontecendo?
O erro é que o link para verificação da chave para criar uma nova senha não está funcionando.
Testei o link direto no browser com uma chave certa e uma errada e nas duas está exibindo a mensagem 'A chave informada é inválida' que só deve ser exibida quando a chave for inválida. Com a chave válida também aparece a mensagem, mas alterei a senha e o form funcionou. Então o problema não está no link, estou certo? E também, quando a chave é inválida deveria ser exibido o outro formulário, que é para a solicitação de uma nova senha. Mas fica no mesmo formulário e exibe a mensagem de chave inválida. Estou quebrando a cabeça para achar o erro, mas não estou conseguindo. login-lembrete.php<?php require_once('Connections/connDB.php'); ?> <?php if (!function_exists("GetSQLValueString")) { function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") { $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue; $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue); switch ($theType) { case "text": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "long": case "int": $theValue = ($theValue != "") ? intval($theValue) : "NULL"; break; case "double": $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL"; break; case "date": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "defined": $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue; break; } return $theValue; } } $editFormAction = $_SERVER['PHP_SELF']; if (isset($_SERVER['QUERY_STRING'])) { $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']); } $colname_rsVerificaChave = "-1"; if (isset($_POST['strUsrKey'])) { $colname_rsVerificaChave = $_POST['strUsrKey']; } mysql_select_db($database_connDB, $connDB); $query_rsVerificaChave = sprintf("SELECT COUNT(*) AS total FROM pn_usuarios WHERE strUsrKey = %s", GetSQLValueString($colname_rsVerificaChave, "text")); $rsVerificaChave = mysql_query($query_rsVerificaChave, $connDB) or die(mysql_error()); $row_rsVerificaChave = mysql_fetch_assoc($rsVerificaChave); $totalRows_rsVerificaChave = mysql_num_rows($rsVerificaChave); if ( 1 == $row_rsVerificaChave['total'] ) { if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form")) { $strKey = md5( uniqid( microtime())); $updateSQL = sprintf("UPDATE pn_usuarios SET strUsrPassword=%s, strUsrKey = '$strKey' WHERE strUsrKey=%s", GetSQLValueString($_POST['strUsrPassword'], "text"), // Aqui o autor esqueceu o MD5 GetSQLValueString($_POST['strUsrKey'], "text")); mysql_select_db($database_connDB, $connDB); $Result1 = mysql_query($updateSQL, $connDB) or die(mysql_error()); } } else { $msg_retorno = 'A chave informada é inválida'; } $colname_rsDadosUsuario = "-1"; if (isset($_POST['strUsrEmail'])) { $colname_rsDadosUsuario = $_POST['strUsrEmail']; } mysql_select_db($database_connDB, $connDB); $query_rsDadosUsuario = sprintf("SELECT strUsrName, strUsrEmail, strUsrKey, COUNT(*) AS total FROM pn_usuarios WHERE strUsrEmail = %s GROUP BY strUsrEmail", GetSQLValueString($colname_rsDadosUsuario, "text")); $rsDadosUsuario = mysql_query($query_rsDadosUsuario, $connDB) or die(mysql_error()); $row_rsDadosUsuario = mysql_fetch_assoc($rsDadosUsuario); $totalRows_rsDadosUsuario = mysql_num_rows($rsDadosUsuario); if ( isset( $_POST['action']) and $_POST['action'] == 'solicitar-senha' ) : if ( 1 == $row_rsDadosUsuario['total'] ) : $titulo = sprintf( '%s, crie uma nova senha em nosso site', $row_rsDadosUsuario['strUsrName']); $mensagem = sprintf( ' Olá %s, Utilize a URL abaixo para acessar nosso site e criar uma nova senha de acesso. http://localhost:8080/site/login-lembrete....enha&key=%s ', $row_rsDadosUsuario['strUsrName'], $row_rsDadosUsuario['strUsrKey']); $cabecalho = 'From: Nome do Site <sem-reposta@endereco-site.com.br'; mail( $row_rsDadosUsuario['strUsrEmail'], $titulo, $mensagem, $cabecalho); else : $msg_retorno = 'O e-mail informado não está cadastrado em nosso banco de dados.'; endif; endif; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Untitled Document</title> </head> <body> <?php if ( isset( $_GET['action'], $_GET['key']) and $_GET['action'] == 'criar-senha' ) : ?> <?php if ( isset( $msg_retorno) ) : ?> <p><?php echo $msg_retorno; ?></p> <?php endif; ?><form name="form" method="POST" action="<?php echo $editFormAction; ?>"> <p> <label for="strUsrPassword">Informe uma senha: </label> <input type="password" id="strUsrPassword" name="strUsrPassword" /> </p> <p> <label for="strUsrPassword2">Confirme a senha: </label> <input type="password" id="strUsrPassword2" name="strUsrPassword2" /> </p> <p> <input type="submit" value="Enviar" /> <input type="hidden" name="strUsrKey" value="<?php echo $_GET['key']; ?>" /> <input type="hidden" name="action" value="criar-nova-senha" /> </p> <input type="hidden" name="MM_update" value="form" /> </form> <?php else : ?> <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> <p> <label for="strUsrEmail">E-mail: </label> <input type="text" id="strUsrEmail" name="strUsrEmail" /> </p> <p> <input type="submit" value="Enviar" /> <input type="hidden" name="action" value="solicitar-senha" /> </p> </form> <?php endif; ?> </body> </html> <?php mysql_free_result($rsDadosUsuario); mysql_free_result($rsVerificaChave); ?>Também não entendi porque o código exibe o "nome do usuário" e a "chave" novamente em seguidaObrigado a todos que puderem me ajudar.
Alex
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.