Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1656 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Newsletter php débutant

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Newsletter php débutant

n°1771366
Sephirius2
Posté le 08-08-2008 à 19:06:25  profilanswer
 

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:

Code :
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
  3.    <head>
  4.        <title>Belgium</title>
  5.        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  6.    <link rel="icon" type="image/png" href="/images/favicon.png" />
  7.    <link rel="stylesheet" media="screen" type="text/css" title="Theme1" href="theme_1.css" />
  8.    <link rel="alternate stylesheet" media="screen" type="text/css" title="Theme2" href="theme_2.css" />
  9.    </head>
  10.    <body>
  11.    <div class=inscription>
  12.  <p>Pour vous inscrire à notre news letter et être informé des actions du site remplissé le champ ci-dessous.</p>
  13.  <form method="post" action="newsletter/traitement.php">
  14.  <p><label for="email">Votre e-mail</label> : <input type="text" name="email" id="email"/></p>
  15.  <p><input type="submit"/> <input type="reset" /></p>
  16.  </form>
  17. </div>
  18.   </body>
  19. </html>


 
Comme le code le montre j'appelle une page en php externe que voici:
 

Code :
  1. <?php
  2. mysql_connect("localhost", "root", "" ); //connection à la base de donnée
  3. mysql_select_db("emailnewsletter" ); //selection de la table
  4. //insertion de l'adresse email dans la table
  5. mysql_query("INSERT INTO Email VALUES ('', '$email')" );
  6. mysql_close();
  7. ?>


 
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

mood
Publicité
Posté le 08-08-2008 à 19:06:25  profilanswer
 

n°1771417
Gavrinis
Open your mind
Posté le 09-08-2008 à 00:35:52  profilanswer
 

ceci n'est pas une sélection de table mais bien de base de donnée :

Code :
  1. mysql_select_db("emailnewsletter" );


je me demande si ton problème ne viendrait pas de là :

Code :
  1. mysql_query("INSERT INTO Email (id, email) VALUES ('', '$email')" );


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.

n°1771467
CyberDenix
Posté le 09-08-2008 à 10:31:08  profilanswer
 

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 :
  1. mysql_query("INSERT INTO Email (email) VALUES ('".$_POST['email']."')" );

Message cité 2 fois
Message édité par CyberDenix le 09-08-2008 à 10:33:59

---------------
Directeur Technique (CTO)
n°1771496
Gavrinis
Open your mind
Posté le 09-08-2008 à 13:51:15  profilanswer
 

ah oui, je n'avais pas vu ce détails :ange:

n°1771621
Sephirius2
Posté le 09-08-2008 à 22:36:37  profilanswer
 

Merci CyberDenix ta solution est fonctionnelle

n°1771724
Profil sup​primé
Posté le 10-08-2008 à 18:22:32  answer
 

Note : ton code a une faille de sécurité (Injection SQL)
Echappes tes données avec mysql_real_escape_string

Message cité 1 fois
Message édité par Profil supprimé le 10-08-2008 à 18:59:06
n°1771731
Dj YeLL
$question = $to_be || !$to_be;
Posté le 10-08-2008 à 18:57:25  profilanswer
 

CyberDenix a écrit :

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 :
  1. mysql_query("INSERT INTO Email (email) VALUES ('".$_POST['email']."')" );



 
Quand tu balances un code pareil à un débutant, tu pourrais au moins l'avertir qu'il est merdique en l'état :/


---------------
Gamertag: CoteBlack YeLL
n°1772569
Sephirius2
Posté le 12-08-2008 à 16:15:16  profilanswer
 

YeLL a part pr la sécurité pe en quoi ce code est merdique?

n°1772577
babasss
Posté le 12-08-2008 à 16:38:29  profilanswer
 

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 :
  1. mysql_query("INSERT INTO Email (email) VALUES ('".mysql_real_escape_string($_POST['email'])."')" );

Message cité 1 fois
Message édité par babasss le 12-08-2008 à 16:38:53

---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
n°1772580
Dj YeLL
$question = $to_be || !$to_be;
Posté le 12-08-2008 à 16:47:35  profilanswer
 

Sephirius2 a écrit :

YeLL a part pr la sécurité pe en quoi ce code est merdique?


 
[:dawa] C'est pas suffisant ? :??:


---------------
Gamertag: CoteBlack YeLL
mood
Publicité
Posté le 12-08-2008 à 16:47:35  profilanswer
 

