Bonjour la communauté en espérant que vous aller bien.
Je travaille sur un espace memebre rencontre une erreur que je comprend pas
Je rencontre cette erreur.
mail(): Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set()
Mon code
mail(
$_POST['email'],
"Confirmation de votre compte",
"Afin de valider votre compte merci de clique sur ce lien\n\nhttp://localhost:8000/confirm/confirm.php?id=$user_id&token=$token"
);
Mon fichier php.ini
[mail function]
; For Win32 only.
; http://php.net/smtp
SMTP = localhost
; http://php.net/smtp-port
smtp_port = 25
Merci de m'aider svp...
Hello
Alors pour commencer le port n'est pas bon, il faut mettre 1025
au lieux de 25
Ensuite il faut lancer le programme Mailhog (Sur windows tu aura une console qui s'ouvrira, suffit de la réduire et de l'ignorer, c'est Mailhog)
Et en principe ça devrait être bon, tu auras access à tes mails sur 127.0.0.1:8025
Si tu n'as pas encore mailhog, ça se passe ici: https://github.com/mailhog/MailHog/releases/v1.0.0
Tu prends la version windows amd64 si tu as windows
Si tu es sur mac le telechargement se fait avec Homebrew brew update && brew install mailhog
Et le lancement de mailhog se fait en tapant mailhog
sur ton terminal
Bonjour,
C'est parceque ta variable $user n'est pas un objet mais un tableau.
Essaye de remplacer :
$user = $req->fetch();
par :
$user = $req->fetch(PDO::FETCH_OBJ);
Merci de m'avpor repondu, mais j'ai puis regler ce probleme.
Mais je rencontre une autre erruer que je comprend pas, je recois l'email sur MailDev, les données s'enregistre en base
Je sais pas si c'est probleme de lien
voila l'erreur
Trying to get property 'confirmation_token' of non-object
Mon routeur
class Router
{
/**
* @var string
*/
private $viewPath;
/**
* @var AltoRouter
*/
private $router;
public function __construct(string $viewPath)
{
$this->viewPath = $viewPath;
$this->router = new \AltoRouter();
}
public function match(string $url, string $view, ?string $name = null): self
{
$this->router->map('POST|GET', $url, $view, $name);
return $this;
}
public function post(string $url, string $view, ?string $name = null): self
{
$this->router->map('POST', $url, $view, $name);
return $this;
}
public function get(string $url, string $view, ?string $name = null): self
{
$this->router->map('GET', $url, $view, $name);
return $this;
}
public function url(string $name, array $params = [])
{
return $this->router->generate($name, $params);
}
public function run(): self
{
$match = $this->router->match();
$view = $match['target'];
$params = $match['params'];
$router = $this;
ob_start();
require $this->viewPath . DIRECTORY_SEPARATOR . $view . '.php';
$content = ob_get_clean();
require $this->viewPath . DIRECTORY_SEPARATOR . 'layouts/default.php';
return $this;
}
}
Page index
$router = new App\Router(dirname(__DIR__) . '/views');
$router
->match('/', 'auth/login', 'login')
->match('/membre', 'auth/register', 'register')
->get('/confirm', 'confirmation/confirm', 'confirm')
->match('/membre/admin', 'admin/account', 'account')
->run();
Page register
if (empty($errors)) {
$url = $router->url("login");
$urlConfirmation = $router->url('confirm');
$req = $pdo->prepare("
INSERT INTO users
SET username = ?,
password = ?,
email = ?,
confirmation_token = ?
");
$password = password_hash($_POST['password'], PASSWORD_BCRYPT, ["cost" => $cost]);
$token = Text::str_random(60);
$req->execute([$_POST['username'], $password, $_POST['email'], $token]);
$user_id = $pdo->lastInsertId();
mail(
$_POST['email'],
"Confirmation de votre compte",
"Afin de valider votre compte merci de clique sur ce lien\n\n$urlConfirmation?id=$user_id&token=$token"
);
header('Location: ' . $url);
exit();
}
Page Confirm
use App\Db;
$user_id = $_GET['id'];
$token = $_GET['token'];
$pdo = Db::getPDO();
$req = $pdo->prepare('SELECT confirmation_token FROM users WHERE id = ?');
$req->execute([$user_id]);
$user = $req->fetch();
if ($user && $user->confirmation_token == $token) {
$url = $router->url("account");
session_start();
$pdo->prepare(
"
UPDATE users
SET confirmation_token = NULL,
confirmed_at = NOW() WHERE id = ?"
)->execute([$user_id]);
$_SESSION['auth'] = $user;
header('Location: ' . $url);
} else {
die("Pas ok");
}
Merci de m'aider svp.