Kiwanis Posted August 26, 2008 Share Posted August 26, 2008 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-LucBonjour,Je voudrais importer des clients dans une table de PrestaShopJ'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. Link to comment Share on other sites More sharing options...
bramp Posted August 26, 2008 Share Posted August 26, 2008 The passwords are created on line 454 of Tools.php return md5(pSQL(_COOKIE_KEY_.$passwd)); The _COOKIE_KEY_ is found in settings.inc.phpThis should be all you need to encrypt your passwords. 1 Link to comment Share on other sites More sharing options...
Kiwanis Posted August 26, 2008 Author Share Posted August 26, 2008 Thanks bramp for your help, now I can put automatically my ~ 3000 members in my shop.Jean-Luc. Link to comment Share on other sites More sharing options...
shaka Posted August 27, 2008 Share Posted August 27, 2008 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 1De plus, quand je fais l'import à partir de l'admin de PS, cela plante mon navigateur FF. Une idée ? Link to comment Share on other sites More sharing options...
Kiwanis Posted August 28, 2008 Author Share Posted August 28, 2008 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 exemplefunction 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 = ".$ligno[1].$ligno[2].$ligno[3]; $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;?><html><head><title>Chargement Boutique Kiwanis</title><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></head><body><form name="form"> <? echo "Temps d'exécution de la requête : " . sprintf(".4f", $tempsRequete) . " seconde(s)"; ?><? echo "Nombre de lignes : " . $numLigne; ?><textarea name="textarea" cols="100" rows="30" wrap="OFF"><? echo $export; ?></textarea></td>CopierColler la séléction copiée dans un fichier texte</form></body></html> Link to comment Share on other sites More sharing options...
shaka Posted August 28, 2008 Share Posted August 28, 2008 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_passeet 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. Link to comment Share on other sites More sharing options...
Kiwanis Posted August 28, 2008 Author Share Posted August 28, 2008 1 : En fait il faut mettre le contenu de la variable COOKIE_KEY qui est dans le source settings.inc.php2 : 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+ Link to comment Share on other sites More sharing options...
shaka Posted August 28, 2008 Share Posted August 28, 2008 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”’;... Link to comment Share on other sites More sharing options...
Kiwanis Posted August 28, 2008 Author Share Posted August 28, 2008 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 Link to comment Share on other sites More sharing options...
shaka Posted August 28, 2008 Share Posted August 28, 2008 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; ?> -//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”> <? echo “Temps d’exécution de la requête : “ . sprintf(”.4f”, $tempsRequete) . “ seconde(s)”; ?> <? echo “Nombre de lignes : “ . $numLigne; ?> <textarea name=“textarea” cols=“100” rows=“30” wrap=“OFF”><? echo $export; ?></textarea></td> Copier Coller la séléction copiée dans un fichier texte </form></body></html> Link to comment Share on other sites More sharing options...
Kiwanis Posted August 29, 2008 Author Share Posted August 29, 2008 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 champsBon courage Link to comment Share on other sites More sharing options...
chustaweb Posted September 9, 2009 Share Posted September 9, 2009 Hello,Could you explain in English how to keep same password on migration process.MANY THANKS IN ADVANCE !! ;-) Link to comment Share on other sites More sharing options...
Recommended Posts