Aide - Recherche - Membres - Calendrier
Version complète : [RESOLU] Customer export
Forum osCommerce-fr > Adapter OsCommerce MS2 > Echanges développeurs
AL1
Bonjour a tous,

J'ai adapté la contribution "customers_export" de façon a récupérer sur excel la liste des clients ainsi que leur Email. Tout marche nickel.
Maintenant je voudrais exporté UNIQUEMENT les clients inscripts a la newletter. (sous excel le trie n'est pas facile quand il y a plusieurs milliers de lignes)

Donc mon idée est de trier avant l'export . La table "customers" à un champ "newletter", valeur (0) quand pas inscript ou (1) quand inscript. Dans l'état actuel de mon script je récupère toute les valeures de ce champ.

Je ne suis pas encore assé compétant pour modifier la variable du script... blush.gif
Code
<?php
require('includes/application_top.php');
if (!$HTTP_GET_VARS['submit'])
{
    ?>
    <!doctype html public "-//W3C//DTD HTML 4.01 Transitional//DE">
    <html <?php echo HTML_PARAMS; ?>>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=<?php echo CHARSET; ?>">
    <title><?php echo TITLE; ?></title>
    <link rel="stylesheet" type="text/css" href="includes/stylesheet.css">
    </head>
    <body marginwidth="0" marginheight="0" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" bgcolor="#CCCC33">

    <!-- header //-->
    <?php require(DIR_WS_INCLUDES.'header.php'); ?>
    <!-- header_eof //-->

    <!-- body //-->
     <table border="0" width="100%" cellspacing="2" cellpadding="2" >
      <tr>
        <td width="<?php echo BOX_WIDTH; ?>" valign="top"><table border="0" width="<?php echo BOX_WIDTH; ?>" cellspacing="1" cellpadding="1" class="columnLeft">
    <!-- left_navigation //-->
    <?php require(DIR_WS_INCLUDES.'column_left.php'); ?>
    <!-- left_navigation_eof //-->
        </table></td><td>
    <!-- body_text //-->
    <?php
    echo "<font size= 2 face= Verdana, Arial, Helvetica, sans-serif >Exporter et sauvegarder la liste des noms et emails client sur Excel</font>  ";
    echo '<form action="'. $phpself.'">';
    echo '<input type="submit" value="Exporter les infos clients" name="submit"></form>';
    ?>
    </td>
    </table>
    <!-- footer //-->
    <center><font color="#666666" size="2"></font></center>
    <!-- footer_eof //-->
    <br>
    </body>
    </html>
    <?php
}
else
{
    $contents="Email,Newsletter\n";
    $user_query = mysql_query('select c.*, adb.* from subscribers as c left join address_book as adb on c.subscribers_id = adb.customers_id');

    while($row = mysql_fetch_array($user_query))
    {
        $contents.=$row[subscribers_email_address].",";        
        $contents.=$row[customers_newsletter]."\n";
    }
    Header("Content-Disposition: attachment; filename=export.csv");
    print $contents;
}
require(DIR_WS_INCLUDES . 'application_bottom.php');
?>


Une idée ou une petite expliquation que je puisse bien comprendre la mécanique...

Merci

Alain
AL1
Bonjour tous,

Bon je me suis servi de la page "mail.php" comme exemple, et le "trie" quelle fait dans les envoie...
CODE
$mail_query = tep_db_query("select customers_firstname, customers_lastname, customers_email_address from " . TABLE_CUSTOMERS . " where customers_newsletter = '1'");


Donc en fait je n'arrive pas a trouver la syntax pour incorporer le ='1' dans la ligne :
CODE
$contents.=$row[customers_newsletter]."\n";


Merci pour vos eclaircissements...

Alain
AL1
Je patauge dans les grandes largeures, en fait c'est très bête ce que je veux faire, mais rien ni fait. J'ai été voir les tutos sur des site php, mais je trouve pas l'équivalent.
J'ai essayé de reprendre le code différament, mais j'ai une erreur dans excel "impossible d'ouvir le fichier en entier".

Code
    <?php
    echo "<font size= 2 face= Verdana, Arial, Helvetica, sans-serif >Exporter et sauvegarder la liste des noms et emails client sur Excel</font>&nbsp;&nbsp;";
    echo '<form action="'. $phpself.'">';
    echo '<input type="submit" value="Exporter les infos clients" name="submit"></form>';
    ?>
    </td>
    </table>
    <!-- footer //-->
    <center><font color="#666666" size="2"></font></center>
    <!-- footer_eof //-->
    <br>
    </body>
    </html>
    <?php
}
else
{
    $user_query = mysql_query("select customers_email_address from " . TABLE_CUSTOMERS . " where customers_newsletter = '1'");
    while($row = mysql_fetch_array($user_query))
    {
        $contents.=$row[customers_newsletter].",";
        
    }
    Header("Content-Disposition: attachment; filename=export.csv");
    print $contents;
}

