Besoin de conseils pour un bon codage de mes fonctions

Eléphant du PHP | 386 Messages

13 mars 2014, 04:48

Bonjour,

J'ai une liste de fonctions que j'ai moi-même créé.
Elles fonctionnent, mais j'aimerais savoir si elles sont bien écrites (erreurs de sécurité, faille, mauvais codage etc...)

Merci beaucoup d'avance
<?php
include($_SERVER['DOCUMENT_ROOT'].'/include/define.inc.php');
include('smiley.func.php');

// Connexion à la base de données
function connect(){
		try{
			$connexion = new PDO(DNS, USER, PASS, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
			$connexion -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
		} catch (Exception $e){
			echo 'Échec lors de la connexion : ' . $e->getMessage();
		}
		return $connexion;
}

// Vérifications des sessions
function verif($pseudo, $persistent){
	if(isset($pseudo) || isset($persistent)){
		header('location: home');
		exit();
	}
}
function verifHome($pseudo, $persistent){
	if(!isset($pseudo) && !isset($persistent)){
		header('location: ../login.php?login_error=1');
		exit();
	}
}

// Cryptage
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;
}

// Majuscules et accents majuscules
function majuscule($mot){ 
	$mot = utf8_decode($mot);
	$mot = trim($mot);
	$maj = $mot[0];
	$maj = strtr($maj, äâàáåãéèëêòóôõöøìíîïùúûüýñçþÿæðø,ÄÂÀÁÅÃÉÈËÊÒÓÔÕÖØÌÍÎÏÙÚÛÜÝÑÇÞÝÆÐØ);
	$mot = substr_replace($mot,$maj,0,1);
	$mot = utf8_encode($mot);
	$mot = ucfirst($mot);
	return $mot;
}

// Date relative
function getRelativeTime($date){
	$date_a_comparer = new DateTime($date);
	$date_actuelle = new DateTime("now");
	$intervalle = $date_a_comparer->diff($date_actuelle);
	if($date_a_comparer > $date_actuelle){ $prefixe = 'Dans '; }
	else { $prefixe = 'Il y a '; } $ans = $intervalle->format('%y');
	$mois = $intervalle->format('%m');
	$jours = $intervalle->format('%d');
	$heures = $intervalle->format('%h');
	$minutes = $intervalle->format('%i');
	$secondes = $intervalle->format('%s');
	if($ans != 0){ $relative_date = $prefixe . $ans . ' an' . (($ans > 1) ? 's' : ''); if ($mois >= 6) $relative_date .= ' et demi'; }
	elseif($mois != 0){ $relative_date = $prefixe . $mois . ' mois'; if ($jours >= 15) $relative_date .= ' et demi'; }
	elseif($jours != 0){ $relative_date = $prefixe . $jours . ' jour' . (($jours > 1) ? 's' : ''); }
	elseif($heures != 0){ $relative_date = $prefixe . $heures . ' heure' . (($heures > 1) ? 's' : ''); }
	elseif($minutes != 0){ $relative_date = $prefixe . $minutes . ' minute' . (($minutes > 1) ? 's' : ''); }
	else { $relative_date = $prefixe . ' quelques secondes'; } return $relative_date;
}

