par moogli » 03 oct. 2014, 20:05
<?php // récupère la liste des articles function getListArticle() { $sql = 'SELECT colo,nne FROM article'; // etc avec PDO tu peux faire un fetchAll pour aller plus vite, ilte retourne un tableau //closecursor() return $datas; // datas c'est un tableau qui contient toutes les lignes retournées par la requête. } // affiche unes liste d'article function afficheListeArticle($liste) { if (empty($liste) || !is_array($liste)) { // bon ben la boulette c'est pas exploitable on affiche un message genre pas d'article echo 'Désolé il n\'y a pas encode d\'article disponible'; } else { foreach ($liste as $article) { echo 'titre : ', $article['titre'], ' - ', $article['date']; // etc } } } ?>
<?php afficheListeArticle(getListArticle()); ?>
par nico44530 » 02 oct. 2014, 23:37
par moogli » 02 oct. 2014, 22:43
Tu veux dire que je peux faire ça dans la page du formulaire : login($email, $mdp); ?
<?php function login($email,$mdp){ if(!empty($email) && !empty($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>'; } }
<?php class Bdd { private static $connection; public static function connect() { if (is_null(self::$connection)) { try { self::$connection = new PDO(DNS, USER, PASS, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8')); self::$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); } catch (Exception $e) { die('Échec lors de la connexion : ' . $e->getMessage()); } } return self::$connection; } }
par nico44530 » 02 oct. 2014, 12:59
par sirakawa » 02 oct. 2014, 09:02
Ensuite, c'est vrai que j'utilise des fonctions pour presque tout
par nico44530 » 02 oct. 2014, 03:19
Exemple ta fonction login prend deux paramètres que tu écrase directement avec $_POST['email'] et $_POST['mdp'] tu vire ça et utilise la fonction directement ainsi login($_POST['email'], $_POST['mdp']); le principe est le même pour session.
class Bdd { public static function connect() { try { $connection = new PDO(DNS, USER, PASS, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8')); $connection -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); } catch (Exception $e) { die('Échec lors de la connexion : ' . $e->getMessage()); } return $connection; } }
Pour ce qui est de requête préparée pourquoi pas (certain langage ne propose pas d'alternative). Ceci dit sachant qu'elle est mise en cache que sur la connexion que par défaut elle est émulée et que tu utilise le passage de paramètre d’exécuté il n'y pas de réel intérêt hors mis celui de ne pas gérer la "protection" de données où tu va te faire couillonner (désolé) quand tu va vouloir utiliser ce type de requête pour un paramètre dans une limite (ou similaire) et la chose va coller une chaîne de caractères à la place d'un entier (he oui vu que php n'est pas typé mais sql oui, mais s'il y a pas mal d'auto boxing tous ce qui est est chaine de caractère et traité comme tel). pour info en sql insérer une chaine de caractère dans un entier fonction ne pour peux la chaine contienne un entier la conversion étant réalisée, par contre cela en fonctionnera pas lorsqu'un entier est demandé (dans mon exemple select * from latable where machin='bidulle' limit :start,10 sera remplacé en select * from latable where machin='bidulle' limit '0',10 par exemple et la vautrage assuré).
Au final comme le Nestecha, c'est surtout pinaille & co surtout si tu ne compte pas en faire ton métier
par moogli » 01 oct. 2014, 23:40
par nico44530 » 01 oct. 2014, 11:05
if(!preg_match("/^[a-z]+$/", $nom)){ echo '<span class="error">Les caractères spéciaux ne sont pas autorisés</span>'; } elseif(!preg_match("/^[a-z]+$/", $prenom)){ echo '<span class="error">Les caractères spéciaux ne sont pas autorisés</span>'; } elseif(!preg_match("/^[a-z]+$/", $pseudo)){ echo '<span class="error">Les caractères spéciaux ne sont pas autorisés</span>'; } else { // Ma requête }
par xTG » 30 sept. 2014, 20:39
Pour le htmlspecialchars, si je mets pas cette fonction aux variables d'un enregistrement dans une base, des personnes pourrons stockés du code html dans ma base ?
par nico44530 » 30 sept. 2014, 20:00
par sirakawa » 30 sept. 2014, 14:17
par nico44530 » 30 sept. 2014, 13:29
//ce genre de concaténation me laisse perplexe $avatar = $_SERVER['DOCUMENT_ROOT'].'/users/upload/avatars/'.$donnees['id'].'-mini.jpg'; //mal placé puisque ne servant que dans un cas $defaut = $donnees['sexe'] == 'homme' ? 'homme.jpg' : 'femme.jpg';
par nico44530 » 30 sept. 2014, 13:26
par sirakawa » 30 sept. 2014, 13:00
par nico44530 » 30 sept. 2014, 12:57