Bonjour, a chaque fois que j'upload mon site sur mon ftp mon site m'affiche une erreur 500 alors que sur wamp sa marche très bien, j'ai transphéré le sql de ma bdd mais rien ... ps: je n'oublie biensur pas de mofif la connection a la bdd, Et puis aussi, quand je me register sa marche (en localhost) je recois pas le mail et puis j'ai une erreur sur la page login dès que je me login !!
et puis voila mes erreur quand j'essaye de me connecter (le compte est bien créer sur phpmyadmin)
Mon db.php
<?php
try
{
$bdd = new PDO('mysql:host=localhost;dbname=bykertix_site;charset=utf8', 'root', '');
array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION);
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}
?>
Mon register.php
<?php
require_once 'inc/fonctions.php';
session_start();
if(!empty($_POST)){
require_once 'inc/db.php';
$errors = array();
if(empty($_POST['username']) || !preg_match('/^[a-zA-Z0-9_]+$/', $_POST['username'])){
$errors['username'] = "Votre pseudo n'est pas valide";
} else {
$req = $bdd->prepare('SELECT id FROM users WHERE username = ?');
$req->execute([$_POST['username']]);
$user = $req->fetch();
if($user){
$errors['username'] = 'Ce pseudo est déja utilisé pour un autre compte';
}
}
if(empty($_POST['email']) || !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)){
$errors['email'] = "Votre email n'est pas valide";
}else {
$req = $bdd->prepare('SELECT id FROM users WHERE email = ?');
$req->execute([$_POST['email']]);
$user = $req->fetch();
if($user){
$errors['email'] = 'Cet email est déja utilisé';
}
}
if(empty($_POST['password']) || $_POST['password'] !=$_POST['password_confirm']){
$errors['password'] = "Votre mot de passe ne correspond pas";
}
if(empty($errors)){
$req = $bdd->prepare("INSERT INTO users SET username = ?, password = ?, email = ?,confirmation_token = ?");
$password = password_hash($_POST['password'], PASSWORD_BCRYPT);
$token = str_random(60);
$req->execute([$_POST['username'], $password, $_POST['email'], $token]);
$user_id = $bdd->lastInsertId();
mail($_POST['email'], 'Confirmation de votre compte', "Afin de valider votre compte merci de cliquer sur ce lien\n\nhttp://localhost/site/confirm.php?id=$user_id&token=$token");
$_SESSION['flash']['success'] = 'Un email de confirmation vous a été envoyé pour valider votre compte';
header('Location: login.php');
exit();
}
}
?>
<?php require 'inc/header.php'; ?>
<h1>S'inscrire</h1>
<?php if(!empty($errors)): ?>
<div class="alert alert-danger">
<p>Vous n'avez pas rempli le formulaire correctement</p>
<ul>
<?php foreach($errors as $error): ?>
<li><?= $error; ?></li>
<?php endforeach; ?>
</ul>
</div>
<?php endif; ?>
<form action="" method="POST">
<div class="form-group">
<label for="">Pseudo</label>
<input type="text" name="username" class="form-control" required/>
</div>
<div class="form-group">
<label for="">Email</label>
<input type="email" name="email" class="form-control" required/>
</div>
<div class="form-group">
<label for="">Mot de passe</label>
<input type="password" name="password" class="form-control" required/>
</div>
<div class="form-group">
<label for="">Confirmez votre mot de passe</label>
<input type="password" name="password_confirm" class="form-control" required/>
</div>
<button type="submit" class="btn btn-primary">M'inscrire</button>
</form>
<?php require 'inc/footer.php' ?>
Mon login.php
<?php
if(!empty($_POST) && !empty($_POST['username']) && !empty($_POST['password'])){
require_once 'inc/db.php';
require_once 'inc/fonctions.php';
$req = $bdd->prepare('SELECT * FROM users WHERE (username = :username OR email = :username) AND confirmed_at IS NOT NULL');
$req->execute(['username' => $_POST['username']]);
$user = $req->fetch();
if(password_verify($_POST['password'], $user->password)){
$_SESSION['auth'] = $user;
$_SESSION['flash']['success'] = 'Vous êtes maintenant connecté';
header('Location: account.php');
exit();
}else{
$_SESSION['flash']['danger'] = 'Identifiant ou mot de passe incorrecte';
}
}
?>
<?php require 'inc/fonctions.php'; ?>
<?php require 'inc/header.php'; ?>
<h1>Se connecter</h1>
<form action="" method="POST">
<div class="form-group">
<label for="">Pseudo ou email</label>
<input type="text" name="username" class="form-control" required/>
</div>
<div class="form-group">
<label for="">Mot de passe</label>
<input type="password" name="password" class="form-control" required/>
</div>
<button type="submit" class="btn btn-primary">Se connecter</button>
</form>
<?php require 'inc/footer.php'; ?>
Mon fonctions.php
<?php
function debug($variable){
echo '<pre>' . print_r($variable, true) . '</pre>';
}
function str_random($length){
$alphabet = "0123456789azertyuiopqsdfghjklmwxcvbnAZERTYUIOPQSDFGHJKLMWXCVBN";
return substr(str_shuffle(str_repeat($alphabet, $length)), 0, $length);
}
function logged_only(){
if(session_status() == PHP_SESSION_NONE){
session_start();
}
if(!isset($_SESSION['auth'])){
$_SESSION['flash']['danger'] = "Vous n'avez pas le droit d'accéder à cette page";
header('location: login.php');
exit();
}
}
Confirm.php
<?php
$user_id = $_GET['id'];
$token = $_GET['token'];
require 'inc/db.php';
$req = $bdd->prepare('SELECT * FROM users WHERE id = ?');
$req->execute([$user_id]);
$user = $req->fetch();
session_start();
if($user && $user->confirmation_token == $token ){
$bdd->prepare('UPDATE users SET confirmation_token = NULL, confirmed_at = NOW() WHERE id = ?')->execute([$user_id]);
$_SESSION['flash']['success'] = 'Votre compte a bien été validé';
$_SESSION['auth'] = $user;
header('Location: account.php');
}else{
$_SESSION['flash']['danger'] = "Ce token n'est plus valide";
header('Location: login.php');
}
logout.php
<?php
session_start();
unset($_SESSION['auth']);
$_SESSION['flash']['success'] = 'Vous êtes maintenant déconnecté';
header('Location: login.php');
Mon account.php
<?php
require 'inc/fonctions.php';
logged_only();
require 'inc/header.php';
?>
<h1>Bonjour <?= $_SESSION['auth']->username; ?></h1>
<form action="" method="post">
<div class="form-group"></div>
<input class="form-control" type="password" name="password" placeholder="Changer votre mot de passe"/>
</div>
<div class="form-group"></div>
<input class="form-control" type="password" name="password_confirm" placeholder="Confirmation du mot de passe"/>
</div>
<button class="btn btn-primary">Changer mon mot de passe</button>
</form>
<?php require 'inc/footer.php'; ?>
Svp, je galère depuis quelque semaines !!! aider moi
Bonsoir.
As-tu fais des des recherches auprès de ton hébergeur ?
Si tu nous informait de ton hébergeur et du type de serveur, nous pourrions peut-être t'aider plus efficacement car si ça se trouve, ce n'est pas dû à tes fichiers PHP, mais par exemple à une syntaxe du fichier .htaccess
ou autre.
Bonsoir,
mon hebergeur est un particulier, "grofido.net", j'ai regarder un ancien site en html sa marche parfait avec un petit bout de php pour le formulaire de contact, mais la sa me le fait que pour sa, je ne sais pas pourquoi.
et je crois pas que j'ai un .htaccess
Alors, pour commencer, dans ton fichier login.php
, tu devrais vérifier si un enregistrement est bien retourné, car tu fais une comparaison pour un champ, mais si aucun enregistrement est retourné il est normal que tu aies une erreur, car étant donné que ta variable $user
est nulle tu n'as donc pas d'objet de défini, d'où l'erreur qui t'es retournée pour la partie suivante :
if(password_verify($_POST['password'], $user->password)){
Ensuite, si tu as besoin de ton fichier fonctions.php
que le formulaire soit posté ou non, autant que tu le charges une seule fois pour les deux cas, mais si tu veux garder les 2 inclusions, tu devrais faire le require_once
que la deuxième fois.
Donc, soit tu inclus le fichier dès le début avant la condition des données postées et tu supprimes la deuxième inclusion ou alors tu fais un require
du fichier dans ta condition des données postées et tu fais un require_once
après ta condition.
Mais le plus logique est la première proposition.
Il te faut donc modifier :
if(password_verify($_POST['password'], $user->password)){
par par exemple :
if(isset($user) && password_verify($_POST['password'], $user->password)){
sa me met toujours l'erreur si je remplace sa
if(password_verify($_POST['password'], $user->password)){
par
if(isset($user) && password_verify($_POST['password'], $user->password)){
sa
Et j'ai fait comme tu as dit pour le fichier fonctions, je l'ai mis qu'une fois sa ma déjà enlever une erreur