Access to PrestaShop corporate website French English Change language
Hello, Guest |
| Register
Remember me Forgot password ?
Site Map Site Map Contact us Contact us
PrestaShop job
 

Team members online:


 
Post Reply
New Topic
(solved,résolu) import customer and encrypt password

offline
Posted: 26 August 2008 06:06 PM   [ Ignore ]
Apprentice
RankRank

Messages :

  • total: 15
  • last 7 days: 0
Joined: 2008-08-26

Hello,

I want to import customers in PS table.

Actually I have a mysql data with members (name, password, email, phonenumber, …) and I want tu upload. It’s easy for all fields except password.

The MD5 encrypt php command is not the same as Prestashop and I didn’t found the module or class where Prestashop encrypt before to put in ps_customer, field passwd. But I saw how the security code is made on the forum.

Thanks in advance. Jean-Luc

Bonjour,

Je voudrais importer des clients dans une table de PrestaShop

J’ai une base mysql avec des membres de mon association (nom, mot de passe, adresse mail, téléphone, etc…) et je voudrais faire un upload. C’est facile pour tous les champs sauf le champ du mot de passe.

La fonction de cryptage avec l’algo MD5 ne donne pas le résultat attendu et je n’arrive pas à trouver dans quel module ou quelle classe PrestaShop encrypte le mot de passe avant de la mettre dans le champ passwd de la table ps_customer. Par contre j’ai vu sur le forum comment était fait le champ security code.

