Je viens de mettre en place un espace membre sur mon site.
Le script fonctionne, l'inscription à la base MySql fonctionne par contre aucune redirection n'aboutisse, chaque validation crée une boucle et reviens à l'index.
Je pense avoir des mauvaises redirection dans mon script PHP après la fonction 'URLSITE', mais je ne trouve pas mes erreurs.
Si quelqu'un a le courage de regarder ce code, merci d'avance.
<?php
include('define.php');
// La fonction de redirection de base
function redirection($url, $time=0) {
if (!headers_sent()) {
header("refresh: $time;url=$url");
exit;
}
else {
echo '<meta http-equiv="refresh" content="',$time,';url=',$url,'">';
}
}
// La classe de connexion a la bdd
class Bdd {
private static $connexion = NULL;
public static function connectBdd() {
if(!self::$connexion) {
self::$connexion = new PDO(DNS, USER, PASS);
self::$connexion -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
return self::$connexion;
}
} // Fin de la classe de connexion a la bdd
###########################################################################################
// La classe de recuperation de l'ip visiteur
class Ip {
// function recuperation ip
public static function get_ip() {
if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
elseif(isset($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
}
else {
$ip = $_SERVER['REMOTE_ADDR'];
}
return $ip;
}
} // Fin de la classe de recuperation de l'ip visiteur
###########################################################################################
// La classe de cryptage
class Cryptage {
// Fonction de cryptage
public static function crypter($var) {
$sel = "48@tiOP";
$Cript = md5($var);
$crypt = sha1($Cript, $sel);
return $crypt;
}
// creation d'une chaine aleatoire
public static function chaine($nb_car, $chaine='AZERTYUIOPQSDFGHJKLMWXCVBNazertyuiopqsdfghjklmwxcvbn123456789') {
$nb_lettres = strlen($chaine)-1;
$generation = '';
for($i=0; $i < $nb_car; $i++)
{
$pos = mt_rand(0, $nb_lettres);
$car = $chaine[$pos];
$generation .= $car;
}
return $generation;
}
} // Fin de la classe de cryptage
###########################################################################################
// La classe captcha
class Captcha {
// Fonction de creation d'un captcha
// $a => chiffre entre 1 et 5
// $b => chiffre entre 1 et 5
// $resultat => le resultat de l'operation
// $phrase => le texte du captcha
// Retourne un tableau contenant la phrase et le resultat du captcha
public static function captchaCreate() {
$a = rand(1, 5);
$b = rand(1, 5);
$resultat = $a + $b;
$phrase = 'Combien font '.$a.' + '.$b.' : ';
return array($resultat, $phrase);
}
// Fonction d'envoie du captcha
// Creation d'une session contenant le resultat du captcha
// Retourne la phrase du captcha
public function captcha() {
list($resultat, $phrase) = Captcha::captchaCreate();
$_SESSION['captcha'] = $resultat;
return $phrase;
}
public static function captchaVerif() {
if(!empty($_POST['captcha'])) {
if($_POST['captcha'] == $_SESSION['captcha']) {
return true;
}
else {
return false;
}
}
else {
return false;
}
}
} // Fin de la classe captcha
###########################################################################################
// La classe d'inscription
class Inscription {
// Fonction d'inscription
public static function inscrire($identifiant, $email, $passeUn, $passeDe) {
if(!empty($identifiant) AND !empty($email) AND !empty($passeUn) AND !empty($passeDe)) {
if($passeUn === $passeDe) {
$verifIdentifiant = Bdd::connectBdd()->prepare(SELECT.ALL.MEMBRE.PSEUDO);
$verifIdentifiant -> bindParam(':identifiant', $identifiant, PDO::PARAM_STR, 50);
$verifIdentifiant -> execute();
if($verifIdentifiant -> rowCount() != 1) {
if(filter_var($email, FILTER_VALIDATE_EMAIL)) {
$verifMail = Bdd::connectBdd()->prepare(SELECT.ALL.MEMBRE.EMAIL);
$verifMail -> bindParam(':email', $email);
$verifMail -> execute();
if($verifMail -> rowCount() != 1) {
Inscription::profil($identifiant, $email, $passeUn);
Inscription::protect($identifiant);
Inscription::message($identifiant);
$resultat = Inscription::activer($identifiant);
}
else {
$resultat = '<span class="error-info">L\'adresse email'.$email.' existe déjà,<br />veuillez en saisir une autre et recommencer l\'inscription.</span>';
}
}
else {
$resultat = '<span class="error-info">L\'adresse email saisie n\'est pas valide, <br />veuillez recommencer l\'inscription.</span>';
}
}
else {
$resultat = '<span class="error-info">L\'identifiant saisi existe déjà,<br />veuillez en choisir un autre et recommencer l\'inscription.</span>';
}
}
else {
$resultat = '<span class="error-info">Le champ "Saisir un Mot de Passe" et le champ "Resaisir un Mot de Passe" doivent être identiques, <br />veuillez recommencer l\'inscription.</span>';
}
}
else {
$resultat = '<span class="error-info">Vous devez remplir tout les champs, <br />veuillez recommencer l\'inscription.</span>';
}
return $resultat;
}
// creation du profil
public static function profil($identifiant, $email, $pass) {
$pass = Cryptage::crypter($pass);
$resultat = Bdd::connectBdd()->prepare(INSERT.MEMBREZ.PROFIL);
$resultat -> bindParam(':pseudo', $identifiant);
$resultat -> bindParam(':email', $email);
$resultat -> bindParam(':pass', $pass);
$resultat -> execute();
}
// creation de la protection du profil
public static function protect($pseudo) {
$id = Membre::recupId($pseudo);
$resultat = Bdd::connectBdd()->prepare(INSERT.ACCESPROFILZ.INSCRIPTION);
$resultat -> bindParam(':id', $id, PDO::PARAM_INT, 11);
$resultat -> execute();
}
// creation du message de bienvenue
public static function message($pseudo) {
$id = Membre::recupId($pseudo);
$idexp = '2';
$titre = 'Bienvenue et Profil';
$date = time();
$message = 'Bienvenue dans votre espace membre<br />Pensez à mettre à jour votre profil';
$resultat = Bdd::connectBdd()->prepare(INSERT.MESSAGEZ.BIENVENUE);
$resultat -> bindParam(':id_exp', $idexp);
$resultat -> bindParam(':id_dest', $id);
$resultat -> bindParam(':titre', $titre);
$resultat -> bindParam(':date', $date);
$resultat -> bindParam(':message', $message);
$resultat -> execute();
}
// activation du membre
// recuperation de la methode d'activation du site
// puis activation du membre
public static function activer($pseudo) {
$activation = Bdd::connectBdd()->prepare(SELECT.ALL.ACTIVATION.METHODEACTIV);
$activation -> execute();
$methode = $activation -> fetch(PDO::FETCH_ASSOC);
switch($methode['id']) {
case 1 :
Activation::activationAuto($pseudo);
$resultat = 'Votre inscription est terminée, vous pouvez maintenant vous connecter.<br /><a href="'.URLSITE.'/espacemembre/index.php"><span class="blue">Connexion</span></a>';
break;
case 2 :
Activation::activationMail($pseudo);
$resultat = 'Votre inscription est terminée, un email de confirmation vient de vous être envoyé,<br />pensez a vérifier vos spams.';
break;
case 3 :
$resultat = 'Votre inscription est terminée, un administarteur ou un modérateur doit la valider,<br />un email de confirmation vous sera envoyé dès que cette opération sera effectué,<br />pensez a vérifier vos spams.';
break;
}
return $resultat;
}
} // Fin de la classe d'inscription
###########################################################################################
// La classe connexion membre
class Connexion {
// fonction de deconnexion
public static function deconnexion($redirection) {
$_SESSION = array();
session_destroy();
if(!empty($redirection)) {
redirection(URLSITE.'/'.$redirection);
}
}
public static function passOubli($email) {
if(filter_var($email, FILTER_VALIDATE_EMAIL)) {
$verifMail = Bdd::connectBdd()->prepare(SELECT.ALL.MEMBRE.EMAIL);
$verifMail -> bindParam(':email', $email);
$verifMail -> execute();
if($verifMail -> rowCount() !== 1) {
$donnee = $verifMail -> fetch(PDO::FETCH_ASSOC);
$newPass = Cryptage::chaine(8);
$cryptPass = Cryptage::crypter($newPass);
$enregistrePass = Bdd::connectBdd()->prepare(UPDATE.MEMBREZ.MAJPASS.EMAIL);
$enregistrePass -> bindParam(':newPass', $cryptPass);
$enregistrePass -> bindParam(':email', $email);
$enregistrePass -> execute();
// ************************* //
$headers ='From: "'.$donnee['nom'].' '.$donnee['prenom'].'"'.$email.''."\n";
$headers .='Reply-To: '.MAILSITE.''."\n";
$headers .='Content-Type: text/plain; charset="iso-8859-1"'."\n";
$headers .='Content-Transfer-Encoding: 8bit';
$sujet = "Nouveau mot de passe pour ".RepairBike;
$message = 'Bonjour '.$donnee['pseudo'].','."\n\n";
$message .= "Voici votre nouveau mot de passe : ".$newPass."\n\n";
$message .= 'Cordialement,'."\n";
$message .= NOM_SITE.'.'."\n";
if(mail(MAIL_SITE, $sujet, $message, $headers)) {
return 'Un nouveau mot de passe viens de vous être envoyé,<br />pensez à vérifiez vos spams.';
}
else {
return '<span class="error-info">"Erreur lors de l\'envoie de votre mot de passe.</span>';
}
}
else {
return '<span class="error-info">L\'adresse email '.$email.' n\'existe pas,<br />veuillez en saisir une autre et recommencer.</span>';
}
}
else {
return '<span class="error-info">L\'adresse email saisi n\'est pas valide.</span>';
}
}
// fonction de connexion des membres
public static function connexionCreate() {
if(Captcha::captchaVerif() AND !empty($_POST['login']) AND !empty($_POST['pass'])) {
if(Connexion::verifLogin($_POST['login'])) {
if(Connexion::verifPass($_POST['pass'], $_POST['login'])) {
$_SESSION['id'] = Membre::recupId($_POST['login']);
$_SESSION['jeton'] = Connexion::jeton($_POST['login']);
Connexion::niveau($_POST['login']);
}
else {
return false;
}
}
else {
return false;
}
}
else {
return false;
}
}
// Fonction de verification que l'identifiant existe dans la bdd
public static function verifLogin($login) {
$resultat = Bdd::connectBdd()->prepare(SELECT.ALL.MEMBRE.LOGIN);
$resultat -> bindParam(':login', $login, PDO::PARAM_STR, 50);
$resultat -> execute();
if($resultat -> rowCount() === 1) {
return true;
}
else {
return false;
}
}
// Function de verification du mot de passe
public static function verifPass($pass, $login) {
$resultat = Bdd::connectBdd()->prepare(SELECT.ALL.MEMBRE.LOGIN);
$resultat -> bindParam(':login', $login, PDO::PARAM_STR, 50);
$resultat -> execute();
$donnee = $resultat -> fetch(PDO::FETCH_ASSOC);
if(Cryptage::crypter($pass) === $donnee['password']) {
return true;
}
else {
return false;
}
}
// La fonction de gestion des jetons de connexion lors de la connexion d'un membre
public static function jeton($login) {
$id = Membre::recupId($login);
$ip = Ip::get_ip();
$date = time();
$resultat = Bdd::connectBdd()->prepare(SELECT.ALL.JETON.JETONCONNEXION);
$resultat -> bindParam(':id', $id, PDO::PARAM_INT, 11);
$resultat -> bindParam(':ip', $ip);
$resultat -> execute();
if($resultat -> rowCount() === 1) {
$donnee = $resultat->fetch(PDO::FETCH_ASSOC);
$id = Membre::recupId($login);
$maj = Bdd::connectBdd()->prepare(UPDATE.JETONZ.JETONDATE.JETONMEMBRE);
$maj -> bindParam(':id', $id);
$maj -> bindParam(':date', $date);
$maj -> execute();
return $donnee['jeton'];
}
else {
$jeton = Cryptage::crypter(Cryptage::chaine(10));
$insert = Bdd::connectBdd()->prepare(INSERT.JETONZ.JETONVALUES);
$insert -> bindParam(':id', $id) ;
$insert -> bindParam(':jeton', $jeton) ;
$insert -> bindParam(':ip', $ip);
$insert -> bindParam(':date', $date);
$insert -> execute();
return $jeton;
}
}
// Fonction de recuperation du niveau du membre
// 3 possibilite -> Membre, moderateur, administrateur
// ****************
public static function niveau($login) {
$resultat = Bdd::connectBdd()->prepare(SELECT.ALL.MEMBRE.LOGIN);
$resultat -> bindParam(':login', $login, PDO::PARAM_STR, 50);
$resultat -> execute();
$donnee = $resultat->fetch(PDO::FETCH_ASSOC);
if($donnee['activation'] === '1') {
switch($donnee['niveau']) {
case 1 :
$_SESSION['niveau'] = '1';
$redirect = redirection(URLSITE.'/espacemembre/membre/index.php');
break;
case 2 :
$_SESSION['niveau'] = '2';
$redirect = redirection(URLSITE.'/espacemembre/moderateur/index.php');
break;
case 3 :
$_SESSION['niveau'] = '3';
$redirect = redirection(URLSITE.'/espacemembre/administrateur/index.php');
break;
}
}
elseif($donnee['activation'] === '5') {
$redirect = redirection(URLSITE.'/espacemembre/banni.php');
}
else {
$activation = Bdd::connectBdd()->prepare(SELECT.ALL.ACTIVATION.METHODEACTIV);
$activation -> execute();
$methode = $activation->fetch(PDO::FETCH_ASSOC);
switch($methode['id']) {
case 1 :
Activation::activationAuto($login);
return Connexion::niveau($login);
break;
case 2 :
Activation::activationMail($login);
$redirect = redirection(URLSITE.'/espacemembre/activationMail.php');
break;
case 3 :
$redirect = redirection(URLSITE.'/espacemembre/activationAdmin.php');
break;
}
}
return $redirect;
}
} // Fin de la classe de connexion membre
###########################################################################################
// La classe activation
class Activation {
// fonction activation automatique
public static function activationAuto($login) {
$activ = '1';
$resultat = Bdd::connectBdd()->prepare(UPDATE.MEMBREZ.ACTIVMEMBRE.LOGIN);
$resultat -> bindParam(':login', $login);
$resultat -> bindParam(':activer', $activ);
$resultat -> execute();
}
// fonction activation par email
/
public static function activationMail($login) {
$id = Membre::recupId($login);
$resultat = Bdd::connectBdd()->prepare(SELECT.ALL.JETONMAIL.IDMEMBRE);
$resultat -> bindParam(':id', $id, PDO::PARAM_INT, 11);
$resultat -> execute();
if($resultat -> rowCount() === 1) {
$donnee = $resultat->fetch(PDO::FETCH_ASSOC);
$jeton = $donnee['jeton'];
}
else {
$jeton = Cryptage::crypter(Cryptage::chaine(10));
$insert = Bdd::connectBdd()->prepare(INSERT.JETONMAILZ.JETONMAILVALUES);
$insert -> bindParam(':id', $id, PDO::PARAM_INT, 11);
$insert -> bindParam(':jeton', $jeton);
$insert -> execute();
}
if(Activation::activationEnvoiMail($login, $jeton)) {
return true;
}
else {
return false;
}
}
// envoie du mail d'activation
public static function activationEnvoiMail($login, $jeton) {
$headers ='From: "'.Membre::info($login, 'nom').' '.Membre::info($login, 'prenom').'"'.Membre::info($login, 'email').''."\n";
$headers .='Reply-To: '.MAILSITE.''."\n";
$headers .='Content-Type: text/plain; charset="iso-8859-1"'."\n";
$headers .='Content-Transfer-Encoding: 8bit';
$sujet = "Activation de l'espace membre ".NOMSITE;
$message = 'Bonjour '.Membre::info($login, 'pseudo').','."\n\n";
$message .= "Voici votre lien d'activation pour l'espace membre ".NOMSITE." : ".URLSITE."activation.php?securite=".$jeton.". ";
$message .= 'Cliquez sur ce lien ou copier-coller le dans votre navigateur.'."\n\n\n";
$message .= 'Cordialement,'."\n";
$message .= NOM_SITE.'.'."\n";
mail(MAIL_SITE, $sujet, $message, $headers);
}
// verification du jeton d'activation
public static function activationVerife($jeton) {
$resultat = Bdd::connectBdd()->prepare(SELECT.ALL.JETONMAIL.JETONACTIVATION);
$resultat -> bindParam(':jeton', $jeton);
$resultat -> execute();
if($resultat -> rowCount() === 1) {
$donnee = $resultat -> fetch(PDO::FETCH_ASSOC);
Activation::activationAuto($donnee['login']);
return true;
}
else {
return false;
}
}
} // Fin de la classe d'activation
###########################################################################################
// La classe de protection des espaces -> membre, moderateur et administrateur
class ProtectEspace {
// protection de l'espace membre
public static function membre($id, $captcha, $jeton, $niveau) {
if(empty($id) OR empty($captcha) OR empty($jeton)) {
redirection(URLSITE.'/espacemembre/deconnexion.php');
}
else {
if($niveau !== '1') {
redirection(URLSITE.'/espacemembre/deconnexion.php');
}
$resultat = Bdd::connectBdd()->prepare(SELECT.ALL.JETON.JETONSESSION);
$resultat -> bindParam(':id', $id, PDO::PARAM_INT, 11);
$resultat -> bindParam(':jeton', $jeton);
$resultat -> execute();
if($resultat -> rowCount() !== 1) {
redirection(URLSITE.'/espacemembre/deconnexion.php');
}
else {
if(Membre::info($id, 'activation') === '5') {
redirection(URLSITE.'/espacemembre/banni.php');
}
return true;
}
}
}
// protection de l'espace moderateur
/
public static function moderateur($id, $captcha, $jeton, $niveau) {
if(empty($id) OR empty($captcha) OR empty($jeton)) {
redirection(URLSITE.'/espacemembre/deconnexion.php');
}
else {
if($niveau !== '2') {
redirection(URLSITE.'/espacemembre/deconnexion.php');
}
$resultat = Bdd::connectBdd()->prepare(SELECT.ALL.JETON.JETONSESSION);
$resultat -> bindParam(':id', $id, PDO::PARAM_INT, 11);
$resultat -> bindParam(':jeton', $jeton);
$resultat -> execute();
if($resultat -> rowCount() !== 1) {
redirection(URLSITE.'/espacemembre/deconnexion.php');
}
else {
if(Membre::info($id, 'activation') === '5') {
redirection(URLSITE.'/espacemembre/banni.php');
}
return true;
}
}
}
// protection de l'espace administrateur
public static function administrateur($id, $captcha, $jeton, $niveau) {
if(empty($id) OR empty($captcha) OR empty($jeton)) {
redirection(URLSITE.'/espacemembre/deconnexion.php');
}
else {
if($niveau !== '3') {
redirection(URLSITE.'/espacemembre/deconnexion.php');
}
$resultat = Bdd::connectBdd()->prepare(SELECT.ALL.JETON.JETONSESSION);
$resultat -> bindParam(':id', $id, PDO::PARAM_INT, 11);
$resultat -> bindParam(':jeton', $jeton);
$resultat -> execute();
if($resultat -> rowCount() !== 1) {
redirection(URLSITE.'/espacemembre/deconnexion.php');
}
else {
if(Membre::info($id, 'activation') === '5') {
redirection(URLSITE.'/espacemembre/banni.php');
}
return true;
}
}
}
// compte le nombre de jeton de connexion pour le membre
public static function compteJeton($id) {
$resultat = Bdd::connectBdd()->prepare(SELECT.ALL.JETON.JETONMEMBRE);
$resultat -> bindParam(':id', $id, PDO::PARAM_INT, 11);
$resultat -> execute();
return '<a href="listeJeton.php">Il y a '.$resultat -> rowCount().' adresse(s) ip qui se connecte(nt) à votre espace membre.</a>';
}
// Liste des jeton de connexion du membre
public static function listeJeton($id) {
$liste = '';
$resultat = Bdd::connectBdd()->prepare(SELECT.ALL.JETON.JETONMEMBRE);
$resultat -> bindParam(':id', $id, PDO::PARAM_INT, 11);
$resultat -> execute();
while($jeton = $resultat -> fetch(PDO::FETCH_ASSOC)) {
$liste .= '<div class="list">
<div class="col1"></div>
<div class="col2">Le '.date('d/m/Y', $jeton['date']).' à '.date('H:i:s', $jeton['date']).'</div>
<div class="col3">'.$jeton['ip_connexion'].'</div>
<div class="col4">
<form method="post" action="">
<input type="hidden" value="'.$jeton['id'].'" name="id_jeton">
<input type="submit" value="Supprimer" name="supprime_connexion" class="statut-switch" />
</form>
</div>
</div>';
}
return $liste;
}
// effacer un jeton de connexion
public static function deleteJeton($id) {
$resultat = Bdd::connectBdd()->prepare(DELETE.JETON.ID);
$resultat -> bindParam(':id', $id, PDO::PARAM_INT, 11);
$resultat -> execute();
}
}
###########################################################################################
// La classe Membre
class Membre {
//Fonction de recuperation de l'id d'un membre
public static function recupId($login) {
$resultat = Bdd::connectBdd()->prepare(SELECT.ALL.MEMBRE.LOGIN);
$resultat -> bindParam(':login', $login, PDO::PARAM_STR, 50);
$resultat -> execute();
$donnee = $resultat -> fetch(PDO::FETCH_ASSOC);
return $donnee['id'];
}
// Fonction de recuperation des infos membre
// $id => id du membre
// $info => information qu l'on veux
public static function info($id, $info) {
$resultat = Bdd::connectBdd()->prepare(SELECT.ALL.MEMBRE.ID);
$resultat -> bindParam(':id', $id, PDO::PARAM_INT, 11);
$resultat -> execute();
$infoMembre = $resultat -> fetch(PDO::FETCH_ASSOC);
return $infoMembre[$info];
}
// protection affichage information membre
public static function protectInfo($id, $info) {
$resultat = Bdd::connectBdd()->prepare(SELECT.ALL.ACCESPROFIL.IDMEMBRE);
$resultat -> bindParam(':id', $id, PDO::PARAM_INT, 11);
$resultat -> execute();
$donnee = $resultat -> fetch(PDO::FETCH_ASSOC);
if($donnee[$info] === '1') {
$affiche = Membre::info($id, $info);
}
else {
$affiche = 'Non disponible';
}
return $affiche;
}
// changer autorisation d'une information du profil
// deux choix :
// -> Rendre visible aux autres membres
// -> Cacher l'information aux autres membres
// ***************************
public static function profilVisibilite($id, $info) {
$resultat = Bdd::connectBdd()->prepare(SELECT.ALL.ACCESPROFIL.IDMEMBRE);
$resultat -> bindParam(':id', $id, PDO::PARAM_INT, 11);
$resultat -> execute();
$donnee = $resultat -> fetch(PDO::FETCH_ASSOC);
if($donnee[$info] === '1') {
$maj = '0';
}
else {
$maj = '1';
}
$update = Bdd::connectBdd()->prepare(UPDATE.ACCESPROFILZ.' SET '.$info.MAJACCESPROFIL.IDMEMBRE);
$update -> bindParam(':maj', $maj);
$update -> bindParam(':id', $id, PDO::PARAM_INT, 11);
$update -> execute();
redirection('profil.php');
}
// visibilite d'une information d'un membre
public static function visibilite($id, $info) {
$resultat = Bdd::connectBdd()->prepare(SELECT.ALL.ACCESPROFIL.IDMEMBRE);
$resultat -> bindParam(':id', $id, PDO::PARAM_INT, 11);
$resultat -> execute();
$donnee = $resultat -> fetch(PDO::FETCH_ASSOC);
if($donnee[$info] === '1') {
return 'Cacher';
}
else {
return 'Rendre Visible';
}
}
// Mise a jour du profil du membre
public static function majProfil($id, $naissance, $genre, $nom, $prenom, $email, $facebook, $twitter, $site, $tel, $adresse, $cp, $ville, $mailing, $description) {
$description = filter_var($description, FILTER_SANITIZE_STRING);
$description = nl2br($description);
$resultat = Bdd::connectBdd()->prepare(UPDATE.MEMBREZ.MAJPROFIL);
$resultat -> bindParam(':email', $email);
$resultat -> bindParam(':tel', $tel);
$resultat -> bindParam(':adresse', $adresse);
$resultat -> bindParam(':cp', $cp);
$resultat -> bindParam(':ville', $ville);
$resultat -> bindParam(':genre', $genre);
$resultat -> bindParam(':naissance', $naissance);
$resultat -> bindParam(':nom', $nom);
$resultat -> bindParam(':prenom', $prenom);
$resultat -> bindParam(':facebook', $facebook);
$resultat -> bindParam(':twitter', $twitter);
$resultat -> bindParam(':site', $site);
$resultat -> bindParam(':description', $description);
$resultat -> bindParam(':mailing', $mailing);
$resultat -> bindParam(':id', $id, PDO::PARAM_INT, 11);
$resultat -> execute();
redirection('profil.php');
}
// changer de mot de passe
public static function newPass($id, $passActuel, $newPassUn, $newPassDe) {
if(!empty($passActuel) AND !empty($newPassUn) AND !empty($newPassDe)) {
if($newPassUn === $newPassDe) {
$verifPass = Bdd::connectBdd()->prepare(SELECT.ALL.MEMBRE.ID);
$verifPass -> bindParam(':id', $id, PDO::PARAM_INT, 11);
$verifPass -> execute();
$dataPass = $verifPass -> fetch(PDO::FETCH_ASSOC);
if($dataPass['password'] === Cryptage::crypter($passActuel)) {
$newPass = Cryptage::crypter($newPassUn);
$majPass = Bdd::connectBdd()->prepare(UPDATE.MEMBREZ.MAJPASS.ID);
$majPass -> bindParam(':newPass', $newPass);
$majPass -> bindParam(':id', $id, PDO::PARAM_INT, 11);
if($majPass -> execute()) {
$resultat = 'Votre mot de passe a été changé avec succès.';
}
else {
$resultat = '<span class="error-info">Une erreur est survenue pendant la mise à jour de votre mot de passe.</span>';
}
}
else {
$resultat = '<span class="error-info">Vous n\'avez pas saisi correctement votre mot de passe actuel,<br />veuillez recommencer.</span>';
}
}
else {
$resultat = '<span class="error-info">Les champs "Votre nouveau mot de passe" et "Saisir à nouveau le mot de passe" doivent être identiques,<br />veuillez recommencer.</span>';
}
}
else {
$resultat = '<span class="error-info">Pour changer de mot de passe vous devez remplir tout les champs,<br />veuillez recommencer.</span>';
}
return $resultat;
}
} // Fin de la classe Membre
###########################################################################################
// La classe Message
class Message {
// Verification que le message envoye ne contient pas de mots interdits
public static function interdit($message=NULL) {
$motInterdit = "/\b(..)\b/ui";
$message = str_replace("'", "", $message);
if(!empty($message)) {
if(preg_match($motInterdit, $message)) {
return false;
}
else {
return true;
}
}
else {
return true;
}
}
// nombre de nouveau message du membre connecte
public static function nouveauNb($id) {
$resultat = Bdd::connectBdd()->prepare(SELECT.ALL.MESSAGE.NBNEW);
$resultat -> bindParam(':id', $id, PDO::PARAM_INT, 11);
$resultat -> execute();
if($resultat -> rowCount() === 0) {
return 'Vous n\'avez aucun nouveau message';
}
else {
return 'Vous avez '.$resultat -> rowCount().' nouveau(x) message(s).';
}
}
public static function liste($id) {
$liste = '';
$resultat = Bdd::connectBdd()->prepare(SELECT.ALL.MESSAGE.MESSAGELISTE);
$resultat -> bindParam(':id', $id, PDO::PARAM_INT, 11);
$resultat -> execute();
while($donnee = $resultat -> fetch(PDO::FETCH_ASSOC)) {
if($donnee['lu'] === '1') {
$image = '<img src="'.URLSITE.'/espacemembre/design/img/email-open.png" width="30" height="33" align="absmiddle">';
}
else {
$image = '<img src="'.URLSITE.'/espacemembre/design/img/email-new-icon.png" width="30" height="33" align="absmiddle">';
}
$liste .= '<div class="list">
<div class="col5">'.$image.'</div>
<div class="col2">Le '.date('d/m/Y', $donnee['timestamp']).' à '.date('H:i:s', $donnee['timestamp']).'</div>
<div class="col3"><a href="profil_membre.php?id='.$donnee['id_expediteur'].'">'.Membre::info($donnee['id_expediteur'], 'pseudo').'</a></div>
<div class="col4"><a href="message.php?id='.$donnee['id'].'">'.$donnee['titre'].'</a></div>
</div>';
}
if(!empty($liste)) {
return $liste;
}
else {
return '<div class="list">Vous n\'avez aucun message</div>';
}
}
// Affiche le message recut
public static function info($id, $info) {
$resultat = Bdd::connectBdd()->prepare(SELECT.ALL.MESSAGE.ID);
$resultat -> bindParam(':id', $id, PDO::PARAM_INT, 11);
$resultat -> execute();
$donnee = $resultat -> fetch(PDO::FETCH_ASSOC);
return $donnee[$info];
}
// message lu
public static function lu($id) {
$resultat = Bdd::connectBdd()->prepare(UPDATE.MESSAGEZ.LU.ID);
$resultat -> bindParam(':id', $id, PDO::PARAM_INT, 11);
$resultat -> execute();
}
// efface message
public static function efface($id) {
$resultat = Bdd::connectBdd()->prepare(UPDATE.MESSAGEZ.EFFACE.ID);
$resultat -> bindParam(':id', $id, PDO::PARAM_INT, 11);
$resultat -> execute();
}
public static function messageEnvoi($id_exp, $destinataire, $titre, $message) {
if(!empty($destinataire)) {
if(!empty($titre)) {
if(!empty($message)) {
if(Message::interdit($message)) {
$message = nl2br(filter_var($message, FILTER_SANITIZE_STRING));
$titre = filter_var($titre, FILTER_SANITIZE_STRING);
$date = time();
$resultat = Bdd::connectBdd()->prepare(INSERT.MESSAGEZ.MESSAGEINSERT);
$resultat -> bindParam(':id_exp', $id_exp, PDO::PARAM_INT, 11);
$resultat -> bindParam(':id_dest', $destinataire, PDO::PARAM_INT, 11);
$resultat -> bindParam(':titre', $titre);
$resultat -> bindParam(':date', $date);
$resultat -> bindParam(':message', $message);
$resultat -> execute();
return 'Votre message est envoyé';
}
else {
return '<span-class="error-info">Votre message ou votre titre contient du language SMS ou des mots interdits, veuillez recommencer.</span>'.$message;
}
}
else {
return '<span-class="error-info">Vous devez saisir un message.</span>';
}
}
else {
return '<span-class="error-info">Vous devez saisir un titre au message.</span>';
}
}
else {
return '<span-class="error-info">Vous devez choisir un destinataire.</span>';
}
}
// Message a tous les membres
public static function messageAll($titre, $message) {
if(!empty($titre)) {
if(!empty($message)) {
$id = '2';
$all = Bdd::connectBdd()->prepare(SELECT.ALL.MEMBRE.NOID);
$all -> bindParam(':id', $id, PDO::PARAM_INT, 11);
$all -> execute();
$message = nl2br(filter_var($message, FILTER_SANITIZE_STRING));
$titre = filter_var($titre, FILTER_SANITIZE_STRING);
$date = time();
$id_exp = '2';
while($tous = $all -> fetch(PDO::FETCH_ASSOC)) {
$destinataire = $tous['id'];
$resultat = Bdd::connectBdd()->prepare(INSERT.MESSAGEZ.MESSAGEINSERT);
$resultat -> bindParam(':id_exp', $id_exp, PDO::PARAM_INT, 11);
$resultat -> bindParam(':id_dest', $destinataire, PDO::PARAM_INT, 11);
$resultat -> bindParam(':titre', $titre);
$resultat -> bindParam(':date', $date);
$resultat -> bindParam(':message', $message);
$resultat -> execute();
}
return 'Votre message est envoyé';
}
else {
return '<span-class="error-info">Vous devez saisir un message.</span>';
}
}
else {
return '<span-class="error-info">Vous devez saisir un titre au message.</span>';
}
}
// liste des messages envoyes
public static function listeEnvoi($id) {
$liste = '';
$resultat = Bdd::connectBdd()->prepare(SELECT.ALL.MESSAGE.IDEXP);
$resultat -> bindParam(':id', $id, PDO::PARAM_INT, 11);
$resultat -> execute();
while($donnee = $resultat -> fetch(PDO::FETCH_ASSOC)) {
if($donnee['lu']==1) {
$image = '<img src="'.URLSITE.'/espacemembre/design/img/email-open.png" width="30" height="33" align="absmiddle">';
}
else {
$image = '<img src="'.URLSITE.'/espacemembre/design/img/email-new-icon.png" width="30" height="33" align="absmiddle">';
}
if($donnee['effacer']==1) {
$image = '<img src="'.URLSITE.'/espacemembre/design/img/suppr-icon.png" width="30" height="33" align="absmiddle">';
}
$liste .= '<div class="list">
<div class="col5">'.$image.'</div>
<div class="col2">Le '.date('d/m/Y', $donnee['timestamp']).' à '.date('H:i:s', $donnee['timestamp']).'</div>
<div class="col3"><a href="profil_membre.php?id='.$donnee['id_destinataire'].'">'.Membre::info($donnee['id_destinataire'], 'pseudo').'</a></div>
<div class="col4">'.$donnee['titre'].'</div>
</div>';
}
if(!empty($liste)) {
return $liste;
}
else {
return '<tr><td align="center" colspan="4">Vous n\'avez pas envoyé de message</td></tr>';
}
}
// liste des destinataires possible pour nouveau message
public static function choixDestinataire($id) {
$liste = '';
$resultat = Bdd::connectBdd()->prepare(SELECT.ALL.MEMBRE.NOID);
$resultat -> bindParam(':id', $id, PDO::PARAM_INT, 11);
$resultat -> execute();
while($donnee = $resultat -> fetch(PDO::FETCH_ASSOC)) {
$liste .= '<option value="'.$donnee['id'].'">'.$donnee['pseudo'].'</option>';
}
return $liste;
}
} // Fin de la classe message
// la classe smiley
class Smiley {
// Affiche la liste des smileys
public static function liste() {
$liste = '';
$resultat = Bdd::connectBdd()->prepare(SELECT.ALL.SMILEY);
$resultat -> execute();
while($donnee = $resultat -> fetch(PDO::FETCH_ASSOC)) {
$liste .= '<a href="javascript:void(0);" onClick="smiley(\'S'.$donnee['id'].'S\');"><img src="'.URLSITE.'/'.$donnee['url'].'" width="32" height="32" /></a>';
}
return $liste;
}
// Affiche les smileys dans le message
public static function affiche($text) {
$resultat = Bdd::connectBdd()->prepare(SELECT.ALL.SMILEY);
$resultat -> execute();
while($donnee = $resultat -> fetch(PDO::FETCH_ASSOC)) {
$text = str_replace($donnee['bbcode'], '<img src="'.URLSITE.'/'.$donnee['url'].'" width="32" height="32" align="absmiddle" />', $text);
}
return $text;
}
} // Fin de la classe smiley
// La classe Avatar
class Avatar {
// affiche l'avatar du membre
public static function membre($id) {
$resultat = Bdd::connectBdd()->prepare(SELECT.ALL.AVATAR.ID);
$resultat -> bindParam(':id', $id, PDO::PARAM_INT, 11);
$resultat -> execute();
$donnee = $resultat -> fetch(PDO::FETCH_ASSOC);
return $donnee['url'];
}
// liste des avatars
public static function liste() {
$liste = '';
$resultat = Bdd::connectBdd()->prepare(SELECT.ALL.AVATAR);
$resultat -> execute();
while($donnee = $resultat -> fetch(PDO::FETCH_ASSOC)) {
$liste .= '<div class="avatar-box"><img src="'.URLSITE.'/'.$donnee['url'].'" width="120" height="120" alt="Avatar" title="Avatar"><br /><input type="radio" value="'.$donnee['id'].'" name="id_avatar"></div>';
}
return $liste;
}
// mise a jour avatar
public static function maj($id, $id_avatar) {
$resultat = Bdd::connectBdd()->prepare(UPDATE.MEMBREZ.MAJAVATAR.ID);
$resultat -> bindParam(':idAvatar', $id_avatar, PDO::PARAM_INT, 11);
$resultat -> bindParam(':id', $id, PDO::PARAM_INT, 11);
$resultat -> execute();
redirection('profil.php');
}
} // Fin de la classe Avatar
// La classe Info sur le site
class InfoSite {
// Nombre de membres
public static function membreNb() {
$resultat = Bdd::connectBdd()->prepare(SELECT.ALL.MEMBRE);
$resultat -> execute();
if($resultat -> rowCount() === 0) {
return 'Il y a aucun membre inscrit';
}
else {
return 'Il y a '.$resultat -> rowCount().' membres inscrits';
}
}
// Liste des activations possible
public static function listeActivation() {
$liste = '';
$resultat = Bdd::connectBdd()->prepare(SELECT.ALL.ACTIVATION);
$resultat -> execute();
while($option = $resultat -> fetch(PDO::FETCH_ASSOC)) {
if($option['activation'] === '1') {
$liste .= '<option value="'.$option['id'].'" selected="selected">'.$option['mode'].'</option>';
}
else {
$liste .= '<option value="'.$option['id'].'">'.$option['mode'].'</option>';
}
}
return $liste;
}
// changer le mode d'activation
public static function activationChange($id) {
$activ = '1';
$oui = Bdd::connectBdd()->prepare(UPDATE.ACTIVATIONZ.CHANGEMETOD.ID);
$oui -> bindParam(':activ', $activ);
$oui -> bindParam(':id', $id, PDO::PARAM_INT, 11);
if($oui -> execute()) {
$desac = '0';
$non = Bdd::connectBdd()->prepare(UPDATE.ACTIVATIONZ.CHANGEMETOD.NOI);
$non -> bindParam(':activ', $desac);
$non -> bindParam(':id', $id, PDO::PARAM_INT, 11);
$non -> execute();
}
redirection(URLSITE.'/espacemembre/administrateur/activation.php');
}
// Liste des membres pour les administrateurs
public static function listeMembre($id) {
$liste = '';
$resultat = Bdd::connectBdd()->prepare(SELECT.ALL.MEMBRE.' ORDER BY activation ASC');
$resultat -> bindParam(':id', $id, PDO::PARAM_INT, 11);
$resultat -> execute();
while($donnee = $resultat -> fetch(PDO::FETCH_ASSOC)) {
$idMembre = $donnee['id'];
$pseudo = $donnee['pseudo'];
if($donnee['activation'] === '5') {
$niveau = 'Banni';
$action = '<input type="hidden" value="'.$donnee['id'].'" name="id"> <input type="submit" name="debannir" value="Débannir" class="statut-switch"> <input type="submit" name="supprim" value="Supprimer" class="statut-switch">';
}
elseif($donnee['activation'] === '0') {
$niveau = 'Nouvel(le) inscrit(e)';
$action = '<input type="hidden" value="'.$donnee['id'].'" name="id"><input type="submit" name="inscription" value="Valider l\'inscription" class="statut-switch">';
}
else {
switch($donnee['niveau']) {
case 1 :
$niveau = 'Membre';
$action = '<input type="hidden" value="'.$donnee['id'].'" name="id"> <input type="submit" name="bannir" value="Bannir" class="statut-switch"> <input type="submit" name="moderateur" value="Passer Modérateur" class="statut-switch">';
break;
case 2 :
$niveau = 'Modérateur';
$action = '<input type="hidden" value="'.$donnee['id'].'" name="id"> <input type="submit" name="bannir" value="Bannir" class="statut-switch"> <input type="submit" name="membre" value="Repasser Membre" class="statut-switch">';
break;
case 3 :
$niveau = 'Administrateur';
$action = '';
break;
case 4 :
$niveau = 'Créateur';
$action = '<input type="hidden" value="'.$donnee['id'].'" name="id"> <input type="submit" name="supprim" value="Supprimer" class="statut-switch">';
break;
}
}
$liste .= '<div class="list">
<div class="col1"></div>
<div class="col2"><a href="profil_membre.php?id='.$idMembre.'">'.$pseudo.'</a></div>
<div class="col3">'.$niveau.'</div>
<div class="col4"><form action="" method="post">'.$action.'</form></div>
</div>';
}
return $liste;
}
// Liste des membres pour les moderateurs
public static function listeMembreModo($id) {
$liste = '';
$resultat = Bdd::connectBdd()->prepare(SELECT.ALL.MEMBRE.' ORDER BY activation ASC');
$resultat -> bindParam(':id', $id, PDO::PARAM_INT, 11);
$resultat -> execute();
while($donnee = $resultat -> fetch(PDO::FETCH_ASSOC)) {
$idMembre = $donnee['id'];
$pseudo = $donnee['pseudo'];
if($donnee['activation'] === '5') {
$niveau = 'Banni';
$action = '<input type="hidden" value="'.$donnee['id'].'" name="id"> <input type="submit" name="debannir" value="Débannir" class="statut-switch">';
}
elseif($donnee['activation'] === '0') {
$niveau = 'Nouvel(le) inscrit(e)';
$action = '<input type="hidden" value="'.$donnee['id'].'" name="id"><input type="submit" name="inscription" value="Valider l\'inscription" class="statut-switch">';
}
else {
switch($donnee['niveau']) {
case 1 :
$niveau = 'Membre';
$action = '<input type="hidden" value="'.$donnee['id'].'" name="id"> <input type="submit" name="bannir" value="Bannir" class="statut-switch">';
break;
case 2 :
$niveau = 'Modérateur';
$action = '';
break;
case 3 :
$niveau = 'Administrateur';
$action = '';
break;
case 4 :
$niveau = 'Créateur';
$action = '';
break;
}
}
$liste .= '<div class="list">
<div class="col1"></div>
<div class="col2"><a href="profil_membre.php?id='.$idMembre.'">'.$pseudo.'</a></div>
<div class="col3">'.$niveau.'</div>
<div class="col4"><form action="" method="post">'.$action.'</form></div>
</div>';
}
return $liste;
}
} // Fin de la classe Info sur le site
###########################################################################################
// La classe administrateur
class Admin {
// bannir un membre
public static function bannir($id, $messagePost) {
$activ = '5';
$resultat = Bdd::connectBdd()->prepare(UPDATE.MEMBREZ.ACTIVMEMBRE.ID);
$resultat -> bindParam(':activer', $activ);
$resultat -> bindParam(':id', $id, PDO::PARAM_INT, 11);
$resultat -> execute();
// ******************* //
$headers ='From: "'.Membre::info($login, 'nom').' '.Membre::info($login, 'prenom').'"'.Membre::info($login, 'email').''."\n";
$headers .='Reply-To: '.MAILSITE.''."\n";
$headers .='Content-Type: text/plain; charset="iso-8859-1"'."\n";
$headers .='Content-Transfer-Encoding: 8bit';
$sujet = "Bannissement l'espace membre ".NOMSITE;
$message = 'Bonjour '.Membre::info($login, 'pseudo').','."\n\n";
$message .= 'L\'administrateur du site '.NOMSITE.' vous a banni de l\'espace membre.'."\n\n";
$message .= 'Pour le motif suivant : '."\n";
$message .= $messagePost."\n";
$message .= 'Cordialement,'."\n";
$message .= NOM_SITE.'.'."\n";
mail(MAIL_SITE, $sujet, $message, $headers);
// ******************* //
redirection(URLSITE.'/espacemembre/administrateur/listeMembre.php');
}
// debannir un membre
public static function debannir($id) {
$activ = '1';
$resultat = Bdd::connectBdd()->prepare(UPDATE.MEMBREZ.ACTIVMEMBRE.ID);
$resultat -> bindParam(':activer', $activ);
$resultat -> bindParam(':id', $id, PDO::PARAM_INT, 11);
$resultat -> execute();
redirection(URLSITE.'/espacemembre/administrateur/listeMembre.php');
}
// Passer un membre -> moderateur
public static function passeModo($id) {
$niveau = '2';
$resultat = Bdd::connectBdd()->prepare(UPDATE.MEMBREZ.NIVEAU.ID);
$resultat -> bindParam(':niveau', $niveau);
$resultat -> bindParam(':id', $id, PDO::PARAM_INT, 11);
$resultat -> execute();
redirection(URLSITE.'/espacemembre/administrateur/listeMembre.php');
}
// passer un moderateur -> membre
public static function passeMembre($id) {
$niveau = '1';
$resultat = Bdd::connectBdd()->prepare(UPDATE.MEMBREZ.NIVEAU.ID);
$resultat -> bindParam(':niveau', $niveau);
$resultat -> bindParam(':id', $id, PDO::PARAM_INT, 11);
$resultat -> execute();
redirection(URLSITE.'/espacemembre/administrateur/listeMembre.php');
}
} // Fin de la classe administrateur
?>