Aide pour bridger des tables utilisateurs de 2 cms

Fermé
tradezone.fr Messages postés 19 Date d'inscription mardi 15 janvier 2008 Statut Membre Dernière intervention 21 décembre 2017 - 19 déc. 2017 à 18:30
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 - 21 déc. 2017 à 11:01
Bonjour,
je cherche à relier les utilisateurs de deux scripts php différents
et je ne sais pas comment faire.
Il me semble qu'avec la requête sql join c'est possible de dire à la base de données de considérer les deux tables users en une mais le noms des colonnes ne correspondent pas :
Je voudrais que les utilisateurs soient inscrit depuis l'un ou l'autre script.
Dans la table de données je trouve les colonnes :

id user name email password created modified isAdmin status photoURL lastLogin recoverPass backgroundURL


dans la base de donnée ou se trouvent les utilisateurs à conserver j'ai trouvé des colonnes qui correspondent :
uid uname name email pass user_regtime user_lastvisit url

comment faire pour que :

id = uid

user = uname

name = uname

email à déjà le même nom

password = pass

et pour que les enregistrement ne s'écrasent pas.
Est-ce la bonne méthode ?
J'ai aussi pensé à un fichier php qui ferait le lien entre les deux bases mais je ne saurais pas comment faire non plus.

le serveur en question est sous mysql 5.6 php 5.6

Merci d'avance pour votre aide

5 réponses

yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471
19 déc. 2017 à 19:28
bonsoir, voudrais-tu créer une nouvelle table qui reprendrait le contenu des deux autres?
ou bien voudrais-tu garder deux tables, mais les utiliser comme si tout était dans une seule?
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
19 déc. 2017 à 20:52
Bonjour,

comment faire pour que :

id = uid

user = uname

name = uname

email à déjà le même nom

password = pass

Quand tu fais ta requête ... tu peux utiliser des ALIAS pour les champs...

par exemple
SELECT champ1 , champ2
FROM table1
UNION
SELECT toto3 as champ1,  truc4 as champ2
FROM table2


Il faut, bien entendu, que le USER utilisé pour accéder aux données (dans tes deux BDD) aient les droits pour accéder à ces deux bases / tables


0
tradezone.fr Messages postés 19 Date d'inscription mardi 15 janvier 2008 Statut Membre Dernière intervention 21 décembre 2017
19 déc. 2017 à 23:53
Merci pour vos réponses :)

Oui yg_be , je voudrais garder les deux tables et qu'elles fonctionnent comme si elles étaient dans une seule ce qui je suppose m'éviterai d'avoir à modifier les scripts et si une autre solution est possible je veux bien essayer.

oui jordan sa à l'air d'être sa,
mais hélas cela ne fonctionne pas
Quand j'entre :

SELECT id , user , name , email , password
FROM table1_users
UNION
SELECT uid as id, user as uname, name as uname, password as pass
FROM table2_users


voici ce que me répond le serveur :


MySQL déclare:
Unknown column 'user' in 'field list'

Erreur de demande:
SELECT id , user , name , email , password FROM table1_users UNION SELECT uid as id, user as uname, name as uname, password as pass FROM table2_users LIMIT 0, 30;


Pourtant, la colonne user existe bien en deuxième position après id dans la table 1.

Je ne comprends donc pas pourquoi cela ne fonctionne pas
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
20 déc. 2017 à 00:08
Et dans ta table 2 ??
N'as tu pas inversé les ALIAS et les noms de champs ????
0
tradezone.fr Messages postés 19 Date d'inscription mardi 15 janvier 2008 Statut Membre Dernière intervention 21 décembre 2017
20 déc. 2017 à 00:46
non, je ne crois pas, j'ai fait comme dans l'exemple.
j'ai essayé l'inverse et là c'est la première colonne qu'il ne trouve pas.
pour


SELECT id,user,name,email,password
FROM _table1_users
UNION
SELECT id as uid, uname as user, uname as name, pass as password
FROM table2_users


j'ai

MySQL déclare:
Unknown column 'id' in 'field list'