require(DIR_WS_INCLUDES . 'application_bottom.php');
?>


Voila, si j'ai oublié un truc ou si je dois le reprendre dans un autre sens, les suggestions sont les bienvenue,

Alain
shoprun
Salut

Il me semble qu'il y a rien à rajouter au $content, tu veux faire un trie (classement par un ordre sur un critère) et bien normalement tu as juste à rajouter cette instruction dans la requête SQL, cette i,struction est un ORDER BY critère ASC ou DESC (tout code php est inutile).
Code
$user_query = mysql_query("select customers_email_address from " . TABLE_CUSTOMERS . " order by customers_newsletter ASC);
Cette requête retournera tous tes clients, et en premier seront ceux qui sont inscrits à la news.

Tu as visiblement rajouter cela à ta requête (une clause) : where customers_newsletter = '1'" -> Ceci a pour effet de retourner que les clients inscrits, tu perds tous les autres en cours de route ... Ce n'est pas ce que tu souhaite visiblement.

PS: Aussi, je remarque que tu utilise directement la fonction MySQL -> mysql_query ? Osc a pourtant mis en place ces propres fonctions pour interroger la BDD -> tep_db_query(la requête ...)
Pourquoi ne pas utiliser cela ?
AL1
Salut shoprun,

Citation
Tu as visiblement rajouter cela à ta requête (une clause) : where customers_newsletter = '1'" -> Ceci a pour effet de retourner que les clients inscrits, tu perds tous les autres en cours de route ... Ce n'est pas ce que tu souhaite visiblement.


Si justement, de récupérer tout les mails, c'est ok, voir mes messages plus haut, la je veux uniquement récuper que les clients inscrits d'ou mon tatonnement...

Citation
PS: Aussi, je remarque que tu utilise directement la fonction MySQL -> mysql_query ? Osc a pourtant mis en place ces propres fonctions pour interroger la BDD -> tep_db_query(la requête ...)
Pourquoi ne pas utiliser cela ?

OUps, rectfié mais cela n'a pas réglé le problème evidement... Même les modifs que tu m'a suggérées ne résou pas le truc.

Bon voila mon code complet,

Code
<?php
require('includes/application_top.php');
if (!$HTTP_GET_VARS['submit'])
{
    ?>
    <!doctype html public "-//W3C//DTD HTML 4.01 Transitional//DE">
    <html <?php echo HTML_PARAMS; ?>>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=<?php echo CHARSET; ?>">
    <title><?php echo TITLE; ?></title>
    <link rel="stylesheet" type="text/css" href="includes/stylesheet.css">
    </head>
    <body marginwidth="0" marginheight="0" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" bgcolor="#CCCC33">
    <!-- header //-->
    <?php require(DIR_WS_INCLUDES.'header.php'); ?>
    <!-- header_eof //-->

    <!-- body //-->
     <table border="0" width="100%" cellspacing="2" cellpadding="2" >
      <tr>
        <td width="<?php echo BOX_WIDTH; ?>" valign="top"><table border="0" width="<?php echo BOX_WIDTH; ?>" cellspacing="1" cellpadding="1" class="columnLeft">
    <!-- left_navigation //-->
    <?php require(DIR_WS_INCLUDES.'column_left.php'); ?>
    <!-- left_navigation_eof //-->
        </table></td><td>
    <!-- body_text //-->

    <?php
    echo "<font size= 2 face= Verdana, Arial, Helvetica, sans-serif >Exporter et sauvegarder la liste des noms et emails client sur Excel</font>&nbsp;&nbsp;";
    echo '<form action="'. $phpself.'">';
    echo '<input type="submit" value="Exporter les infos clients" name="submit"></form>';
    ?>
    </td>
    </table>
    <!-- footer //-->
    <center><font color="#666666" size="2"></font></center>
    <!-- footer_eof //-->
    <br>
    </body>
    </html>
    <?php
}
else
{
    $user_query = tep_db_query("select customers_email_address from " . TABLE_CUSTOMERS . " where customers_newsletter = '1'");
    
    while($row = mysql_fetch_array($user_query))
    {
        $contents.=$row[customers_newsletter].",";
        
    }
    Header("Content-Disposition: attachment; filename=export.csv");
    print $contents;
}

require(DIR_WS_INCLUDES . 'application_bottom.php');
?>


Alain
shoprun
C'est vrai que je n'est pas lu du tout les premier post, juste débarqué comme ça au feeling ...

Visiblement tu souhaite juste exclure les "non inscrit", et comme j'ai lu que cette contrib marchait nickel et bien c'est à mon avis dans cette portion que code que tu as modifier qui provoque l'erreur :
Code
while($row = mysql_fetch_array($user_query))
{
    $contents.=$row[customers_newsletter].",";
        
}
Ici, c'est la virgule qui coince je pense.

Pour la requête, c'est celle que tu avais fait est correcte je pense :
Code
$user_query = tep_db_query("select customers_email_address from " . TABLE_CUSTOMERS . " where customers_newsletter = '1'");

Le listing, un retour chariot à la place de la virgule (car visiblement tu souhaite juste la colonne des mails) :
Code
while($row = mysql_fetch_array($user_query)) {
    $contents.=$row[subscribers_email_address]."\n";
}

-Pour le format CSV, la virgule est le séparateur pour délimiter le nombre de colonnes (qui correspond au nombre de champs).
Quoi que ! par défaut c'est le point virgule ;.
-Le retour chariot est le séparateur pour délimiter le nombre de lignes (correspond au nombre de clients)
AL1
Bonjour shoprun,

Bon j'ai un léger mieux,

J'ai remplacé la virgule par un point virgule maintenant il ouvre le fichier excel, mais il le rempli par plein de ; blush.gif je vois pas ou ma requette coince, pourtant je pensai la pondre en 2 mm .... rolleyes.gif

pour le retour chariot, exacte, une colonne et 1 adresse par ligne, facilement exploitable via un logicil de mailing... (S......E) pour ne pas dir son nom...

Mais je bute sur un script qui devrait être si simple, mais quelle brêle je fais... mrgreen.gif

1 Comment récupérer les emails des clients abonnés... La honte...

Alain
shoprun
Arrf, j'ai fais une erreur ci desus (copier / coller sans vérifier) car le nom du champ mail n'est pas correcte, peut est ce dû à cela (c'est customers_email_address), doit être le nom dans la requête :
Code
while($row = tep_db_fetch_array($user_query)) {
    $contents.=$row['customers_email_address']."\n";
}
Puis correction en utilisant la fonction osC tep_db_fetch_array() à la place de mysql_fetch_array()
Aussi, il est préférable de mettre le nom du champ du $row entre des simples côtes.
Vérifie bien ce genre de détail ... Ton problème est juste dû à des erreur d'inattention je pense.

A mon avis les toutes les lignes sont vides et excel les combles par des points virgule.
Aussi, regarde du coté excel, vérifie bien les différents séparateurs, (point virgule / retour chariot)

Si ça persiste toujours, et rajoute un champ pour en avoir au moins (genre id_customers) en utilisant le point virgule bien sûr.
En faite je me dis que le fait qu'il y est qu'un seul champ ça déboussole excel, même si j'y crois pas ...
AL1
Super shoprun t'es un chef... Tout nickel...

Voila le corrigé pour les autres:
Code
<?php
require('includes/application_top.php');
if (!$HTTP_GET_VARS['submit'])
{
    ?>
    <!doctype html public "-//W3C//DTD HTML 4.01 Transitional//DE">
    <html <?php echo HTML_PARAMS; ?>>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=<?php echo CHARSET; ?>">
    <title><?php echo TITLE; ?></title>
    <link rel="stylesheet" type="text/css" href="includes/stylesheet.css">
    </head>
    <body marginwidth="0" marginheight="0" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" bgcolor="#CCCC33">
    <!-- header //-->
    <?php require(DIR_WS_INCLUDES.'header.php'); ?>
    <!-- header_eof //-->

    <!-- body //-->
     <table border="0" width="100%" cellspacing="2" cellpadding="2" >
      <tr>
        <td width="<?php echo BOX_WIDTH; ?>" valign="top"><table border="0" width="<?php echo BOX_WIDTH; ?>" cellspacing="1" cellpadding="1" class="columnLeft">
    <!-- left_navigation //-->
    <?php require(DIR_WS_INCLUDES.'column_left.php'); ?>
    <!-- left_navigation_eof //-->
        </table></td><td>
    <!-- body_text //-->

    <?php
    echo "<font size= 2 face= Verdana, Arial, Helvetica, sans-serif >Exporter et sauvegarder la liste des noms et emails client sur Excel</font>&nbsp;&nbsp;";
    echo '<form action="'. $phpself.'">';
    echo '<input type="submit" value="Exporter les infos clients" name="submit"></form>';
    ?>
    </td>
    </table>
    <!-- footer //-->
    <center><font color="#666666" size="2"></font></center>
    <!-- footer_eof //-->
    <br>
    </body>
    </html>
    <?php
}
else
{
// **** Debut modif code par shoprun 29/04/2008
    $user_query = tep_db_query("select customers_email_address from " . TABLE_CUSTOMERS . " where customers_newsletter = '1'");
    while($row = mysql_fetch_array($user_query))
    {
        $contents.=$row[customers_email_address]."\n";
// **** Fin modif code par shoprun 29/04/2008
    }
    Header("Content-Disposition: attachment; filename=export.csv");
    print $contents;
}

require(DIR_WS_INCLUDES . 'application_bottom.php');
?>


Vraiment super

Alain
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'informations, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2024 Invision Power Services, Inc.