J'essaie d'ajouter la possibilité pour les utilisateurs de récupérer leur nom d'utilisateur et/ou leur mot de passe pour les didacticiels de login/inscription de phpacademy. J'ai commencé mais je ne sais pas comment continuer. Le code que j'ai est basé sur les anciens didacticiels de connexion/enregistrement de phpacademy.Récupérer un nom d'utilisateur/mot de passe
Voici le code: recover.php:
<?php
require_once 'core/init.php';
$user = new User();
if ($user->isLoggedIn()) {
Redirect::to('index.php');
}
if (isset($_GET['success']) === true && empty($_GET['success']) === true) {
?>
<p>We've emailed you</p>
<?php
} else {
$mode_allowed = array('username', 'password');
if (isset($_GET['mode']) === true && in_array($_GET['mode'], $mode_allowed) === true) {
if (isset($_POST['email']) === true && empty($_POST['email']) === false) {
$email = Input::get('email');
if ($user->emailExists($email) === true) {
$user->recover($_GET['mode'], $email);
Redirect::to('recover.php?success');
} else {
//Your custom error saying that that email does not exist
echo 'That email does not exist';
}
}
?>
<form action="" method="post">
<ul>
<li>
Please enter your email address:<br>
<input type="text" name="email" placeholder="Enter Email">
</li>
<li><input type="submit" class="sub-btn tx-shadow" value="Recover"></li>
</ul>
</form>
<?php
} else {
Redirect::to('index.php');
}
}
Les classes que j'ai dans User.php:
public function emailExists($email){
$sql = "SELECT *
FROM `users`
WHERE `email` = ?
";
$result = $this->_db->query($sql, array($email));
//return $result->count() === 1;
// Above is the same as this:
//return ($result->count() === 1) ? true : false;
// Or this:
if($result->count() === 0){
return false;
} else {
return true;
}
}
public function recover($mode, $email) {
//Get data of user
$user_data = $this->getUserByEmail($email);
// Email User
if ($mode == 'username') {
$this->sendActivation($email, 'Your Username', 'Hello'.$user_data['first_name']. '\n\nYour username is: '.$user_data['username'].'\n\nThank you\nBusarna');
} else if ($mode == 'password') {
$generated_password = substr(sha1(rand(999, 999999)), 0, 10);
//update password
}
}
public function getUserByEmail($email) {
$sql = "SELECT *
FROM `users`
WHERE `email` = ?
"
$result = $this->_db->query($sql, array($email));
//return $result;
}
Le travail de fonction emailExists. Les problèmes que j'ai est que je ne sais pas comment obtenir toutes les informations d'un utilisateur à l'aide de leur e-mail et stocker les informations pour les utiliser comme ceci:
$this->sendActivation($email, 'Your Username', 'Hello'.$user_data['first_name']. '\n\nYour username is: '.$user_data['username'].'\n\nThank you\nBusarna');
J'ai une classe au-dessus pour elle mais je ne Je ne sais pas comment le changer pour le faire fonctionner (getUserByEmail). Aussi, je ne sais pas si le moyen ci-dessus est un bon moyen de générer un mot de passe (non haché, il sera haché quand on le met dans la db), je ne sais pas comment mettre à jour le mot de passe et forcer les utilisateurs à le changer sur la prochaine connexion.
En ce moment je reçois cette erreur si je vais à recover.php: Erreur d'analyse: erreur de syntaxe, inattendu '$ result' (T_VARIABLE) dans D: \ Program \ xampp \ htdocs \ website \ classes \ User.php sur la ligne 225 Ceci est cette ligne:
$result = $this->_db->query($sql, array($email));
Si vous les gars ont besoin rien d'autre laissez-moi savoir.
classe DB.php:
public static function getInstance() {
if(!isset(self::$_instance)) {
self::$_instance = new DB();
}
return self::$_instance;
}
public function query($sql, $params = array()) {
$this->_error = false;
if($this->_query = $this->_pdo->prepare($sql)) {
$x = 1;
if(count($params)) {
foreach ($params as $param) {
$this->_query->bindValue($x, $param);
$x++;
}
}
if ($this->_query->execute()) {
$this->_results = $this->_query->fetchAll(PDO::FETCH_OBJ);
$this->_count = $this->_query->rowCount();
} else {
$this->_error = true;
}
}
return $this;
}
var_dump (user_data de $);
objet (DB) # 3 (5) {["_pdo": "DB": privé] => objet (PDO) # 4 (0) {} ["_query": "DB": private] = > object (PDOStatement) # 7 (1) {["queryString"] => chaîne (55) "SELECT * FROM users
O WH email
=?"} ["_error": "DB": private] => bool (false) ["_results": "DB": privé] => objet (stdClass) # 5 (18) {["id"] => string (2) "28" ["username"] => string (8) "Busarna4 "[" mot de passe "] => string (128) "3759d763d01ee1259d8f4a74914335be4e3e06622d8ffc455789cbd8c46b5800d1892794cde2de1b0f6a1cf8e1effc642877b7937b7c0deaf9036e558474eb5c"[" sel "] => string (100)" Àw¶10 $ ê! º L-kò « Ö §òŸÔK * {áëRÌÕÆé³X ï« aA * Ú ™ ü²ÅK§þ3 hõHï¬Å + c|kºá`³Trë_ßÙáû, ð¡_Ë <Žz0 "[" email "] => chaîne (20)" [email protected] "[" email_code "] => chaîne (32)" ae3e9ad790297c627a656157d5306d1e "[" k1 "] => chaîne (64)" 42a86fe29289c83a8d91a990e49b62c3866192c983e510 70df0c63697020b5ce »[ "k2"] => string (64) "d7827e522bbbdadfd14afd2edbae18d5a6f3c39a490154c178b2eec240d7b576"[ "k3"] => string (64) "8051c951f1ec043d5297765adddd760e1f8506d1785dfdb55dabe564b6326b86"[ "first_name"] => string (0) ""[ "last_name"] => string (0) "" ["gender"] => string (4) "Homme" ["profile"] => string (0) "" ["avatar"] => string (30) "images/default-Male -Avatar.png "[" lastlogin "] => chaîne (19)" 0000-00-00 00:00:00 "[" joined "] => chaîne (19)" 2014-06-22 21:22:36 "[" group "] => string (1)" 1 "[" activated "] => chaîne (1)" 1 "} [" _count ":" DB ": private] => int (1)}
Est-ce que quelqu'un sait comment faire cela? Toute aide appréciée.
Merci à l'avance,
Busarna
Uncomment '// retour de result' $ dans votre getUserByEmail() fonction. – Gudgip
J'ai remarqué que j'ai une erreur à cause de cette classe. J'ai ajouté l'erreur à la question. Et décommenter cela ne fait rien en raison de cette erreur @Gudgip – Busarna4
mettre un ';' sur la fin de la ligne 224. – Gudgip