CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[HELP] Un dev php pour m'aider ?

PierreMenes
PierreMenes
Niveau 9
08 juin 2021 à 16:50:16

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 :

https://image.noelshack.com/fichiers/2021/23/2/1623163064-verif-email.png

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 :hap:

Merci d'avance :hap:

Gifled
Gifled
Niveau 5
08 juin 2021 à 16:51:30

Dégueulasse ton code y'a beaucoup de choses à revoir + jolie faille

ElLocoDelBario
ElLocoDelBario
Niveau 5
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

Cochon-virtuel
Cochon-virtuel
Niveau 7
08 juin 2021 à 16:52:48

Bien la faille SQL ?

PierreMenes
PierreMenes
Niveau 9
08 juin 2021 à 17:01:42

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 ?

aty007
aty007
Niveau 10
08 juin 2021 à 17:02:39

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.

aty007
aty007
Niveau 10
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)

PierreMenes
PierreMenes
Niveau 9
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 :ok:

Et j'ai solutionné mon pb avec la contrainte UNIQUE, merci à vous les kheys :cimer:

aty007
aty007
Niveau 10
08 juin 2021 à 17:16:27

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 :ok:

Et j'ai solutionné mon pb avec la contrainte UNIQUE, merci à vous les kheys :cimer:

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. :)

Message édité le 08 juin 2021 à 17:16:51 par aty007
Sous forums
  • Religion