Erreur de demande:
SELECT id,user,name,email,password FROM table1_users UNION SELECT id as uid, uname as user, uname as name, pass as password FROM table2_users LIMIT 0, 30;
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
20 déc. 2017 à 01:10
Donc ... NON... tu ne l'avais pas fait comme dans l'exemple.
Maintenant c'est mieux.
Par contre .. en table2 .. le champ c'est id ou uid ?
0
tradezone.fr Messages postés 19 Date d'inscription mardi 15 janvier 2008 Statut Membre Dernière intervention 21 décembre 2017
20 déc. 2017 à 01:29
En fait table 1 :
id user name email password
table 2
uid uname name email pass
note :
les deux tables ont plus de colonnes que celles ci-dessus mais je pense que c'est suffisant pour que les utilisateurs soient connectés.
la table 2 à plus de colonnes que la colonne 1
je sais pas si sa change quelque chose à la requête
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649 > tradezone.fr Messages postés 19 Date d'inscription mardi 15 janvier 2008 Statut Membre Dernière intervention 21 décembre 2017
20 déc. 2017 à 01:30
Le nombre de champs... peu importe
Par contre... le nom des champs que tu cites ne sont pas ceux que tu as mis dans ta requête.... relis toi....
Regarde ta requête
SELECT id,user,name,email,password 
FROM table1_users
 UNION 
SELECT id as uid, uname as user, uname as name, pass as password 
FROM table2_users 
LIMIT 0, 30;
0
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471
20 déc. 2017 à 09:12
et ainsi?
SELECT id , user , name , email , password
FROM table1_users
UNION
SELECT uid, uname, uname, email, pass 
FROM table2_users 
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
tradezone.fr Messages postés 19 Date d'inscription mardi 15 janvier 2008 Statut Membre Dernière intervention 21 décembre 2017
20 déc. 2017 à 17:55
Merci pour votre aide :)
J'ai bien essayé le code :

SELECT id , user , name , email , password
FROM table1_users
UNION
SELECT uid, uname, uname, email, pass
FROM table2_users

Tout à l'air d'avoir fonctionné donc je suis perdu.
La requête fonctionne bien, mysqldumper me fait même un rapport de réussite ci dessous.
Table `bdd`.`users UNION`
Enregistrements 1 - 2 d'un total de 2 << < > >>
View: compact L'intérrogation contient 5 colonnes
# id user name email password
supprimer 1. 2 letesteur letesteur letesteur@letesteur.org 26b637ed41273425be
supprimer 2. 6 svanja svanja svanja@tradezone.fr ccmtest


Par contre impossible de retrouver l'union ensuite.
Les données de l'autre n'apparaissent dans aucune des deux tables.

Je pensait qu'une nouvelle table avec un nom différent (`users UNION` comme mentionné au dessus) avait peut-être été créé mais non.
Je me suis dit que l'union utilise les deux tables sans les lier physiquement mais quand j'essaye de me connecter avec un des scripts il me dit que l'utilisateur n'existe pas.
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
20 déc. 2017 à 19:07
Je pensait qu'une nouvelle table avec un nom différent (`users UNION` comme mentionné au dessus) avait peut-être été créé mais non.

Non. Ca ne créé pas de table... ni de vue....
Ca exécute simplement une requête qui liste les users de tes deux tables.... rien de plus.

ais quand j'essaye de me connecter avec un des scripts il me dit que l'utilisateur n'existe pas.

Et à quoi ressemble le script ?
Quelle requête lance t-il ?
0
tradezone.fr Messages postés 19 Date d'inscription mardi 15 janvier 2008 Statut Membre Dernière intervention 21 décembre 2017
20 déc. 2017 à 19:37
Le script est visible ici :
http://www.tradezone.fr/modules/Streaming
ci dessous voici le fichier user.php
<?php
if (empty($global['systemRootPath'])) {
$global['systemRootPath'] = '../';
}
require_once $global['systemRootPath'] . 'videos/configuration.php';
require_once $global['systemRootPath'] . 'objects/bootGrid.php';