Merci d’avance. Jean-Luc.

 
offline
Posted: 26 August 2008 08:14 PM   [ Ignore ]   [ # 1 ]
Regular
RankRankRank

Messages :

  • total: 43
  • last 7 days: 0
Joined: 2008-08-15

The passwords are created on line 454 of Tools.php

return md5(pSQL(_COOKIE_KEY_.$passwd));

The COOKIE_KEY is found in settings.inc.php

This should be all you need to encrypt your passwords.

 
offline
Posted: 26 August 2008 08:44 PM   [ Ignore ]   [ # 2 ]
Apprentice
RankRank

Messages :

  • total: 15
  • last 7 days: 0
Joined: 2008-08-26

Thanks bramp for your help, now I can put automatically my ~ 3000 members in my shop.

Jean-Luc.

 
offline
Posted: 27 August 2008 11:45 PM   [ Ignore ]   [ # 3 ]
Apprentice
RankRank

Messages :

  • total: 23
  • last 7 days: 1
Joined: 2008-08-18

Bonjour,

En attendant le module d’Import OSC, est-il possible d’avoir un tuto clair sur l’import des données, notamment des CUSTOMERS.
J’ai bien exporté ma Table OSC en .csv mais la procédure d’importation sous phpmyadmin dit :

Nombre de champs invalide dans les données CSV à la ligne 1

De plus, quand je fais l’import à partir de l’admin de PS, cela plante mon navigateur FF.
Une idée ?

 
offline
Posted: 28 August 2008 08:58 AM   [ Ignore ]   [ # 4 ]
Apprentice
RankRank

Messages :

  • total: 15
  • last 7 days: 0
Joined: 2008-08-26

Bonjour,

En fait, je ne me suis pas posé de question pour l’import, j’ai écrit un bout de PHP qui à partir d’une table qui contient des identifiants de mes utilisateurs avec mail et mot de passe ainsi qu’une table qui contient l’adresse, le téléphone, charge les tables ps_customer et ps_address.

Je lis l’email pour trouver le membre correspondant et récupère les infos le concernant, je fais un insert dans ps_customer, je relis ps_customer pour trouver le id_customer puis je fais un insert dans ps_address.

Comme mes utilistaeurs avaient un mot de passe d’accès à une autre application, je le récupère, le concatène avec la variable cookie_key et le crypte avec MD5.

Le code n’est absolument pas optimisé, fait sans norme précise, il ne sert qu’une fois, ensuite pour les nouveaux clients utiliseront le standard PrestaShop.

Bon courage. JL.

voici le code utilisé :

<?Php

$cook=“111111111111111111111111111111111111111111111111111111111”;

//la valeur de cook est bidon pour l exemple

function scindeMicrotime() { list($usec, $sec) = explode(” “, microtime()); return ((float)$usec + (float)$sec); }
$tempsInit = scindeMicrotime();

function phone($x)
{ if (strlen($x)==0) { $Tel = “”; } else { $Tel = “+”.substr($x,1,2).”(0)”.substr($x,3,12); //$Tel = “+”.substr($x,1,2).”(0)”.substr($x,-9,1).substr($x,-8,8); } return $Tel;
}

//
$export=”“;
$ligne = ‘“NOM”,“PRENOM”,“LOGIN”,“PASSWORD”,“ADR”,“ADR2”,“CP”,“VILLE”,“PAYS”,“TEL PERSO”,“PORT PERSO”,“MAIL PERSO”,“CRYPTE”’;

$export .= “$ligne\n”;
$ligne = “”;

//
$numLigne = 0;

$table_qui_contient_utilisateurs_emails_et_mots_de_passe=“mettre le nom de la table”;
$table_qui_contient_les_membres_adresses_et_autres=“mettre le nom de la table”;

include(”../connexion.php”);

$reqdir = mysql_query(“SELECT * FROM “.$table_qui_contient_utilisateurs_emails_et_mots_de_passe);
while ($ligno = mysql_fetch_array($reqdir))
{

//echo “ligno = “.$ligno1.$ligno2.$ligno3; $numLigne++; $nm = $ligno[“Autombrs”]; $sqlcci=“SELECT * FROM “.$table_qui_contient_les_membres_adresses_et_autres.” WHERE (Autombrs=’”.$nm.”’ AND email NOT LIKE ‘’)”; $rescci=mysql_query($sqlcci); $lignm=mysql_fetch_array($rescci); $nom = $lignm[“Nom”]; $nom=str_replace(”’”,”’‘”,$nom); $prenom = $lignm[“Prenom”]; $prenom=str_replace(”’”,”’‘”,$prenom); if ($lignm[“Identite”]==“Monsieur”) { $genre=1; } else { $genre=2; } $login = $ligno[“Login”]; $pass = md5($cook.$ligno[“Pass”]); $adr1 = $lignm[“Adresse”]; $adr1=str_replace(”’”,”’‘”,$adr1); $adr2 = $lignm[“Adsuite”]; $adr2=str_replace(”’”,”’‘”,$adr2); $naissance = $lignm[“Naissance”]; $birth=substr($naissance,6,4).”“.substr($naissance,3,2).”“.substr($naissance,0,2); $cp = $lignm[“cp”]; $ville = $lignm[“Ville”]; //$pays = $lignm[“Pays”]; $tel = $lignm[“Tel”]; $gsm = $lignm[“Portable”]; $email = $lignm[“email”]; // $sql = “INSERT INTO `ps_customer` (`id_customer`, `id_gender`, `secure_key`, `email`, `passwd`, `birthday`, `lastname`, `newsletter`, `optin`, `firstname`, `active`, `date_add`, `date_upd`) VALUES (NULL, ‘”.$genre.”’,’”.$pass.”’,’”. $email.”’,’”. $pass.”’,’”. $birth.”’,’”. $nom.”’,‘1’,’‘,’”. $prenom.”’,‘1’,‘2008-08-27 00:00:00’,’‘);”; $ligne .=$sql;

$rep=mysql_query($sql) or die(mysql_error());
//echo $rep;
$rep=“SELECT * FROM ps_customer WHERE lastname=’”.$nom.”’ AND firstname=’”.$prenom.”’”;
//echo “rep=”.$rep;
$rep=mysql_query($rep);
$lig=mysql_fetch_array($rep);
$id_customer=$lig[“id_customer”];
//echo “id “.$id_customer;

$sql = “INSERT INTO `ps_address` (`id_address`, `id_country`, `id_state`, `id_customer`, `id_manufacturer`, `id_supplier`, `alias`, `company`, `lastname`, `firstname`, `address1`, `address2`, `postcode`, `city`, `other`, `phone`, `phone_mobile`, `date_add`, `date_upd`, `active`, `deleted`) VALUES (NULL,‘8’, NULL,’”. $id_customer.”’,‘0’,‘0’,‘Mon adresse’, NULL,’”. $nom.”’,’”. $prenom.”’,’”. $adr1.”’,’”. $adr2.”’,’”. $cp.”’,’” . $ville.”’, NULL,’”. $tel.”’,’”. $gsm.”’,‘2008-08-27 00:00:00’, ‘’, ‘1’, ‘0’);”; $rep=mysql_query($sql);

$ligne .=$sql;

$export .= “$ligne\n”; $ligne = “”; //echo “export = “.$export; } $tempsFin = scindeMicrotime(); $tempsRequete = $tempsFin – $tempsInit; ?> <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”> <html> <head> <title>Chargement Boutique Kiwanis</title> <meta http-equiv=“Content-Type” content=“text/html; charset=iso-8859-1”> </head>

<body>
<form name=“form”> <table width=“100%” border=“0” cellspacing=“5” cellpadding=“0” style=“font-family: verdana; font-size: 12px;”> <tr> <td><? echo “Temps d’exécution de la requête : “ . sprintf(”.4f”, $tempsRequete) . “ seconde(s)”; ?></td> </tr> <tr> <td><? echo “Nombre de lignes : “ . $numLigne; ?></td> </tr> <tr> <td><textarea name=“textarea” cols=“100” rows=“30” wrap=“OFF”><? echo $export; ?></textarea></td> </tr> <tr> <td>Copier</td> </tr> <tr> <td>Coller la séléction copiée dans un fichier texte</td> </tr> </table>
</form>
</body>
</html>

 
offline
Posted: 28 August 2008 10:40 AM   [ Ignore ]   [ # 5 ]
Apprentice
RankRank

Messages :

  • total: 23
  • last 7 days: 1
Joined: 2008-08-18

Bonjour,

Je vais donc tenter le coup. Petites précisions :

1. A quoi correspond le $cook=“valeur bidon”; ?

2. Ca pose un problème si pour on a le même nom de table pour la $table_qui_contient_utilisateurs_emails_et_mots_de_passe
et la $table_qui_contient_les_membres_adresses_et_autres.

3. Je peux bien sur remplacer les valeurs de $ligne = ‘“NOM”,“PRENOM”,“LOGIN”,“PASSWORD”,“ADR”,“ADR2”,“CP”,“VILLE”,“PAYS”,“TEL PERSO”,“PORT PERSO”,“MAIL PERSO”,“CRYPTE”’; par les champs de ma table OSC, du style $ligne = ‘“customers_id”,“customers_gender”,“customers_firstname”,“customers_lastname”,“customers_dob”,“customers_email_address”,“customers_default_address_id”,“customers_telephone” etc…

Merci pour votre soutien.

 
offline
Posted: 28 August 2008 11:58 AM   [ Ignore ]   [ # 6 ]
Apprentice
RankRank

Messages :

  • total: 15
  • last 7 days: 0
Joined: 2008-08-26

1 : En fait il faut mettre le contenu de la variable COOKIE_KEY qui est dans le source settings.inc.php

2 : Pas d’importance pour les tables en entrée, en fait dans mon application, j’ai 2 tables, mais avec une c’est bon.

3 : les valeurs sur $ligne= ne servent que pour avoir un compte rendu à imprimer de ce que j’ai chargé

A+

 
offline
Posted: 28 August 2008 07:15 PM   [ Ignore ]   [ # 7 ]
Apprentice
RankRank

Messages :

  • total: 23
  • last 7 days: 1
Joined: 2008-08-18

Bonjour,

Je viens de tester sans succès :

1. J’ai un doute sur include(”../connexion.php”); J’ai mis mon fichier import.php à la racine de mon site en mettant include(”connect/connexion.php”);
mais je n’ai qu’une page blanche.

2. J’ai même mis la ligne : $ligne = ‘“customers_id”,“customers_gender”,“customers_firstname”,“customers_lastname”,“customers_dob”,“customers_email_address”,“customers_default_address_id”,“customers_telephone”,“customers_fax”,“customers_password”,“customers_newsletter”’;

 
offline
Posted: 28 August 2008 08:06 PM   [ Ignore ]   [ # 8 ]
Apprentice
RankRank

Messages :

  • total: 15
  • last 7 days: 0
Joined: 2008-08-26

j’ai utilser un include pour éviter de toujours taper la même chose mais il est possible de copie directement le code suivant en début :

<?php

$hostname_database = “nom_du_serveur”;
$database_database = “nom_de_la_base”;
$username_database = “nom_utilisateur”;
$password_database = “mot_de_passe”;

$database = mysql_pconnect($hostname_database, $username_database, $password_database) or die(mysql_error());
?>

La partie $ligne=…. ne sert à rien d’autre qu‘à un compte rendu.

Pour voir où cela plant il faut enlever les // devant echo pour voir les requêtes générées

à suivre

 
offline
Posted: 28 August 2008 10:44 PM   [ Ignore ]   [ # 9 ]
Apprentice
RankRank

Messages :

  • total: 23
  • last 7 days: 1
Joined: 2008-08-18

Page toujours blanche avec ce code :

<?php

$hostname_database = “localhost”;
$database_database = “nomdelabase”;
$username_database = “nomusager”;
$password_database = “motdepasse”;

$database = mysql_pconnect($hostname_database, $username_database, $password_database) or die(mysql_error());
?>

<?Php

$cook=“OO…”;

function scindeMicrotime() { list($usec, $sec) = explode(” “, microtime()); return ((float)$usec + (float)$sec); }
$tempsInit = scindeMicrotime();

function phone($x)
{ if (strlen($x)==0) { $Tel = “”; } else { $Tel = “+”.substr($x,1,2).”(0)”.substr($x,3,12);
//$Tel = “+”.substr($x,1,2).”(0)”.substr($x,-9,1).substr($x,-8,8); } return $Tel;
}

//
$export=”“;
$ligne = ‘“customers_id”,“customers_gender”,“customers_firstname”,“customers_lastname”,“customers_dob”,“customers_email_address”,“customers_default_address_id”,“customers_telephone”,“customers_fax”,“customers_password”,“customers_newsletter”’;

$export .= “$ligne\n”;
$ligne = “”;

//
$numLigne = 0;

$table_qui_contient_utilisateurs_emails_et_mots_de_passe=“customers”;

$reqdir = mysql_query(“SELECT * FROM “.$table_qui_contient_utilisateurs_emails_et_mots_de_passe);
while ($ligno = mysql_fetch_array($reqdir))
{
echo “ligno = “.$ligno1.$ligno2.$ligno3; $numLigne++; $nm = $ligno[“Autombrs”]; $sqlcci=“SELECT * FROM “.$table_qui_contient_les_membres_adresses_et_autres.” WHERE (Autombrs=’”.$nm.”’ AND email NOT LIKE ‘’)”; $rescci=mysql_query($sqlcci); $lignm=mysql_fetch_array($rescci); $nom = $lignm[“Nom”]; $nom=str_replace(”’”,”’‘”,$nom); $prenom = $lignm[“Prenom”]; $prenom=str_replace(”’”,”’‘”,$prenom); if ($lignm[“Identite”]==“Monsieur”) { $genre=1; } else { $genre=2; } $login = $ligno[“Login”]; $pass = md5($cook.$ligno[“Pass”]); $adr1 = $lignm[“Adresse”]; $adr1=str_replace(”’”,”’‘”,$adr1); $adr2 = $lignm[“Adsuite”]; $adr2=str_replace(”’”,”’‘”,$adr2); $naissance = $lignm[“Naissance”]; $birth=substr($naissance,6,4).”“.substr($naissance,3,2).”“.substr($naissance,0,2); $cp = $lignm[“cp”]; $ville = $lignm[“Ville”];

$pays = $lignm[“Pays”]; $tel = $lignm[“Tel”]; $gsm = $lignm[“Portable”]; $email = $lignm[“email”];

$sql = “INSERT INTO `ps_customer` (`id_customer`, `id_gender`, `secure_key`, `email`, `passwd`, `birthday`, `lastname`, `newsletter`, `optin`, `firstname`, `active`, `date_add`, `date_upd`) VALUES (NULL, ‘”.$genre.”’,’”.$pass.”’,’”. $email.”’,’”. $pass.”’,’”. $birth.”’,’”. $nom.”’,‘1’,’‘,’”. $prenom.”’,‘1’,‘2008-08-27 00:00:00’,’‘);”; $ligne .=$sql;

$rep=mysql_query($sql) or die(mysql_error());
echo $rep;
$rep=“SELECT * FROM ps_customer WHERE lastname=’”.$nom.”’ AND firstname=’”.$prenom.”’”;
echo “rep=”.$rep;
$rep=mysql_query($rep);
$lig=mysql_fetch_array($rep);
$id_customer=$lig[“id_customer”];
echo “id “.$id_customer;
$sql = “INSERT INTO `ps_address` (`id_address`, `id_country`, `id_state`, `id_customer`, `id_manufacturer`, `id_supplier`, `alias`, `company`, `lastname`, `firstname`, `address1`, `address2`, `postcode`, `city`, `other`, `phone`, `phone_mobile`, `date_add`, `date_upd`, `active`, `deleted`) VALUES (NULL,‘8’, NULL,’”. $id_customer.”’,‘0’,‘0’,‘Mon adresse’, NULL,’”. $nom.”’,’”. $prenom.”’,’”. $adr1.”’,’”. $adr2.”’,’”. $cp.”’,’” . $ville.”’, NULL,’”. $tel.”’,’”. $gsm.”’,‘2008-08-27 00:00:00’, ‘’, ‘1’, ‘0’);”; $rep=mysql_query($sql);

$ligne .=$sql;
$export .= “$ligne\n”; $ligne = “”;
echo “export = “.$export; } $tempsFin = scindeMicrotime(); $tempsRequete = $tempsFin – $tempsInit; ?>
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”> <html>
<head> <title>Chargement Boutique CCC</title>
<meta http-equiv=“Content-Type” content=“text/html; charset=iso-8859-1”>
</head>
<body>
<form name=“form”> <table width=“100%” border=“0” cellspacing=“5” cellpadding=“0” style=“font-family: verdana; font-size: 12px;”> <tr> <td><? echo “Temps d’exécution de la requête : “ . sprintf(”.4f”, $tempsRequete) . “ seconde(s)”; ?></td> </tr> <tr> <td><? echo “Nombre de lignes : “ . $numLigne; ?></td> </tr> <tr> <td><textarea name=“textarea” cols=“100” rows=“30” wrap=“OFF”><? echo $export; ?></textarea></td> </tr> <tr> <td>Copier</td> </tr> <tr> <td>Coller la séléction copiée dans un fichier texte</td> </tr> </table>
</form>
</body>
</html>

 
offline
Posted: 29 August 2008 07:31 AM   [ Ignore ]   [ # 10 ]
Apprentice
RankRank

Messages :

  • total: 15
  • last 7 days: 0
Joined: 2008-08-26

Il faut changer le nom des champ entre crochets.

Dans mon script j’ai mis $nom=lignm[“Nom”] parce que dans ma table le champ qui contient le nom de famille s’appelle Nom (avec une majuscule), dans le tien, cela semble être $nom=lignm[“customers_lastname”]

Etc… pour tous les champs

Bon courage

 
 
 
Fast Reply
New Topic