// Connexion
function loginCreate(){
	$email = htmlspecialchars($_POST['email']);
	$mdp = htmlspecialchars(sha1($_POST['mdp']));
	if(preg_match("!^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$!",$email)){
		if(!empty($_POST['email']) && !empty($_POST['mdp'])){
			$resultat = connect() -> prepare(SELECT.ALL.USERS.LOGIN);
			$resultat -> execute(array('email' => $email,'mdp' => $mdp));
			$donnee = $resultat -> fetch(PDO::FETCH_ASSOC);
			if($resultat -> rowCount() === 1){
				$_SESSION['id'] = $donnee['id'];
				$_SESSION['pseudo'] = $donnee['pseudo'];
				header('location: home');
				$resultat -> closeCursor();
			} else {
				echo '<span class="error">Vos identifiants sont incorrects</span>';
			}
		} else {
			echo '<span class="error">Veuillez remplir tous les champs</span>';
		}
	} else {
		echo '<span class="error">Veuillez entrer une adresse électronique valide</span>';
	}
}
function recover($recoverEmail){
	$email = htmlspecialchars($_POST['recoverEmail']);
	if(preg_match("!^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$!",$email)){
		if(!empty($_POST['recoverEmail'])){
			$verifMail = connect() -> prepare(SELECT.ALL.USERS.EMAIL);
			$verifMail -> execute(array('email' => $email));
			if($verifMail -> rowCount() === 1){
				$donnee = $verifMail -> fetch(PDO::FETCH_ASSOC);
				$newPass = chaine(8);
				$cryptPass = htmlspecialchars(sha1($newPass));
				$enregistrePass = connect()->prepare(UPDATE.USERSZ.MAJPASS.EMAIL);
				$enregistrePass -> execute(array('newPass' => $cryptPass,'email' => $email));
				if(preg_match('#@(hotmail|live|msn).[a-z]{2,4}$#', $email)){
					$passage_ligne = "\n";
				} else {
					$passage_ligne = "\r\n";
				}
				$headers  = 'From: Web Astronomie <node12.cluster1.easy-hebergement.net>'.$passage_ligne;
				$headers .= 'Reply-to: Web Astronomie <node12.cluster1.easy-hebergement.net>'.$passage_ligne;
				$headers .= 'MIME-Version: 1.0'.$passage_ligne;
				$headers .= 'Content-Type: multipart/alternative;'.$passage_ligne;
				$sujet    = 'Mot de passe perdu';
				$message .= 'Content-Type: text/html; charset="ISO-8859-1"'.$passage_ligne;
				$message .= 'Content-Transfer-Encoding: 8bit'.$passage_ligne;
				$message  = 'Bonjour '.$donnee['prenom'].' '.$donnee['nom'].''.$passage_ligne;
				$message .= 'Voici votre nouveau mot de passe : '.$newPass.''.$passage_ligne;
				$message .= 'Cordialement,'.$passage_ligne;
				$message .= NAMESITE.''.$passage_ligne;
				if(mail($email, $sujet, $message, $headers)){
					echo '<span class="success">Un nouveau mot de passe viens de vous être envoyé</span>';
				} else {
					echo '<span class="error">Erreur lors de l\'envoie de votre mot de passe</span>';
				}
			} else {
				echo '<span class="error">Aucun compte n\'est associé à cette email :<br />'.$email.'</span>';
			}
		} else {
			echo '<span class="error">Veuillez remplir au moins un champ</span>';
		}
	} else {
		echo '<span class="error">Veuillez entrer une adresse électronique valide</span>';
	}
}

// Membre
function info($id, $info){
	$resultat = connect() -> prepare(SELECT.ALL.USERS.ID);
	$resultat -> execute(array('id' => $id));
	$infoMembre = $resultat -> fetch(PDO::FETCH_ASSOC);
	return $infoMembre[$info];
}