n°1772588
Profil sup​primé
Posté le 12-08-2008 à 17:04:27  answer
 


 
c'était une simple correction de son code crade et faillé  [:thalis].
 
EDIT : La méthode bind_params gère l'échappement des données toute seule ?  :o

Message cité 1 fois
Message édité par Profil supprimé le 12-08-2008 à 17:11:37
n°1772589
babasss
Posté le 12-08-2008 à 17:06:17  profilanswer
 


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é ?

 

Message cité 1 fois
Message édité par babasss le 12-08-2008 à 17:06:57

---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
n°1772606
Dj YeLL
$question = $to_be || !$to_be;
Posté le 12-08-2008 à 17:23:48  profilanswer
 


 
Oui
 

babasss a écrit :


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é ?
 


 
Non


---------------
Gamertag: CoteBlack YeLL
n°1772612
babasss
Posté le 12-08-2008 à 17:36:36  profilanswer
 

C'est moi ou la doc est pas super clair à ce sujet (j'arrive pas à trouver où cela est marqué) ?


---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
n°1772613
Dj YeLL
$question = $to_be || !$to_be;
Posté le 12-08-2008 à 17:39:28  profilanswer
 

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

Message cité 2 fois
Message édité par Dj YeLL le 12-08-2008 à 17:40:14

---------------
Gamertag: CoteBlack YeLL
n°1772618
babasss
Posté le 12-08-2008 à 17:42:50  profilanswer
 

Dj YeLL a écrit :

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


Exact, en fait je cherchais au niveau de bind_params et pas au niveau de prepare.... SOrry


---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
n°1772694
Sephirius2
Posté le 12-08-2008 à 22:42:11  profilanswer
 

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 :
  1. <?php
  2. mysql_connect("localhost", "root", "" ); //connection à la base de donnée
  3. mysql_select_db("cdh" ); //selection de la table
  4. //insertion des données dans la table
  5. mysql_query("INSERT INTO news_email (nom, email, localisation) VALUES ('".$_POST['nom']."','".$_POST['email']."','".$_POST['localisation']."')" );
  6. mysql_close();
  7. ?>


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 :

Code :
  1. <?php
  2.           $db = new Mysqli('host', 'user', 'password', 'base');
  3.           $query = $db->prepare('INSERT INTO Email(email) VALUES (?)');
  4.           $query->bind_param('s', $_POST['email']);
  5.           $query->execute();
  6.       ?>



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

Message cité 1 fois
Message édité par Sephirius2 le 12-08-2008 à 22:51:29
n°1772706
Profil sup​primé
Posté le 12-08-2008 à 23:14:30  answer
 

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:

Code :
  1. <?php
  2. mysql_connect("localhost", "root", "" ); //connection à la base de donnée
  3. mysql_select_db("cdh" ); //selection de la table
  4. //insertion des données dans la table
  5. mysql_query("INSERT INTO news_email (nom, email, localisation) VALUES ('".$_POST['nom']."','".$_POST['email']."','".$_POST['localisation']."')" );
  6. mysql_close();
  7. ?>


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 :

Code :
  1. <?php
  2.           $db = new Mysqli('host', 'user', 'password', 'base');
  3.           $query = $db->prepare('INSERT INTO Email(email) VALUES (?)');
  4.           $query->bind_param('s', $_POST['email']);
  5.           $query->execute();
  6.       ?>



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


 
[:blessure] 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 :
  1. <?php $db = new Mysqli('localhost', 'root', '', 'cdh'); ?>


(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 :
  1. <?php
  2. mysql_connect("localhost", "root", "" ); //connection à la base de donnée
  3. ?>


 
La ligne 2 :
 

Code :
  1. <?php $query = $db->prepare('INSERT INTO news_email(nom,email,localisation) VALUES (?,?,?)'); ?>


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  :o )
 
La ligne 3 :
 

Code :
  1. <?php $query->bind_param('sss', $_POST['nom'],$_POST['email'],$_POST['localisation']); ?>


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 :o )
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 :
  1. <?php  $query->execute(); ?>


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 :
  1. <?php $protectedName=mysql_real_escape_string($_POST['name']); ?>


 
 :jap:

Message cité 1 fois
Message édité par Profil supprimé le 13-08-2008 à 09:07:59
n°1772771
Dj YeLL
$question = $to_be || !$to_be;
Posté le 13-08-2008 à 10:12:39  profilanswer
 

Pour info, le bind_param n'affecte pas les valeurs, mais lie (du verbe lier hein :o) les paramètres.
 