class User {

private $id;
private $user;
private $name;
private $email;
private $password;
private $isAdmin;
private $canStream;
private $canUpload;
private $status;
private $photoURL;
private $backgroundURL;
private $recoverPass;
private $userGroups = array();

function __construct($id, $user = "", $password = "") {
if (empty($id)) {
// get the user data from user and pass
$this->user = $user;
if ($password !== false) {
$this->password = $password;
} else {
$this->loadFromUser($user);
}
} else {
// get data from id
$this->load($id);
}
}

function getEmail() {
return $this->email;
}

function getUser() {
return $this->user;
}
function getPassword() {
return $this->password;
}
function getCanStream() {
return $this->canStream;
}
function setCanStream($canStream) {
$this->canStream = $canStream;
}
function getCanUpload() {
return $this->canUpload;
}

function setCanUpload($canUpload) {
$this->canUpload = $canUpload;
}


private function load($id) {
$user = self::getUserDb($id);
if (empty($user))
return false;
foreach ($user as $key => $value) {
$this->$key = $value;
}
return true;
}

private function loadFromUser($user) {
$user = self::getUserDbFromUser($user);
if (empty($user))
return false;
foreach ($user as $key => $value) {
$this->$key = $value;
}
return true;
}

function loadSelfUser() {
$this->load($this->getId());
}

static function getId() {
if (self::isLogged()) {
return $_SESSION['user']['id'];
} else {
return false;
}
}

function getBdId() {
return $this->id;
}

static function updateSessionInfo() {
if (self::isLogged()) {
$user = self::getUserDb($_SESSION['user']['id']);
$_SESSION['user'] = $user;
}
}

static function getName() {
if (self::isLogged()) {
return $_SESSION['user']['name'];
} else {
return false;
}
}

static function getUserName() {
if (self::isLogged()) {
return $_SESSION['user']['user'];
} else {
return false;
}
}
/**
  • return an name to identify the user * @return String */ static function getNameIdentification(){ if(self::isLogged()){ if(!empty(self::getName())){ return self::getName(); } if(!empty(self::getMail())){ return self::getMail(); } if(!empty(self::getUserName())){ return self::getUserName(); } } return __("Unknown User"); } /** * return an name to identify the user from database * @return String */ function getNameIdentificationBd(){ if(!empty($this->name)){ return $this->name; } if(!empty($this->email)){ return $this->email; } if(!empty($this->user)){ return $this->user; } return __("Unknown User"); } static function getUserPass() { if (self::isLogged()) { return $_SESSION['user']['password']; } else { return false; } } function _getName(){ return $this->name; } static function getPhoto($id = "") { global $global; if (!empty($id)) { $user = self::findById($id); if (!empty($user)) { $photo = $user['photoURL']; } } elseif (self::isLogged()) { $photo = $_SESSION['user']['photoURL']; } if(!empty($photo) && preg_match("/videos\/userPhoto\/.*/", $photo)){ $photo = $global['webSiteRootURL'].$photo; } if (empty($photo)) { $photo = $global['webSiteRootURL'] . "img/userSilhouette.jpg"; } return $photo; } static function getMail() { if (self::isLogged()) { return $_SESSION['user']['email']; } else { return false; } } function save($updateUserGroups = false) { global $global; if (empty($this->user) || empty($this->password)) { die('Error : ' . __("You need a user and passsword to register")); } if (empty($this->isAdmin)) { $this->isAdmin = "false"; } if (empty($this->canStream)) { $this->canStream = "false"; } if (empty($this->canUpload)) { $this->canUpload = "false"; } if (empty($this->status)) { $this->status = 'a'; } if (!empty($this->id)) { $sql = "UPDATE users SET user = '{$this->user}', password = '{$this->password}', email = '{$this->email}', name = '{$this->name}', isAdmin = {$this->isAdmin},canStream = {$this->canStream},canUpload = {$this->canUpload}, status = '{$this->status}', photoURL = '{$this->photoURL}', backgroundURL = '{$this->backgroundURL}', recoverPass = '{$this->recoverPass}' , modified = now() WHERE id = {$this->id}"; } else { $sql = "INSERT INTO users (user, password, email, name, isAdmin, canStream, canUpload, status,photoURL,recoverPass, created, modified) VALUES ('{$this->user}','{$this->password}','{$this->email}','{$this->name}',{$this->isAdmin}, {$this->canStream}, {$this->canUpload}, '{$this->status}', '{$this->photoURL}', '{$this->recoverPass}', now(), now())"; } //echo $sql; $insert_row = $global['mysqli']->query($sql); if ($insert_row) { if (empty($this->id)) { $id = $global['mysqli']->insert_id; } else { $id = $this->id; } if ($updateUserGroups) { require_once './userGroups.php'; // update the user groups UserGroups::updateUserGroups($id, $this->userGroups); } return $id; } else { die($sql . ' Error : (' . $global['mysqli']->errno . ') ' . $global['mysqli']->error); } } function delete() { if (!self::isAdmin()) { return false; } // cannot delete yourself if (self::getId() === $this->id) { return false; } global $global; if (!empty($this->id)) { $sql = "DELETE FROM users WHERE id = {$this->id}"; } else { return false; } $resp = $global['mysqli']->query($sql); if (empty($resp)) { die('Error : (' . $global['mysqli']->errno . ') ' . $global['mysqli']->error); } return $resp; } function login($noPass = false, $encodedPass=false) { if ($noPass) { $user = $this->find($this->user, false, true); } else { $user = $this->find($this->user, $this->password, true, $encodedPass); } if ($user) { $_SESSION['user'] = $user; $this->setLastLogin($_SESSION['user']['id']); } else { unset($_SESSION['user']); } } private function setLastLogin($user_id) { global $global; if (empty($user_id)) { die('Error : setLastLogin '); } $sql = "UPDATE users SET lastLogin = now(), modified = now() WHERE id = {$user_id}"; return $global['mysqli']->query($sql); } static function logoff() { unset($_SESSION['user']); } static function isLogged() { return !empty($_SESSION['user']); } static function isAdmin() { return !empty($_SESSION['user']['isAdmin']); } static function canStream() { return !empty($_SESSION['user']['isAdmin']) || !empty($_SESSION['user']['canStream']); } function thisUserCanStream() { return !empty($this->isAdmin) || !empty($this->canStream); } private function find($user, $pass, $mustBeactive = false, $encodedPass=false) { global $global; $user = $global['mysqli']->real_escape_string($user); $sql = "SELECT * FROM users WHERE user = '$user' "; if ($mustBeactive) { $sql .= " AND status = 'a' "; } if ($pass !== false) { if (!$encodedPass || $encodedPass === 'false') { $pass = md5($pass); } $sql .= " AND password = '$pass' "; } $sql .= " LIMIT 1"; $res = $global['mysqli']->query($sql); if ($res) { $user = $res->fetch_assoc(); } else { $user = false; } return $user; } static private function findById($id) { global $global; $sql = "SELECT * FROM users WHERE id = '$id' LIMIT 1"; $res = $global['mysqli']->query($sql); if ($res) { $user = $res->fetch_assoc(); } else { $user = false; } return $user; } static private function getUserDb($id) { global $global; $id = intval($id); $sql = "SELECT * FROM users WHERE id = $id LIMIT 1"; $res = $global['mysqli']->query($sql); if ($res) { $user = $res->fetch_assoc(); } else { $user = false; } return $user; } static private function getUserDbFromUser($user) { global $global; $sql = "SELECT * FROM users WHERE user = '$user' LIMIT 1"; $res = $global['mysqli']->query($sql); if ($res) { $user = $res->fetch_assoc(); } else { $user = false; } return $user; } function setUser($user) { $this->user = strip_tags($user); } function setName($name) { $this->name = strip_tags($name); } function setEmail($email) { $this->email = strip_tags($email); } function setPassword($password) { if (!empty($password)) { $this->password = md5($password); } } function setIsAdmin($isAdmin) { if (empty($isAdmin) || $isAdmin === "false") { $isAdmin = "false"; } else { $isAdmin = "true"; } $this->isAdmin = $isAdmin; } function setStatus($status) { $this->status = strip_tags($status); } function getPhotoURL() { return $this->photoURL; } function setPhotoURL($photoURL) { $this->photoURL = strip_tags($photoURL); } static function getAllUsers() { if (!self::isAdmin()) { return false; } //will receive //current=1&rowCount=10&sort[sender]=asc&searchPhrase= global $global; $sql = "SELECT * FROM users WHERE 1=1 "; $sql .= BootGrid::getSqlFromPost(array('name', 'email', 'user')); $res = $global['mysqli']->query($sql); $user = array(); require_once $global['systemRootPath'] . 'objects/userGroups.php'; if ($res) { while ($row = $res->fetch_assoc()) { $row['groups'] = UserGroups::getUserGroups($row['id']); $row['tags'] = self::getTags($row['id']); $user[] = $row; } //$user = $res->fetch_all(MYSQLI_ASSOC); } else { $user = false; die($sql . '\nError : (' . $global['mysqli']->errno . ') ' . $global['mysqli']->error); } return $user; } static function getTotalUsers() { if (!self::isAdmin()) { return false; } //will receive //current=1&rowCount=10&sort[sender]=asc&searchPhrase= global $global; $sql = "SELECT id FROM users WHERE 1=1 "; $sql .= BootGrid::getSqlSearchFromPost(array('name', 'email', 'user')); $res = $global['mysqli']->query($sql); return $res->num_rows; } static function userExists($user) { global $global; $user = $global['mysqli']->real_escape_string($user); $sql = "SELECT * FROM users WHERE user = '$user' LIMIT 1"; $res = $global['mysqli']->query($sql); if ($res->num_rows > 0) { $user = $res->fetch_assoc(); return $user['id']; } else { return false; } } static function createUserIfNotExists($user, $pass, $name, $email, $photoURL, $isAdmin = false) { global $global; $user = $global['mysqli']->real_escape_string($user); if (!$userId = self::userExists($user)) { if (empty($pass)) { $pass = rand(); } $pass = md5($pass); $userObject = new User(0, $user, $pass); $userObject->setEmail($email); $userObject->setName($name); $userObject->setIsAdmin($isAdmin); $userObject->setPhotoURL($photoURL); $userId = $userObject->save(); return $userId; } return false; } function getRecoverPass() { return $this->recoverPass; } function setRecoverPass($recoverPass) { $this->recoverPass = $recoverPass; } static function canUpload() { global $global, $config; if ($config->getAuthCanUploadVideos()) { return self::isLogged(); } if(self::isLogged() && !empty($_SESSION['user']['canUpload'])){ return true; } return self::isAdmin(); } static function canComment() { global $global, $config; if ($config->getAuthCanComment()) { return self::isLogged(); } return self::isAdmin(); } function getUserGroups() { return $this->userGroups; } function setUserGroups($userGroups) { if (is_array($userGroups)) { $this->userGroups = $userGroups; } } function getIsAdmin() { return $this->isAdmin; } function getStatus() { return $this->status; } /** * * @param type $user_id * text * label Default Primary Success Info Warning Danger */ static function getTags($user_id){ $user = new User($user_id); $tags = array(); if ($user->getIsAdmin()) { $obj = new stdClass(); $obj->type = "info"; $obj->text = __("Admin"); $tags[] = $obj; } else { $obj = new stdClass(); $obj->type = "default"; $obj->text = __("Regular User"); $tags[] = $obj; } if ($user->getStatus() == "a") { $obj = new stdClass(); $obj->type = "success"; $obj->text = __("Active"); $tags[] = $obj; } else { $obj = new stdClass(); $obj->type = "danger"; $obj->text = __("Inactive"); $tags[] = $obj; } require_once 'userGroups.php'; $groups = UserGroups::getUserGroups($user_id); foreach ($groups as $value) { $obj = new stdClass(); $obj->type = "warning"; $obj->text = $value['group_name']; $tags[] = $obj; } return $tags; } function getBackgroundURL() { if (empty($this->backgroundURL)) { $this->backgroundURL = "view/img/background.png"; } return $this->backgroundURL; } function setBackgroundURL($backgroundURL) { $this->backgroundURL = strip_tags($backgroundURL); }}
0
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471
20 déc. 2017 à 20:03
pour le moment, tu as deux tables.
tu as probablement des programmes qui travaillent avec chacune de ces tables.
que veux-tu faire avec ces programmes? les remplacer par des programmes qui travailleraient sur la fusion des deux tables?
ou bien veux-tu créer de nouveaux programmes, qui feraient d'autre choses, tout en gardant les anciens programmes?
0
tradezone.fr Messages postés 19 Date d'inscription mardi 15 janvier 2008 Statut Membre Dernière intervention 21 décembre 2017
21 déc. 2017 à 00:29
Merci pour vos réponses.
Je veux que les deux programmes accèdent aux même données utilisateurs pour que les membres du programme 1 n'aient pas à se réinscrire dans le programme 2 et que les inscriptions fonctionnent depuis les deux sites et mette à jour la liste des utilisateurs des deux sites simultanément. Je veux qu'ils utilisent la même table pour les membres, ou que les informations que contient une table soit automatiquement copiée dans l'autre afin qu'ils aient les mêmes membres. Si il peuvent rester connecté d'un programme à l'autre sa serait génial.
0
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471 > tradezone.fr Messages postés 19 Date d'inscription mardi 15 janvier 2008 Statut Membre Dernière intervention 21 décembre 2017
21 déc. 2017 à 00:47
voilà, tu commences à expliquer ce que tu veux réaliser, c'est bien.
jusqu'à quel point es-tu prêt à adapter un des deux sites, ou sans doute les deux, pour réaliser cela?
tu maîtrises parfaitement les programmes des deux sites?
0