// Statut
function displayStatut(){
	$resultat = connect() -> prepare(SELECT.ALL.USERS_STATUT.' LEFT JOIN users ON users_statut.user_id = users.id ORDER BY statut_id DESC');
	$resultat -> execute();
	if($resultat -> rowCount() >= 1){ ?>
<div id="newsFeed" data-referrer="newsFeed">
	<div id="topList" class="listPoint"></div>
	<ol class="clearfix">
		<?php
	while($statut = $resultat -> fetch(PDO::FETCH_ASSOC)){
		$avatar50 = $_SERVER['DOCUMENT_ROOT'].'/users/upload/avatars/'.$statut['id'].'-mini.jpg';
		$avatarDefault = $statut['sexe'] == 'homme' ? 'users/upload/avatars/homme.jpg' : 'users/upload/avatars/femme.jpg'; ?> 
		<li class="clearfix">
			<div class="statutAvatar arrow">
				<a href="<?php echo $statut['pseudo']; ?>"><?php if(file_exists($avatar50)){ ?>
					<img src="users/upload/avatars/<?php echo $statut['id']; ?>-mini.jpg" height="50" width="50" alt="" /><?php } else { ?><img src="<?php echo $avatarDefault; ?>" height="50" width="50" alt="" /><?php } ?> 
				</a>
			</div>
			<div class="statutContent">
				<div class="statutName"><a href="<?php echo $statut['pseudo']; ?>"><?php echo majuscule($statut['prenom']); ?> <?php echo majuscule($statut['nom']); ?></a></div>
				<div class="statutText"><?php echo nl2br(smiley($statut['statut_text'])); ?></div>
				<div class="statutDate"><?php echo getRelativeTime($statut['statut_date']); ?></div>
				<div class="statutOpt">
					<a href="#" class="linkOpt"><i class="img_like"></i><span>J'aime</span></a>
					<a href="#" class="linkOpt"><i class="img_comment"></i><span>Commenter</span></a>
				</div>
			</div>
		</li><?php } ?> 
	</ol>
	<div id="botList" class="listPoint"></div>
</div><?php } else {}
}
function newsPost($info){
	$resultat = connect() -> prepare(SELECT.ALL.USERS_STATUT.' LEFT JOIN users ON users_statut.user_id = users.id ORDER BY statut_id DESC');
	$resultat -> execute();
	$infoPost = $resultat -> fetch(PDO::FETCH_ASSOC);
	return $infoPost[$info];
}
function sendStatut($user_id,$statut_text,$statut_acces,$statut_photo,$statut_etat){
	$statut_text = trim(html_entity_decode($_POST['statut_text']));
	if(isset($statut_text) && !empty($statut_text)){
		if(($statut_acces == 'amis') || ($statut_acces == 'moi') || ($statut_acces == 'public')){
		$resultat = connect() -> prepare(INSERT.USERSZ_STATUT.STATUTINSERT);
		$resultat -> execute(array('user_id' => $user_id,'statut_text' => trim(html_entity_decode($statut_text)),'statut_acces' => $statut_acces,'statut_photo' => $statut_photo,'statut_etat' => $statut_etat)); ?> 
<div id="newsFeed" data-referrer="newsFeed">
	<div id="topList" class="listPoint"></div>
	<ol class="clearfix"><?php
		$avatar50 = $_SERVER['DOCUMENT_ROOT'].'/users/upload/avatars/'.newsPost('id').'-mini.jpg';
		$avatarDefault = newsPost('sexe') == 'homme' ? 'users/upload/avatars/homme.jpg' : 'users/upload/avatars/femme.jpg'; ?> 
		<li class="clearfix">
			<div class="statutAvatar arrow">
				<a href="<?php echo newsPost('pseudo'); ?>"><?php if(file_exists($avatar50)){ ?>
					<img src="users/upload/avatars/<?php echo newsPost('id'); ?>-mini.jpg" height="50" width="50" alt="" /><?php } else { ?><img src="<?php echo $avatarDefault; ?>" height="50" width="50" alt="" /><?php } ?> 
				</a>
			</div>
			<div class="statutContent">
				<div class="statutName"><a href="<?php echo newsPost('pseudo'); ?>"><?php echo majuscule(newsPost('prenom')); ?> <?php echo majuscule(newsPost('nom')); ?></a></div>
				<div class="statutText"><?php echo nl2br(smiley(newsPost('statut_text'))); ?></div>
				<div class="statutDate"><?php echo getRelativeTime(newsPost('statut_date')); ?></div>
				<div class="statutOpt">
					<a href="#" class="linkOpt"><i class="img_like"></i><span>J'aime</span></a>
					<a href="#" class="linkOpt"><i class="img_comment"></i><span>Commenter</span></a>
				</div>
			</div>
		</li>
	</ol>
	<div id="botList" class="listPoint"></div>
</div><?php } else { return false; }
	} else {
		return false;
	}
}
?>