Code :
  1. $query->bind_param('s', $toto);
  2.  
  3. $toto = 'Kwel';
  4. $query->execute(); // insère Kewl
  5. $toto = 'Lolilol';
  6. $query->execute(); // insère Lolilol


---------------
Gamertag: CoteBlack YeLL
n°1772777
Sephirius2
Posté le 13-08-2008 à 10:26:04  profilanswer
 

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

n°1772781
Dj YeLL
$question = $to_be || !$to_be;
Posté le 13-08-2008 à 10:29:14  profilanswer
 

Sephirius2 a écrit :

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


 
Ah bon :??: Y'a quoi de pas clair ? [:figti]


---------------
Gamertag: CoteBlack YeLL
n°1772791
Sephirius2
Posté le 13-08-2008 à 10:54:22  profilanswer
 

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

n°1772793
Sephirius2
Posté le 13-08-2008 à 10:55:30  profilanswer
 

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

Message cité 1 fois
Message édité par Sephirius2 le 13-08-2008 à 10:56:59
n°1772834
Dj YeLL
$question = $to_be || !$to_be;
Posté le 13-08-2008 à 11:52:24  profilanswer
 

Les lettres représentes le type de chaque variables envoyées :
 

Code :
  1. $query->bind_param('ssidb', $string, $string, $integer, $decimal, $blob)


---------------
Gamertag: CoteBlack YeLL
n°1772853
Sephirius2
Posté le 13-08-2008 à 12:43:19  profilanswer
 

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

n°1772876
Sephirius2
Posté le 13-08-2008 à 14:14:29  profilanswer
 

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

n°1773020
Profil sup​primé
Posté le 13-08-2008 à 20:42:08  answer
 

Dj YeLL a écrit :

Pour info, le bind_param n'affecte pas les valeurs, mais lie (du verbe lier hein :o) les paramètres.
 

Code :
  1. $query->bind_param('s', $toto);
  2.  
  3. $toto = 'Kwel';
  4. $query->execute(); // insère Kewl
  5. $toto = 'Lolilol';
  6. $query->execute(); // insère Lolilol



 
 [:aloy] t'es chiant toi  :o  
 
Excuse moi de cette "incorrection" mais j'ai fait simple.

n°1773023
Dj YeLL
$question = $to_be || !$to_be;
Posté le 13-08-2008 à 20:45:03  profilanswer
 


 
Mais de quoi il parle ? [:prozac]


---------------
Gamertag: CoteBlack YeLL
n°1773029
Profil sup​primé
Posté le 13-08-2008 à 21:04:22  answer
 

Dj YeLL a écrit :


 
Mais de quoi il parle ? [:prozac]


 

Citation :

Pour info, le bind_param n'affecte pas les valeurs, mais lie (du verbe lier hein :o) les paramètres. [:prozac]

Message cité 1 fois
Message édité par Profil supprimé le 13-08-2008 à 21:06:54
n°1773034
Dj YeLL
$question = $to_be || !$to_be;
Posté le 13-08-2008 à 21:28:31  profilanswer
 

 

Nan mais je suis pas stupide non plus, j'ai bien vu que tu avais mis ce passage en gras :o Mais je vois pas du tout ce dont tu veux parler ... Pourquoi suis-je "chiant" ? De quelle "incorrection" tu parles ? [:dawa]

 

Et pourquoi un Capello ?

Message cité 1 fois
Message édité par Dj YeLL le 13-08-2008 à 21:29:39

---------------
Gamertag: CoteBlack YeLL
n°1773036
Profil sup​primé
Posté le 13-08-2008 à 21:35:01  answer
 

Dj YeLL a écrit :


 
Nan mais je suis pas stupide non plus, j'ai bien vu que tu avais mis ce passage en gras :o Mais je vois pas du tout ce dont tu veux parler ... Pourquoi suis-je "chiant" ? De quelle "incorrection" tu parles ? [:dawa]
 
Et pourquoi un Capello ?


 
Par ce que j'ai dit "affecter" au lieu de "lier"  :)

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Newsletter php débutant

 

Sujets relatifs
Question simple de débutantMAJ aide probléme mini calculatrice en " C " (debutant)
[XSL+XPath] Traitements conditionel de noeuds (débutant)Petite question de débutant
Petite question de débutantCréer un site pour débutant .
[RESOLU] question débutant vbsDébutant need Help pour module VB Access
Petite question débutantNewsletter débutant
Plus de sujets relatifs à : Newsletter php débutant


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR