Annonce

#1 2006-06-14 17:57:12

padawa
Membre
Inscription : 2006-06-14
Messages : 5

Re : Inclure directement dans les tables mes propres données

Bonjour,  smile

Tout d'abord félicitation pour ce superbe script (moi j'appellerais meme ca "logiciel" wink )

J'ai pour un site un formulaire d'inscription déja existant.
Je voudrais donc lié mes fonctions directement sur les tables de wanewsletter.
J'ai la version 2.3, serveur linux 1&1, PHP 5.02, MySql 4.1.16 sous PHPMYADMIN 2.6.4, SMTP non, 1 mail par abonné

Je voudrais donc savoir s'il n'y a pas de contre indication et savoir si ma methode sera bonne.

Donc, la table "wa_abonnes" recupere:
- abo_pseudo -> le pseudo
- abo_pwd-> le pass, qui ne sera pas dans cette table donc vide
- abo_email -> le mail, qui bien évidement ne pourra etre vérifié avec cette méthode, mais pour ce site aucune importance.
- abo_lang -> la langue, en FR
- abo_status -> pour la confirmation. Je n'en demande pas donc a 1

Et la table "wa_abo_liste" recupere:
- liste_id -> Identifiant de la liste de diffusion, ici 2
- format -> format de la newsletter 1=txt 2=html
- send -> ca je sais pas a quoi ca sert?????? Mais aprés test a 0 ca marche... :???:
- register_key -> Je pense qu'il s'agit d'une clé d'identification unique pour les liens de désinscription. Elle est générer par la fonction generate_key()
- register_date -> date d'enregistrement avec time()
-confirmed -> idem que abo_status

Voila, donc est ce que si je rempli ces champs directement avec mes propres fonctions je n'aurais pas de probleme?
Y a t il d'autre table lié a l'utilisateur?

A vrai dire, j'ai beaucoup chercher des réponses avant de posté sans rien trouvé et ca me parait tellement simple que je pense que c'est trop beau pour etre vrai :grin2:

Merci d'avance

Hors ligne

#2 2006-06-15 14:39:53

Bobe
Administrateur
Lieu : La Rochelle
Inscription : 2002-05-27
Messages : 5 299

Re : Inclure directement dans les tables mes propres données

padawa: Ouaip, c'est du tout bon. Les seules tables dont on doit se préoccuper pour une inscription sont wa_abonnes et wa_abo_liste.

the_madhatter: non, il n'y a pas de solution simple pour l'instant. Il faut coder soi-même l'ajout d'un email à partir d'un autre formulaire.
Une solution plus simple est à l'étude.


PHP et MySQL, un duo gagnant !

Hors ligne

#3 2006-06-20 18:18:42

padawa
Membre
Inscription : 2006-06-14
Messages : 5

Re : Inclure directement dans les tables mes propres données

Ah super, (désolé de répondre maintenant j'ai pas eu la notification ??)
Bref
Merci de ta confirmation Bobe  smile
Si tu pouvais juste m'eclairer sur 2 petites choses, a savoir
Pour abo_lang quelle sont les valeur possible? Ce qui m'etonne c'est que je viens d'importer une tres grosse base et qu'aucune adresse n'a ce champ rempli.
Et pour send idem quel sont les valeurs et pourquoi alors que j'ai fais un envoi elle sont toujours a zéro?

En tout cas vraiment un trés bel outil  :love2:

Hors ligne

#4 2006-06-20 23:30:40

padawa
Membre
Inscription : 2006-06-14
Messages : 5

Re : Inclure directement dans les tables mes propres données

Bon voila c'est fait et ca marche nickel  wink

Allez comme je suis gentil voici la fonction qui me permet ca, ca devrait etre adaptable facilement a vos besoin.

    /*
     * Génère le register_key pour l'inscription à la newsletter.
         * Code de wanewsletter
    */
    function generate_key($num_char = 32, $use_uniqid = true){
        if( $use_uniqid == true ){
            srand((double) microtime() * 1000000);
            $rand_str = md5(uniqid(rand()));
        }else{
            $rand_str = md5(microtime());
        }
        return ( $num_char >= 32 ) ? $rand_str : substr($rand_str, 0, $num_char);
    }
    
    /*
     * Gestion de l'utilisateur dans wanewsletter.
    */
    function setWaUser($pseudo, $mail, $format, $action){
        // Selon l'action on manage l'utilisateur ou on le supprime.
        if ( $action == "manage" ){
            // On vérifie si le mail est déja dans la base.
            // Au passage on en profite pour récupérer le abo_id qui sera utile pour l'update.
            $query_user = "SELECT abo_id FROM wa_abonnes WHERE abo_pseudo LIKE '".$pseudo."' AND abo_email LIKE '".$mail."'";
            $exe_query_user = mysql_query ( $query_user );
            $row_query_user = mysql_fetch_row ( $exe_query_user );
            if ( $row_query_user[0] > 0 ){
                // Si l'email existe on fait un update des valeurs dans la table wa_abo_liste.
                $query_up = "UPDATE wa_abo_liste SET format = ".$format.", register_date = ".time()." WHERE abo_id = ".$row_query_user[0]." LIMIT 1";
                $exe_query_up = mysql_query ( $query_up );
            }else{
                // L'email n'existe pas donc on cré l'utilisateur.
                // tout d'abord dans la table wa_abonnes.
                $query_abo = "INSERT INTO wa_abonnes (abo_pseudo, abo_email, abo_status) VALUES ('".$pseudo."', '".$mail."', 1)";
                $exe_query_abo = mysql_query ( $query_abo );
                // Comme le champ abo_id n'est pas auto_incrementé il faut lui attribué le même manuellement.
                $id_abo = mysql_insert_id ();
                // et ont insert dans la base wa_abo_liste.
                $query_liste = "INSERT INTO wa_abo_liste (abo_id, liste_id, format, register_key, register_date, confirmed) VALUES (".$id_abo.", 2, ".$format.", '".generate_key()."', ".time().", 1)";
                $exe_query_liste = mysql_query ( $query_liste );
            }
        }elseif ( $action == "delete" ){
            // L'utilisateur veut etre supprimer. On récupère sont abo_id.
            $query_user = "SELECT abo_id FROM wa_abonnes WHERE abo_pseudo LIKE '".$pseudo."' AND abo_email LIKE '".$mail."'";
            $exe_query_user = mysql_query ( $query_user );
            $row_query_user = mysql_fetch_row ( $exe_query_user );
            // On commence par la table wa_abo_liste.
            $query_del_list = "DELETE FROM wa_abo_liste WHERE abo_id = ".$row_query_user[0]." LIMIT 1";
            $exe_query_del_list = mysql_query ( $query_del_list );
            // Et on termine par la table wa_abonnes.
            $query_del_abo = "DELETE FROM wa_abonnes WHERE abo_id = ".$row_query_user[0]." LIMIT 1";
            $exe_query_del_abo = mysql_query ( $query_del_abo );
        }
    }

Il suffit d'appeler la fonction avec vos parametres et avec une condition cela peu meme servir a la mise a jour sur votre site.

if ( $inscription == "ok" ){
     setWaUser ( "Pseudo", "monmail@fai.com", 1, "manage" );
}else{
     setWaUser ( "Pseudo", "monmail@fai.com", 1, "delete" );
}

N'oubliez pas de mettre votre numéro de liste (le mien c'est 2)
Bien sur l'appelle se fait en plus de l'enregistrement de votre formulaire a vous, et vous pouvez évidemment changer les variable en fonction de vos besoins.

N'hesitez pas a faire des commentaires ou a poser des questions


8)

Hors ligne

#5 2006-06-22 20:06:22

Bobe
Administrateur
Lieu : La Rochelle
Inscription : 2002-05-27
Messages : 5 299

Re : Inclure directement dans les tables mes propres données

Pour abo_lang quelle sont les valeur possible? Ce qui m'etonne c'est que je viens d'importer une tres grosse base et qu'aucune adresse n'a ce champ rempli.

Les valeurs possibles sont le nom d'un package de langue installé dans wanewsletter.
Les usagers peuvent choisir leur langue préférée en accédant au panneau de gestion de compte. La valeur par défaut est une chaîne vide, la langue par défaut dans la configuration de wanewsletter est alors utilisé dans l'interface du panneau de gestion de compte.

Et pour send idem quel sont les valeurs et pourquoi alors que j'ai fais un envoi elle sont toujours a zéro?

Lorsque les envois sont effectués par paquet, le champ send correspondant pour les abonnés dont l'envoi a été effectué dans le dernier flôt d'envoi est mis à 1.
Les champs send sont tous remis à 0 (pour la liste concernée) à la fin de l'envoi.

En tout cas vraiment un trés bel outil  :love2:

Merci du compliment  :grin2:


PHP et MySQL, un duo gagnant !

Hors ligne

#6 2006-08-08 14:23:11

u-lounge
Membre
Inscription : 2006-08-08
Messages : 3

Re : Inclure directement dans les tables mes propres données

Padawa + Bobe  = Système de newsletter parfait.

Non franchement ce post est à épinglé, c'est le post qui tue !

En gros si vous cherchez, comme moi et depuis un moment, comment intégrer la solution géniale de Bobe avec votre propre système de tables mySQL, Padawa l'a fait pour vous !

Merci à vous deux ! Votre combinaison vient tout simplement de rendre Wanewsletter reellement "utilisable" en condition "site pro"...

Vraiment Merci Messieurs, chapeau bas... ya pas à dire, le logiciel libre et l'entraide, ya rien de mieux sur Internet, putain c'est tellement beau que je vais chialer...

:biere:

Plus qu'à tester maintenant mais en lisant en diagonale ce que dit Bob et ton code Padawa, ça m'a l'air d'être du tout bon cette histoire.

Hors ligne

#7 2006-08-08 18:00:51

u-lounge
Membre
Inscription : 2006-08-08
Messages : 3

Re : Inclure directement dans les tables mes propres données

Ah si une petite question, est-ce que cela pertube le système si certains comptes n'ont pas de pseudo... en effet, pour recevoir ma newsletter, on est pas obligé de s'enregistrer sur le site... je suppose que oui... mais je pose la question au cas où je n'aurais pas tout compris à l'histoire...

Hors ligne

#8 2006-08-08 22:10:05

Bobe
Administrateur
Lieu : La Rochelle
Inscription : 2002-05-27
Messages : 5 299

Re : Inclure directement dans les tables mes propres données

Padawa + Bobe  = Système de newsletter parfait.

:grin2:

Non franchement ce post est à épinglé, c'est le post qui tue !

Je vais faire un lien vers ce sujet dans le post-it "Interagir avec Wanewsletter à partir d'une autre application" du forum discussions.

Vraiment Merci Messieurs, chapeau bas... ya pas à dire, le logiciel libre et l'entraide, ya rien de mieux sur Internet, put1 c'est tellement beau que je vais chialer...

À ce point ? lol

Plus qu'à tester maintenant mais en lisant en diagonale ce que dit Bob et ton code Padawa, ça m'a l'air d'être du tout bon cette histoire.

Je mettrai juste un petit bémol. Le script qu'a fait Padawa est adapté à la configuration PHP de son serveur. Elle n'est pas forcément utilisable telle quel sans amener des problèmes de sécurité (injection sql dans le cas présent).

Je me permets de remanier légèrement le code de Padawa:

/*
    * Génère le register_key pour l'inscription à la newsletter.
         * Code de wanewsletter
   */
   function generate_key($num_char = 32, $use_uniqid = true){
      if( $use_uniqid == true ){
         srand((double) microtime() * 1000000);
         $rand_str = md5(uniqid(rand()));
      }else{
         $rand_str = md5(microtime());
      }
      return ( $num_char >= 32 ) ? $rand_str : substr($rand_str, 0, $num_char);
   }
   
  /*
    * Gestion de l'utilisateur dans wanewsletter.
   */
   function setWaUser($pseudo, $mail, $format, $action){
      // Selon l'action on manage l'utilisateur ou on le supprime.
      if ( !get_magic_quotes_gpc() ) {
         $pseudo = mysql_real_escape_string($pseudo);
         $mail   = mysql_real_escape_string($mail);
      }
      
      if ( $action == "manage" ){
         // On vérifie si le mail est déja dans la base.
         // Au passage on en profite pour récupérer le abo_id qui sera utile pour l'update.
         $query_user = "SELECT abo_id FROM wa_abonnes WHERE abo_pseudo = '".$pseudo."' AND abo_email = '".$mail."'";
         $exe_query_user = mysql_query ( $query_user );
         $row_query_user = mysql_fetch_row ( $exe_query_user );
         if ( $row_query_user[0] > 0 ){
            // Si l'email existe on fait un update des valeurs dans la table wa_abo_liste.
            $query_up = "UPDATE wa_abo_liste SET format = ".$format.", register_date = ".time()." WHERE abo_id = ".$row_query_user[0]." LIMIT 1";
            $exe_query_up = mysql_query ( $query_up );
         }else{
            // L'email n'existe pas donc on cré l'utilisateur.
            // tout d'abord dans la table wa_abonnes.
            $query_abo = "INSERT INTO wa_abonnes (abo_pseudo, abo_email, abo_status) VALUES ('".$pseudo."', '".$mail."', 1)";
            $exe_query_abo = mysql_query ( $query_abo );
            // Comme le champ abo_id n'est pas auto_incrementé il faut lui attribué le même manuellement.
            $id_abo = mysql_insert_id ();
            // et ont insert dans la base wa_abo_liste.
            $query_liste = "INSERT INTO wa_abo_liste (abo_id, liste_id, format, register_key, register_date, confirmed) VALUES (".$id_abo.", 2, ".$format.", '".generate_key(20)."', ".time().", 1)";
            $exe_query_liste = mysql_query ( $query_liste );
         }
      }elseif ( $action == "delete" ){
         // L'utilisateur veut etre supprimer. On récupère sont abo_id.
         $query_user = "SELECT abo_id FROM wa_abonnes WHERE abo_pseudo = '".$pseudo."' AND abo_email = '".$mail."'";
         $exe_query_user = mysql_query ( $query_user );
         $row_query_user = mysql_fetch_row ( $exe_query_user );
         // On commence par la table wa_abo_liste.
         $query_del_list = "DELETE FROM wa_abo_liste WHERE abo_id = ".$row_query_user[0]." LIMIT 1";
         $exe_query_del_list = mysql_query ( $query_del_list );
         // Et on termine par la table wa_abonnes.
         $query_del_abo = "DELETE FROM wa_abonnes WHERE abo_id = ".$row_query_user[0]." LIMIT 1";
         $exe_query_del_abo = mysql_query ( $query_del_abo );
      }
   }

J'ai ajouté les appels à mysql_real_escapes_string() au début de la fonction setWaUser() et modifié l'appel à generate_key() pour qu'il génère une chaîne de 20 caractères et non 32 (longueur par défaut qu'utilise la fonction).
J'ai également retiré les commandes SQL LIKE, car sans vérification plus complète du contenu de $pseudo et $mail, il y a un risque d'attaque DoS.

Ah si une petite question, est-ce que cela pertube le système si certains comptes n'ont pas de pseudo...

Non, le pseudo est optionnel.


PHP et MySQL, un duo gagnant !

Hors ligne

#9 2006-08-09 00:09:51

u-lounge
Membre
Inscription : 2006-08-08
Messages : 3

Re : Inclure directement dans les tables mes propres données

:mdr:

ouais bon là que dire, sinon MERCI !

Je donnerai sur ce même post un retour d'une intégration sur projet fonctionnel sous peu.

[EDIT]

Voilà, 1/2 heure après, c'est intégré et complètement fonctionnel... j'ai donc  les données  (nom, prenom, adresse... etc)  de mon form qui vont dans des tables qui me sont propres et en même temps selon que l'utilisateur coche ou non un bouton radio son mail est inscrit dans les tables wanewsletter... bref, simple et radical.

La desinscription est tout aussi simple... et transparente.

Indispensable... Bobe, comptes-tu intégré ceci directement dans une prochaine version ?

Hors ligne

#10 2006-08-14 20:00:45

Bobe
Administrateur
Lieu : La Rochelle
Inscription : 2002-05-27
Messages : 5 299

Re : Inclure directement dans les tables mes propres données

Indispensable... Bobe, comptes-tu intégré ceci directement dans une prochaine version ?

Euh non. Pas sous cette forme en tout cas.
Ça n'utilise pas le fichier de configuration de wanewsletter, la couche d'abstraction pour la connexion et dialogue avec la base de données (bah oui, ce script fonctionnera pas avec une installation de wanewsletter utilisant postgresql plutôt que mysql), etc.


PHP et MySQL, un duo gagnant !

Hors ligne

#11 2006-08-27 14:07:53

stefroy
Membre
Inscription : 2006-06-03
Messages : 32

Re : Inclure directement dans les tables mes propres données

