[HELP] Un dev php pour m'aider ?
- 1
Salut les kheys, j'explique mon pb :
Je développe un plugin de newsletter qui est opérationnel mais il me manque une dernière chose :
Lorsque la personne rentre son email et qu'elle clique sur le bouton s'inscrire, c'est envoyé dans une table de base de données que j'ai crée et j'aimerai que lorsque l'email existe déjà ça ne me l'envoie pas en bdd, ce qui n'est pas le cas actuellement
Merci d'avance
- Rajouter une contrainte "UNIQUE" sur ton champ email de ta table newsletter
- Tu fais un SELECT * FROM newsletter WHERE email = $email, et si tu as un retour tu sais que ton gars est déjà inscrit à la newsletter
Le 08 juin 2021 à 16:51:46 :
Deux solutions :
- Rajouter une contrainte "UNIQUE" sur ton champ email de ta table newsletter
- Tu fais un SELECT * FROM newsletter WHERE email = $email, et si tu as un retour tu sais que ton gars est déjà inscrit à la newsletter
Merci beaucoup je vais regarder ça !
Pour les autres je suis débutant, c'est quoi et comment l'enlever cette faille ?
Le 08 juin 2021 à 16:51:46 :
Deux solutions :
- Rajouter une contrainte "UNIQUE" sur ton champ email de ta table newsletter
- Tu fais un SELECT * FROM newsletter WHERE email = $email, et si tu as un retour tu sais que ton gars est déjà inscrit à la newsletter
Sinon y'a INSERT IGNORE maTable VALUES(...) qui ne fait pas l'insertion si ça viole la contrainte UNIQUE.
Les bases du SQL à connaitre.
2) Le '"new mysqli" me semble assez obsolète, il faut utiliser l'objet PDO (voir tutos)
3) Ne JAMAIS insérer des données rentrées par des utilisateurs sans les vérifier au préalable (sinon tu ouvres la boite de Pandore => failles SQL)
Le 08 juin 2021 à 17:04:33 :
1) Les identifiants/mdp de BDD c'est dans un fichier de config (parce que quand tu passeras de localhost a un vrai serveur, faudra remodifier tous les fichiers où tu te connectes.
2) Le '"new mysqli" me semble assez obsolète, il faut utiliser l'objet PDO (voir tutos)
3) Ne JAMAIS insérer des données rentrées par des utilisateurs sans les vérifier au préalable (sinon tu ouvres la boite de Pandore => failles SQL)
D'accord merci je vais me pencher là-dessus
Et j'ai solutionné mon pb avec la contrainte UNIQUE, merci à vous les kheys
Le 08 juin 2021 à 17:11:38 :
Le 08 juin 2021 à 17:04:33 :
1) Les identifiants/mdp de BDD c'est dans un fichier de config (parce que quand tu passeras de localhost a un vrai serveur, faudra remodifier tous les fichiers où tu te connectes.
2) Le '"new mysqli" me semble assez obsolète, il faut utiliser l'objet PDO (voir tutos)
3) Ne JAMAIS insérer des données rentrées par des utilisateurs sans les vérifier au préalable (sinon tu ouvres la boite de Pandore => failles SQL)D'accord merci je vais me pencher là-dessus
Et j'ai solutionné mon pb avec la contrainte UNIQUE, merci à vous les kheys
Vraiment la base le point 3, il faut dès le début apprendre à coder comme ça, sinon on prend des mauvaises habitudes.
Un exemple très simple et vicieux du problème => un système de connexion
Tu as en code
SELECT * FROM comptes WHERE identifiant = '".$_POST['identifiant']."' AND password = '".$_POST['password']."'
(Requete pour vérifier si on rentre le bon mot de passe)
Je mets dans le champ identifiant : n'importe quoi
Je mets dans le champ password : ' OR 1 = 1
La requete devient donc SELECT * FROM comptes WHERE identifiant = 'toto' AND password = '' OR 1 = 1
Comme 1=1 est forcément vrai, la requête SQL est vraie sur toutes les lignes de la table. Par défaut (par de ORDER BY défini) la requête va lister tous les comptes dans l'ordre de l'id, et en général le compte id=1 est le compte admin.
Félicitation, je viens de me connecter au compte admin.
- 1
Données du topic
- Auteur
- PierreMenes
- Date de création
- 8 juin 2021 à 16:50:16
- Nb. messages archivés
- 9
- Nb. messages JVC
- 9