Jump to content

[Solved] Import customer and encrypt password


Recommended Posts

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.

Link to comment
Share on other sites

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 ?

Link to comment
Share on other sites

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 = ".$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>
Copier
Coller la séléction copiée dans un fichier texte

</form>
</body>
</html>
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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+

Link to comment
Share on other sites

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

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

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

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

Link to comment
Share on other sites

  • 1 year later...
×
×
  • Create New...