IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Création base de donnée et table suivant script


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Février 2014
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2014
    Messages : 145
    Par défaut Création base de donnée et table suivant script
    Bonjour,

    J'ai un formulaire qui envoie des valeurs ( nom_societe ) si le nom_societe porte le meme nom q'une bdd un message d'erreur s'affiche.
    Cependant lorsque la bdd n'existe pas alors la base se crée et des tables se crée également.

    Pour le moment mon script de contrôle de base fonctionne, ainsi que la création de base aussi cependant pour le moment j'ai mis que une table dans mon script mes elle ne se créer pas.

    voici mon début de script

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    <?php
    try
    {
    	$bdd = new PDO('mysql:host=localhost;charset=utf8', 'root', '',
    	array (PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));	
    }
    catch (exception $e)
    {
    	die ('Erreur :'.$e->getMessage ());
    }
     
    if(isset($_POST["inscription"])){
     
     
    $nom_societe = $_POST['nom_societe'];
    $email_societe = $_POST['email_societe'];
    $nom_societe = $_POST['nom_societe'];
     
    }
     
    $stmt = $bdd->prepare('SELECT COUNT(*) FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = ?');
    $stmt->execute(array($_POST['nom_societe']));
    if ($stmt->fetchColumn() == 0) {
     $creationbase = $bdd -> exec('CREATE DATABASE '.$nom_societe.'');		
     $creationtable = $bdd ->exec('
    
     SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
     SET time_zone = "+00:00";
    
    DROP TABLE IF EXISTS '.$nom_societe.'.`ajoute_article`;
    CREATE TABLE IF NOT EXISTS `ajoute_article` (
      `id_employe` int(11) NOT NULL,
      `id_article` int(11) NOT NULL,
      PRIMARY KEY (`id_employe`,`id_article`),
      KEY `FK_Ajoute_article_id_article` (`id_article`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;	
    	');
     
     
     
    } else {
        echo "la bdd existe";
    }
     
    ?>

  2. #2
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 209
    Billets dans le blog
    52
    Par défaut
    Bonjour,

    Je n'arrive pas à voir pour quelle raison tu aurai besoin de créer une base de données par société.

    En suite, il est fort probable que tu tente de créer ta table dans la base de données courante de ta connexion. Ce qui n'est probablement pas la base de données que tu viens de créer.
    TU peux réaliser une requête de vérification par rapport à cela via :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DATABASE() FROM DUAL;

    Logiquement, tu devra réaliser la commande suivante :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    $bdd -> exec('USE '.$nom_societe);

    Comme l'explique la documentation MySQL : 4.3.1 Creating and Selecting a Database

    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  3. #3
    Membre confirmé
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Février 2014
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2014
    Messages : 145
    Par défaut
    Merci pour ta réponse,

    En faite j'ai un formulaire de contact qui permet de crée une base de donnée et des tables si la société n'existe pas.
    Une sorte de base neuve et table neuve pour la société qui s'incrit

    Donc j'ai essayé cela, mais est ce la bonne méthode ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
     
    <?php
    try
    							{
    								$bdd = new PDO('mysql:host=localhost;charset=utf8', 'root', '',
    								array (PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));	
    							}
    							catch (exception $e)
    							{
    								die ('Erreur :'.$e->getMessage ());
    							}
     
    if(isset($_POST["inscription"])){
     
     
    $nom_societe = $_POST['nom_societe'];
    $email_societe = $_POST['email_societe'];
    $nom_societe = $_POST['nom_societe'];
     
    }
     
    $stmt = $bdd->prepare('SELECT COUNT(*) FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = ?');
    $stmt->execute(array($_POST['nom_societe']));
    if ($stmt->fetchColumn() == 0) {
     $creationbase = $bdd -> exec('CREATE DATABASE '.$nom_societe.'');	
    $insertionbase =  $bdd -> exec('USE '.$nom_societe);
     $creationtable = $bdd ->exec('
    
     SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
      SET time_zone = "+00:00";
    
    -- --------------------------------------------------------
    
    --
    -- Structure de la table `ajoute_article`
    --
    
    DROP TABLE IF EXISTS `ajoute_article`;
    CREATE TABLE IF NOT EXISTS `ajoute_article` (
      `id_employe` int(11) NOT NULL,
      `id_article` int(11) NOT NULL,
      PRIMARY KEY (`id_employe`,`id_article`),
      KEY `FK_Ajoute_article_id_article` (`id_article`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    
    -- --------------------------------------------------------
    
    --
    -- Structure de la table `article`
    --
    
    DROP TABLE IF EXISTS `article`;
    CREATE TABLE IF NOT EXISTS `article` (
      `id_article` int(11) NOT NULL AUTO_INCREMENT,
      `code_article` varchar(10) DEFAULT NULL,
      `famille_article` varchar(50) DEFAULT NULL,
      `type_article` varchar(2540) DEFAULT NULL,
      `nom_article` varchar(50) DEFAULT NULL,
      `description_article` text,
      `prix_achat` decimal(25,0) DEFAULT NULL,
      `marge_vente` decimal(10,0) DEFAULT NULL,
      `prix_vente` decimal(25,0) DEFAULT NULL,
      `unite_article` varchar(10) DEFAULT NULL,
      `quantite_article` decimal(10,0) DEFAULT NULL,
      `quantite_achat` decimal(25,0) DEFAULT NULL,
      `fp_article` decimal(10,0) DEFAULT NULL,
      `tva_article` decimal(25,0) DEFAULT NULL,
      `id_famille` int(11) DEFAULT NULL,
      PRIMARY KEY (`id_article`),
      KEY `FK_Article_id_famille` (`id_famille`)
    ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;
    
    -- --------------------------------------------------------
    
    --
    
    
    
    
    
    
    	');
     
     
     
     
    } else {
        echo "la bdd existe";
    }
     
    ?>

  4. #4
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 209
    Billets dans le blog
    52
    Par défaut
    D'un point de vue conception, on va être honnête... C'est tordu.

    Le plus simple/propre serait d'avoir une base de données unique.
    Qui contient :
    Une table société :
    Identifiant unique
    Nom de la société
    (d'autres informations complémentaires)
    Les tables associées aux sociétés :
    Identifiant de la société associée à l'enregistrement
    Informations de ton enregistrement

    Ainsi, tu n'as pas à changer ton schéma de base de donnée ou à passé d'une base de données à une autre. Et lorsque tu travail pour une société spécifique tu n'as qu'à l'indiqué dans le where de tes requête.

    Note : A la limite, tu peux crée une vue par société.

    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  5. #5
    Membre confirmé
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Février 2014
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2014
    Messages : 145
    Par défaut
    mais si je pense différemment.

    Avec une seul base :
    j 'ai une société je rempli les données tous les jours, j'ai une autre société ou je rempli les données de temps en temps.
    une semaine plutard je me rend compte que la société 2 est planté, je restaure les données SQL ( la base unique ), a ce moment la je perd les données de la société 1.

    Tu en pense quoi ?

    Sinon j'ai effectué des tests donc cela fonctionne mais dans mon script de connect.php j'ai ma base mentionné en dur.

    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <?php
     
     
    try
    							{
    								$bdd = new PDO('mysql:host=localhost;dbname=gestion_co;charset=utf8', 'root', '',
    								array (PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));	
    							}
    							catch (exception $e)
    							{
    								die ('Erreur :'.$e->getMessage ());
    							}
     
     
    ?>
    faudrait que le dbname=gestion_co soit dbname=$nom_societe
    Aprés faudrait que je face un contrôle avant de se connecter a une base non ?

    Il faudrait je pense que dans mon script de connexion il y ai un parcour de toutes les bases puis vérifier l'email de l'utilisateur est associé a quel BDD

  6. #6
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 209
    Billets dans le blog
    52
    Par défaut
    Citation Envoyé par micus Voir le message
    Avec une seul base :
    j 'ai une société je rempli les données tous les jours, j'ai une autre société ou je rempli les données de temps en temps.
    une semaine plutard je me rend compte que la société 2 est planté, je restaure les données SQL ( la base unique ), a ce moment la je perd les données de la société 1.

    Tu en pense quoi ?
    J'en pense que si tu perd la base de données de la société 1... Tu risque aussi d'avoir perdu la base de données de la société 2. Sachant qu'elle se trouve sur la même instance MySQL et donc très probablement sur le même disque dur.
    Du coup, cela n'a pas grand intérêt...
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/06/2006, 20h49
  2. Création base de données Oracle sous Winwows
    Par madina dans le forum Oracle
    Réponses: 2
    Dernier message: 19/05/2006, 09h13
  3. créer une base de donnée à partir d'un script
    Par illegalsene dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 26/08/2005, 14h08
  4. création base de données avec easyphp
    Par Battosaiii dans le forum Débuter
    Réponses: 5
    Dernier message: 29/06/2004, 18h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo