Newsletter php débutant - PHP - Programmation
Marsh Posté le 09-08-2008 à 00:35:52
ceci n'est pas une sélection de table mais bien de base de donnée :
Code :
|
je me demande si ton problème ne viendrait pas de là :
Code :
|
je te conseil aussi de faire un test pour voir si ce qui est entré est bien une adresse email et non tout autre chose.
Marsh Posté le 09-08-2008 à 10:31:08
1- Tu dois faire appel à post, car ton formulaire est envoyé en post, donc $_POST['email'] et non $email.
2 - Si le champ id est une clé primaire, tu as plutôt intérêt à mettre :
Code : |
Marsh Posté le 09-08-2008 à 22:36:37
ReplyMarsh Posté le 10-08-2008 à 18:22:32
Note : ton code a une faille de sécurité (Injection SQL)
Echappes tes données avec mysql_real_escape_string
Marsh Posté le 10-08-2008 à 18:57:25
CyberDenix a écrit : 1- Tu dois faire appel à post, car ton formulaire est envoyé en post, donc $_POST['email'] et non $email.
|
Quand tu balances un code pareil à un débutant, tu pourrais au moins l'avertir qu'il est merdique en l'état
Marsh Posté le 12-08-2008 à 16:15:16
ReplyMarsh Posté le 12-08-2008 à 16:38:29
Sephirius2 a écrit : YeLL a part pr la sécurité pe en quoi ce code est merdique? |
cf. post de luc@s. Le code optimal est :
Code : |
Marsh Posté le 12-08-2008 à 16:47:35
Sephirius2 a écrit : YeLL a part pr la sécurité pe en quoi ce code est merdique? |
C'est pas suffisant ?
Marsh Posté le 12-08-2008 à 17:04:27
c'était une simple correction de son code crade et faillé .
EDIT : La méthode bind_params gère l'échappement des données toute seule ?
Marsh Posté le 12-08-2008 à 17:06:17
aïe, aïe, aïe, aïe, aïe, aïe, aïe, aïe, aïe, aïe, aïe, aïe, aïe, aïe, aïe, aïe, aïe, aïe, aïe, aïe, aïe, aïe, aïe, aïe, aïe, aïe, aïe, aïe, aïe, aïe, aïe, aïe, aïe, aïe, aïe, aïe, aïe, aïe, aïe, aïe, aïe, aïe
J'ai jeté un coup d'oeil à la doc de mysqli (que je n'avais jamais regardé avant). Ne faut-il pas utiliser $db->real_escape_string($$_POST['email']) en plus du code utilisé ?
Marsh Posté le 12-08-2008 à 17:23:48
Oui
babasss a écrit : |
Non
Marsh Posté le 12-08-2008 à 17:36:36
C'est moi ou la doc est pas super clair à ce sujet (j'arrive pas à trouver où cela est marqué) ?
Marsh Posté le 12-08-2008 à 17:39:28
Citation : There are numerous advantages to using prepared statements in your applications, both for security and performance reasons. Prepared statements can help increase security by separating SQL logic from the data being supplied. This separation of logic and data can help prevent a very common type of vulnerability called an SQL injection attack. Normally when you are dealing with an ad hoc query, you need to be very careful when handling the data that you received from the user. This entails using functions that escape all of the necessary trouble characters, such as the single quote, double quote, and backslash characters. This is unnecessary when dealing with prepared statements. The separation of the data allows MySQL to automatically take into account these characters and they do not need to be escaped using any special function. |
Source: MySQL.com
Marsh Posté le 12-08-2008 à 17:42:50
Dj YeLL a écrit :
|
Exact, en fait je cherchais au niveau de bind_params et pas au niveau de prepare.... SOrry
Marsh Posté le 12-08-2008 à 22:42:11
Et bien comme vous connaissez bcp mieux la section sécurité dans php vous pourrez certainement m'aider à améliorer la sécurité de mon petit script que voila:
Code :
|
Comme vous le remarquerez j'appel 3 variables désormais...
Pour le moment la newsletter (partie enregistrement fonctionne très bien) Mais j'aimerais vraiment sécuriser le script avt de m'attaquer à la partie suppression de l'email qui va être un autre challenge pr moi mdr (quoi je vous l'ai pas dit je débute vraiment...)
Merci pour vos précédent post mais je ne sais / comprend pas comment utiliser la ligne "mysql_real_escape_string" hors de mon petit script...copier coller les corrections j'aime bien mais je préfère comprendre pr ne pas trop abuser...
Alors est ce que je doit utiliser la ligne "mysql_real_escape_string" devant chaque variable ou il existe une solution pr appliquer ce paramètre au 3 variables sans devoir recopier 3 fois la ligne je suis pas fainéant mais php si il parait...
Je n'ai absolument rien compris au script de NazzTazz
Citation :
|
Si vous pouvez me guidez vers un tuto ou des infos pr comprendre ce script je suis intéressé aussi... je suis tjs à l'utilisation de base des bases de données... et les cours du Site du Zero me semble clair mais peu fouillé par rapport à d'autre site qui le sont trop (pr moi du moins...)
Marsh Posté le 12-08-2008 à 23:14:30
Sephirius2 a écrit : Et bien comme vous connaissez bcp mieux la section sécurité dans php vous pourrez certainement m'aider à améliorer la sécurité de mon petit script que voila:
|
j'en étais sur...
Bon le code de NazzTazz utilise l'extension mysqli et simplifie largement ton code.
Etudions le ligne par ligne :
La ligne 1 :
Code :
|
(Ce n'est pas exactement le même code que celui de NazzTazz car je l'ai adapté à tes indentifiants.
Cette ligne connecte l'utilisateur root au serveur localhost de mysql sans mot de passe puis sélectionne la base 'cdh'. Cette ligne correspond à çà dans ton code :
Code :
|
La ligne 2 :
Code :
|
Cette ligne place en mémoire la requête SQL (j'ai encore adapté, c'est la même que la tienne désormais). Les points d'interrogation signifient que les valeurs seront attribuées plus tard. (en gros )
La ligne 3 :
Code :
|
Cette ligne attribue dans l'ordre une valeur à chaque point d'interrogation : le premier aura la valeur de $_POST['nom'], le second celle de $_POST['email'] et le dernier celle de $_POST['localisation']. (en très gros )
le premier paramètre est la suite des initiales des types (string, int, float donc s, i, f etc...) de chacune des variables passées dans les paramètres suivant.
Tu n'as pas besoin d'utiliser mysql_real_escape_string de cette manière.
La ligne 4 :
Code :
|
Cette ligne exécute ta requête.
Même si, avec cette méthode, tu n'en as pas besoin, mysql_real_escape_string() fonctionne ainsi :
Code : |
Marsh Posté le 13-08-2008 à 10:12:39
Pour info, le bind_param n'affecte pas les valeurs, mais lie (du verbe lier hein ) les paramètres.
Code :
|
Marsh Posté le 13-08-2008 à 10:26:04
Merci lucas je comprend un peu mieux la raison de ce code...
Je vais essayer de modifier ca en conséquence et tester pr voir si ca marche... je reviendrai surement poser qlq question par la suite!
Merci a toi aussi Yell bien que ton dernier script me laisse raide d'incompréhension lol
Marsh Posté le 13-08-2008 à 10:29:14
Sephirius2 a écrit : Merci lucas je comprend un peu mieux la raison de ce code... |
Ah bon Y'a quoi de pas clair ?
Marsh Posté le 13-08-2008 à 10:54:22
Je recherche un tutoriel pouvant me guider dans la réalisation d'un script qui prendrais l'email enregistré dans ma base de donnée afin de pvr l'utiliser pr envoyer un email.
Je n'ai pas encore trouvé le moyen de récupérer des données d'un ligne...
Marsh Posté le 13-08-2008 à 10:55:30
Yell:
Je ne comprend pas comment fonctionne Bind_param ni sont utilité... bien que ce script fonctionne
en particulier la raison du 's' en parametre...
Marsh Posté le 13-08-2008 à 11:52:24
Les lettres représentes le type de chaque variables envoyées :
Code :
|
Marsh Posté le 13-08-2008 à 12:43:19
je dit chapeau pr la rapidité,... mtnt je sais comment utiliser Bind_param mais j'dois encore vous demander pourquoi l'utiliser et dans quel circonstance l'utiliser est préférable?
Si vous en avez assez de me répondre dite le... je suis assez avide d'information surtout depuis que je découvre l'utilité de php et des bases de données...
Marsh Posté le 13-08-2008 à 14:14:29
Tout de suite ca s'éclaire lol... mon anglais est vraiment trop rouillé pr déchiffrer la version original.
Voila plus de question... pr le moment...
Marsh Posté le 13-08-2008 à 20:42:08
Dj YeLL a écrit : Pour info, le bind_param n'affecte pas les valeurs, mais lie (du verbe lier hein ) les paramètres.
|
t'es chiant toi
Excuse moi de cette "incorrection" mais j'ai fait simple.
Marsh Posté le 13-08-2008 à 20:45:03
ReplyMarsh Posté le 13-08-2008 à 21:04:22
Dj YeLL a écrit : |
Citation : Pour info, le bind_param n'affecte pas les valeurs, mais lie (du verbe lier hein ) les paramètres. |
Marsh Posté le 13-08-2008 à 21:28:31
Nan mais je suis pas stupide non plus, j'ai bien vu que tu avais mis ce passage en gras Mais je vois pas du tout ce dont tu veux parler ... Pourquoi suis-je "chiant" ? De quelle "incorrection" tu parles ?
Et pourquoi un Capello ?
Marsh Posté le 13-08-2008 à 21:35:01
Dj YeLL a écrit : |
Par ce que j'ai dit "affecter" au lieu de "lier"
Marsh Posté le 08-08-2008 à 19:06:25
Voila, je débute en php et j'ai décidé de commencer par créer une newsletter. Le truc le plus simple possible pour commencer.
Je réalise rapidement un code html dans lequel j'insère du php voila ce code:
Comme le code le montre j'appelle une page en php externe que voici:
Mon problème est le suivant, a chaque fois que j'entre une adresse que je valide, j'ai un ligne qui se crée dans ma base de donnée mais l'adresse n'apparait pas dedans... ma question pourquoi et comment puis-je modifier mon script pour arriver à ce que l'adresse email soit inscrite dans la base de donnée...
Merci