@BberXIII81 : ca signifie "est différent de", c'est la même chose que " != " (bien que personnellement je recommande d'avantage l'usage de ce dernier qui est compatible avec d'avantages de bases de données)
Tu peux aussi, si jamais tu souhaites exclures plusieurs id, utiliser la syntaxe IN() et le mot clé NOT :
$sql = 'SELECT ..... FROM news WHERE id NOT IN ('.$listeDidSéparésParDesVirgules.')';
@sylvaing26 : une injection, c'est lorsqu'un utilisateur malveillant parvient à détourner une de tes requêtes pour qu'elle fasse autre chose que ce que tu avais prévu.
Le mieux étant sans doute un exemple, supposons une requête d'authentification qui serait la suivante :
"SELECT id, nom, prenom FROM users WHERE login = '".$_POST['login']."'";
En toute logique, l'utilisateur spécifie son login dans un formulaire, la requête s'exécute avec le critère " WHERE login = 'toto' " et renvoi l'enregistrement correspondant s'il existe.
L'injection consisterait pour l'utilisateur à spécifier à la place de son login une chaine du genre : " ' OR '1'='1 ". Si la variable n'est pas protégée et utilisée telle quel, ton critère devient : " WHERE login = '' OR '1'='1' ". Résultat, la condition 1=1 étant toujours vrai, ta base de données retournera l'ensemble des id/nom/prenom qu'elle contient.
Grace aux injections, un utilisateur malveillant pourrait ainsi également faire des jointures sur d'autres tables, découvrir la structure de ta base, voire l'altérer...
Il convient donc de protéger les variables avant de les passer dans une requête (mysql_real_escape_string() fait ça très bien pour les chaines, mais les magic quotes ou un addslashes peuvent donner de bons résultats également). Ma requête devient donc
"SELECT id, nom, prenom FROM users WHERE login = '".mysql_real_escape_string($_POST['login'])."'";
Ce qui aura pour effet, si l'utilisateur tente une injection de retourner :
" WHERE login = '\' OR \'1\'=\'1' ", la requête ne retourne ainsi aucun résultat
