Mon code est-il bien codé ?
Posté : 30 sept. 2014, 00:22
Bonjour,
J'ai tout une série de fonctions qui permet de faire fonctionner mon site : Inscription, connexion, mot de passe oublié, affichage d'actualités, d'avatars d'infos des membres, suppressions d'actualités etc...
Toutes mes connexions à mysql se font avec PDO.
Tous mes codes fonctionnent =D>
Ça peut aider d'autres personnes qui cherchent comment faire (Si mes codes sont bien faits
)
Le problème c'est que je ne sais pas si c'est codé proprement
J'utilise à 100% htmlspecialchars
Je fais des requêtes préparées etc...
Y'a t-il une personne qui veut se dévouer pour regarder rapidement mon code et me dire ses impressions ?
- Fonctions d'affichages des avatars :
Merci beaucoup pour votre aide
J'ai tout une série de fonctions qui permet de faire fonctionner mon site : Inscription, connexion, mot de passe oublié, affichage d'actualités, d'avatars d'infos des membres, suppressions d'actualités etc...
Toutes mes connexions à mysql se font avec PDO.
Tous mes codes fonctionnent =D>
Ça peut aider d'autres personnes qui cherchent comment faire (Si mes codes sont bien faits
Le problème c'est que je ne sais pas si c'est codé proprement
J'utilise à 100% htmlspecialchars
Je fais des requêtes préparées etc...
Y'a t-il une personne qui veut se dévouer pour regarder rapidement mon code et me dire ses impressions ?
- Fonctions d'affichages des avatars :
<?php
// Affichage de l'avatar du membre connecté
function avatar($id){
$req = Bdd::connect() -> prepare('SELECT id, sexe FROM users u INNER JOIN users_infos ui ON u.id = ui.userid WHERE u.id = :id');
$req -> execute(array('id' => $id));
$donnees = $req -> fetch();
$avatar = $_SERVER['DOCUMENT_ROOT'].'/users/upload/avatars/'.$donnees['id'].'-mini.jpg';
$defaut = $donnees['sexe'] == 'homme' ? 'homme.jpg' : 'femme.jpg';
if(file_exists($avatar)){
echo $donnees['id'].'-mini.jpg';
} else {
echo $defaut;
}
$req -> closeCursor();
}
// Affichage des avatars du fil d'actualités
function avatarFeed($id){
$req = Bdd::connect() -> prepare('SELECT id, sexe FROM users u INNER JOIN users_infos ui ON u.id = ui.userid INNER JOIN users_feed uf ON u.id = uf.feed_userid WHERE uf.feed_userid = :id');
$req -> execute(array('id' => $id));
$donnees = $req -> fetch();
$avatar = $_SERVER['DOCUMENT_ROOT'].'/users/upload/avatars/'.$donnees['id'].'-mini.jpg';
$defaut = $donnees['sexe'] == 'homme' ? 'homme.jpg' : 'femme.jpg';
if(file_exists($avatar)){
echo $donnees['id'].'-mini.jpg';
} else {
echo $defaut;
}
$req -> closeCursor();
}
?>
- Fonctions de créations, d'affichages et de suppressions d'actualités :
<?php
// Création d'un statut
function createFeed($feed_userid,$feed_text,$feed_acces){
$feed_text = $_POST['feed_text'];
if(isset($feed_text) && !empty($feed_text)){
$req = Bdd::connect() -> prepare('INSERT INTO users_feed (feed_userid, feed_text, feed_acces, feed_date) VALUES (:feed_userid, :feed_text, :feed_acces, NOW())');
$req -> execute(array('feed_userid' => $feed_userid,'feed_text' => trim(htmlspecialchars($feed_text, ENT_QUOTES, 'UTF-8')),'feed_acces' => $feed_acces));
$req -> closeCursor();
$req = Bdd::connect() -> prepare('SELECT * FROM users_feed uf LEFT JOIN users u ON uf.feed_userid = u.id ORDER BY feed_date DESC');
$req -> execute();
$donnees = $req -> fetch(); ?>
<div class="clearfix feedPost">
<div class="post">
<a href="<?php echo $donnees['pseudo']; ?>" class="postAvatar"><img src="users/upload/avatars/<?php echo avatarFeed($donnees['feed_userid']); ?>" alt="" height="56" width="56" /><i class="avatarCover"></i></a>
<a href="<?php echo $donnees['pseudo']; ?>" class="postName"><?php echo maj($donnees['prenom']).' '.maj($donnees['nom']); ?></a>
<div class="postOpt"></div>
<div class="postContent"><?php echo nl2br(smiley($donnees['feed_text'])); ?></div>
<div class="postDate"><?php echo getRelativeTime($donnees['feed_date']); ?></div>
<form method="post" action="#" class="comForm" onsubmit="return false;">
</form>
</div>
</div>
<?php $req -> closeCursor();
} else {
return false;
}
}
// Affichage de tous les statuts selon les paramètres de confidentialité
function displayFeed(){
$req = Bdd::connect() -> prepare('SELECT * FROM users_feed uf LEFT JOIN users u ON uf.feed_userid = u.id ORDER BY feed_date DESC');
$req -> execute();
if($req -> rowCount() >= 1){
while($donnees = $req -> fetch()){ ?>
<div class="clearfix feedPost">
<div class="post">
<a href="<?php echo $donnees['pseudo']; ?>" class="postAvatar"><img src="users/upload/avatars/<?php echo avatarFeed($donnees['feed_userid']); ?>" alt="" height="56" width="56" /><i class="avatarCover"></i></a>
<a href="<?php echo $donnees['pseudo']; ?>" class="postName"><?php echo maj($donnees['prenom']).' '.maj($donnees['nom']); ?></a>
<div class="postOpt"></div>
<div class="postContent"><?php echo nl2br(smiley($donnees['feed_text'])); ?></div>
<div class="postDate"><?php echo getRelativeTime($donnees['feed_date']); ?></div>
<form method="post" action="#" class="comForm" onsubmit="return false;">
</form>
</div>
</div>
<?php }
} else { echo '<div id="nofeed">Publiez quelque chose, partager des articles, photos ou vidéos...</div>'; }
$req -> closeCursor();
}
// Suppression d'un statut
function deleteFeed($feed_id){
$feed_id = $_GET['feed_id'];
if(isset($_GET['feed_id'])){
$req = Bdd::connect() ->prepare('DELETE FROM users_feed WHERE feed_id = :feed_id AND feed_userid = :id');
$req -> bindParam(':feed_id', $feed_id, PDO::PARAM_INT, 11);
$req -> bindParam(':id', $_SESSION['id'], PDO::PARAM_INT, 11);
$req -> execute();
} else {
return false;
}
}
?>
- Fonctions de connexion, de mot de passe oublié à l'espace membre
<?php
include_once('mail/class.phpmailer.php');
// Connexion à la base de données
function login($email,$mdp){
$email = htmlspecialchars($_POST['email']);
$mdp = htmlspecialchars(sha1($_POST['mdp']));
if(!empty($_POST['email']) && !empty($_POST['mdp'])){
if(preg_match("!^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$!",$email)){
$req = Bdd::connect() -> prepare('SELECT id, pseudo, email, mdp FROM users WHERE email = :email AND mdp = :mdp');
$req -> execute(array('email' => $email,'mdp' => $mdp));
$donnees = $req -> fetch();
if(!$donnees){
echo '<span class="error">Vos identifiants sont incorrects</span>';
} else {
$_SESSION['id'] = $donnees['id'];
$_SESSION['pseudo'] = $donnees['pseudo'];
header('location: home');
}
$req -> closeCursor();
} else {
echo '<span class="error">Veuillez entrer une adresse électronique valide</span>';
}
} else {
echo '<span class="error">Veuillez remplir tous les champs</span>';
}
}
// Envoi d'un email avec un nouveau mot de passe
function recover($recoverEmail){
$email = $_POST['recoverEmail'];
if(preg_match("!^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$!",$email)){
if(!empty($_POST['recoverEmail'])){
$req = Bdd::connect() -> prepare('SELECT id, nom, prenom, email FROM users WHERE email = :email');
$req -> execute(array('email' => $email));
$donnees = $req -> fetch();
if(!$donnees){
echo '<span class="error">Aucun compte n\'est associé à cette email :<br />'.$email.'</span>';
} else {
$newPass = chaine(8);
$cryptPass = sha1($newPass);
$req1 = Bdd::connect()->prepare('UPDATE users SET mdp = :newPass WHERE email = :email');
$req1 -> execute(array('newPass' => $cryptPass,'email' => $email));
$req1 -> closeCursor();
if(preg_match('#@(hotmail|live|msn).[a-z]{2,4}$#', $email)){
$br = "\n";
} else {
$br = "\r\n";
}
$from = 'Web Astronomie';
$sujet = 'Modification du mot de passe de votre compte Web Astronomie';
$message = '
<br />
<div style="width:600px;">
<div style="background-color:#003d57;border-bottom:4px solid #0887bd;border-radius:5px 5px 0 0;height:80px;">
<a href="http://www.web-astronomie.fr" target="_blank" style="padding:20px;display:inline-block;">
<img src="http://www.web-astronomie.fr/img/mail/logo.png" height="39" width="140" alt="" />
</a>
</div>
<div style="background-color:#e9eaed;border:1px solid #ccc;border-radius:0 0 5px 5px;border-top:none;padding:10px 15px;min-height:100px;">
<h1 style="font-size:15px;font-weight:bold;font-family:arial;color:#333;padding-bottom:15px;">'.$sujet.'</h1>
<span>Bonjour '.ucfirst($donnees['prenom']).' !</span><br />
<span>Le mot de passe de votre compte a bien été modifié.</span><br />
<span>Voici votre nouveau mot de passe : <strong>'.$newPass.'</strong></span><br /><br />
<a href="http://www.web-astronomie.fr/login" target="_blank" style="text-decoration:none;background-color:#308eb6;border-color:#308eb6;border:4px solid #308eb6;color:#fff;border-radius:5px;padding:2px 5px;display:inline-block;">Connectez-vous</a><br /><br />
<span>Une fois connecté à votre compte, nous vous conseillons de le modifier à nouveau.</span><br /><br />
<span>Cordialement,<br />L\'équipe de Web Astronomie.</span>
</div>
</div>
<br />
';
$mail = new PHPmailer();
$mail->IsMail();
$mail->SMTPAuth = false;
$mail->IsHTML(true);
$mail->CharSet = 'UTF-8';
$mail->SetFrom($from, '<[email protected]>');
$mail->From = '[email protected]';
$mail->FromName = 'Web Astronomie';
$mail->AddAddress($email);
$mail->Subject = $sujet;
$mail->Body = $message;
$mail->AltBody = 'Vous ne pouvez pas ouvrir cet email : Contactez l\'administrateur du sitesupport';
if(!$mail->Send()){
echo '<span class="error">Erreur lors de l\'envoie de votre mot de passe</span>';
} else {
echo '<span class="success">Un nouveau mot de passe viens de vous être envoyé<br /><span style="font-size:11px;font-weight:bold;">Certains comptes impliquent la vérification de vos SPAMS</span></span>';
}
$mail->SmtpClose();
unset($mail);
}
$req -> closeCursor();
} else {
echo '<span class="error">Veuillez remplir au moins un champ</span>';
}
} else {
echo '<span class="error">Veuillez entrer une adresse électronique valide</span>';
}
}
?>
- Fonction d'inscription à l'espace membre :
<?php
// Inscription d'un membre
function register($pseudo,$email,$mdp,$verifmdp,$nom,$prenom,$sexe,$jour,$mois,$annee){
$pseudo = htmlspecialchars($_POST['pseudo']);
$email = htmlspecialchars($_POST['email']);
$mdp = sha1(htmlspecialchars($_POST['mdp']));
$verifmdp = sha1(htmlspecialchars($_POST['verifmdp']));
$nom = htmlspecialchars($_POST['nom']);
$prenom = htmlspecialchars($_POST['prenom']);
$sexe = htmlspecialchars($_POST['sexe']);
$jour = (int) $_POST['jour'];
$mois = htmlspecialchars($_POST['mois']);
$annee = (int) $_POST['annee'];
if(!empty($pseudo) && !empty($email) && !empty($mdp) && !empty($verifmdp) && !empty($nom) && !empty($prenom) && !empty($sexe) && !empty($jour) && !empty($mois) && !empty($annee)){
if(preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $email)){
$req = Bdd::connect() -> prepare('SELECT id FROM users WHERE email = :email');
$req -> execute(array('email' => $email));
$donnees = $req -> fetch();
if($donnees){
echo '<span class="error">L\'adresse email est déjà utilisée</span>';
} else {
$req -> closeCursor();
$req = Bdd::connect() -> prepare('SELECT id FROM users WHERE pseudo = :pseudo');
$req -> execute(array('pseudo' => $pseudo));
$donnees = $req -> fetch();
if($donnees){
echo '<span class="error">Le nom d\'utilisateur est déjà utilisé</span>';
} elseif($mdp != $verifmdp){
echo '<span class="error">Les mots de passe ne sont pas identiques</span>';
} else {
$req = Bdd::connect() -> prepare('INSERT INTO users (pseudo, email, mdp, statut, nom, prenom, signupdate) VALUES(:pseudo, :email, :mdp, :statut, :nom, :prenom, NOW())');
$req -> execute(array('pseudo' => $pseudo,'email' => $email,'mdp' => $mdp,'statut' => 'membre','nom' => $nom,'prenom' => $prenom));
$req -> closeCursor();
$req1 = Bdd::connect() -> prepare('SELECT * FROM users WHERE email = :email');
$req1 -> execute(array('email' => $email));
$donnees = $req1 -> fetch();
$req2 = Bdd::connect() -> prepare('INSERT INTO users_infos (userid, sexe, jour, mois, annee, profilcomplete, confidentiel, credits) VALUES(:userid, :sexe, :jour, :mois, :annee, :profilcomplete, :confidentiel, :credits)');
$req2 -> execute(array('userid' => $donnees['id'],'sexe' => $sexe,'jour' => $jour,'mois' => $mois,'annee' => $annee,'profilcomplete' => 70,'confidentiel' => 'public','credits' => 500));
$req2 -> closeCursor();
$_SESSION['id'] = $donnees['id'];
$_SESSION['pseudo'] = $donnees['pseudo'];
header('location: ../home');
$req1 ->closeCursor();
}
$req -> closeCursor();
}
} else {
echo '<span class="error">Veuillez entrer une adresse électronique valide</span>';
}
} else {
echo '<span class="error">Veuillez remplir tous les champs</span>';
}
}
?>
- Fonction de récupération d'infos sur le membre connecté :
<?php
// Récupération d'infos du membre connecté
function infoMember($id, $info){
$id = $_SESSION['id'];
$req = Bdd::connect() -> prepare('SELECT * FROM users u INNER JOIN users_infos ui ON u.id = ui.userid WHERE u.id = :id');
$req -> execute(array('id' => $id));
$donnees = $req -> fetch();
return $donnees[$info];
$req -> closeCursor();
}
?>
Ça fait beaucoup de fonctions à regarder Merci beaucoup pour votre aide