bravo pour cette solution
on attendra que bobe formalise tout cela en standart dans la partie \contrib\
Ainsi, on aura plusieurs possiblité:
-Utiliser le formulaire d'inscription standart ( adaptable si besoin)
-Intégrer des fonctions de mise à jour sur les tables de wannewsletter dans notre propre formulaire.

Dans l'attente de l'intégration dans wanewsletter
Bravo à tous pour cette contribution

salutatuions

Hors ligne

#12 2006-09-11 02:04:51

padaben
Membre
Lieu : au soleil
Inscription : 2006-09-05
Messages : 31

Re : Inclure directement dans les tables mes propres données

je voudrais savoir ou intègre ton le code que padawa a écrit et que Bobe à modifié...

dans la page ou se trouve le formulaire?

dans une autre page?

MErci pour vos infos, je me prend la tete depuis un bon moment,
sans trouver de solutions...

MErci à vous

Padaben


********Création et réalisation de tous vos outils de communication - 100% des besoins quotidiens !! ********

Hors ligne

#13 2006-09-12 14:55:45

Bobe
Administrateur
Lieu : La Rochelle
Inscription : 2002-05-27
Messages : 5 299

Re : Inclure directement dans les tables mes propres données

Sans vouloir vous vexer, ça s'adresse aux personnes qui ont déjà quelques connaissances en php et veulent intégrer le mécanisme d'inscription à une newsletter dans d'autres applications ou dans leurs propres applications.

Je ne vais pas expliquer comment inclure du code php dans une application et appeller des fonctions php. Il y a de très bons sites pour débuter en php, consultez-les.


PHP et MySQL, un duo gagnant !

Hors ligne

#14 2006-09-12 15:20:36

padaben
Membre
Lieu : au soleil
Inscription : 2006-09-05
Messages : 31

Re : Inclure directement dans les tables mes propres données

cela ne me vexe pas, mais cependant, je comprend le php, sans doute pas autant que toi c'est sur !!! tu es un maitre...

Cependant, il faut avouer qu'au début de ce POST, padawa ne précisait pas ou insérer son code, j'ai touvé ou mettre tout ce code, j'ai mis le temps mais j'ai trouvé, et je n'ai pas eu le temps de poster pr le dire....

pas de probleme, donc, j'ai trouvé !

je suis dessus pour y insérer les valeur rapportées du FLASH

MErci, je vais lire les autres réponses que tu m'a laissé!

@+

Padaben


********Création et réalisation de tous vos outils de communication - 100% des besoins quotidiens !! ********

Hors ligne

#15 2006-09-12 15:42:25

padawa
Membre
Inscription : 2006-06-14
Messages : 5

Re : Inclure directement dans les tables mes propres données

Bonjour,

désolé de ne pas avoir suivi le post mais j'ai eu un crash d'ordi qui m'a durée 3 semaines  :x

Bref, tant mieux padaben si tu as réussi tout seul c'st comme ca que l'on progresse  wink

Et merci a bobe pour les petites améliorations du code, en effet mon serveur a deja les magic quotes par contre je ne connaissais pas la faille lié a LIKE.

Je suis quand mem content que ca ai pu en aider certain  smile

Hors ligne

#16 2006-10-26 00:50:39

DomZ
Membre
Inscription : 2005-12-20
Messages : 20

Re : Inclure directement dans les tables mes propres données

...
J'ai également retiré les commandes SQL LIKE, car sans vérification plus complète du contenu de $pseudo et $mail, il y a un risque d'attaque DoS.
...

Bonjour,

Peux-tu m'en dire plus sur ce risque d'attaque DOS car j'utilise pas mal de requetes LIKE (inévitable dans un moteur de recherche) et si il y a une faille d'aimerais le savoir smile.

Si tu as un lien qui explique çà, çà sera parfait aussi.

Merci

Hors ligne

#17 2006-10-26 01:25:42

Bobe
Administrateur
Lieu : La Rochelle
Inscription : 2002-05-27
Messages : 5 299

Re : Inclure directement dans les tables mes propres données

Je ne retrouve pas la référence. Peut-être ai-je donc révé  lol

En tout cas, il faut au moins vérifier que la valeur qu'on place dans le LIKE de la requête ne contient pas les caractères _ ou %, ou bien échapper ceux-ci avec un backslashe.


PHP et MySQL, un duo gagnant !

Hors ligne

Pied de page des forums