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 d'une BDD


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 265
    Points : 20
    Points
    20
    Par défaut Création d'une BDD
    Je crée une application WEB qui permet de créer une BDD sur un poste défini (je demande le nom de la BDD, l'utilisateur, l'IP et le mots de passe), sur ces PCs on a évidement des serveurs MySQL qui tournent ...
    Pour l'instant lorsque je crée une BDD je ne vérifie pas si elle existe déjà, j'aimerai qu'il y ait une vérification et que si elle existe déjà on renvoie l'utilisateur vers la page de demande de création.
    Voilà le code de création des BDD :
    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
    // Creation de la BDD //
    mysql_connect("$ip_bdd2","$util_bdd2","$psw_bdd2");
    $sql = "create database ".$_POST['nom_bdd']."" ;
    $sql = mysql_query($sql); 
    $sql3 = "use ".$_POST['nom_bdd']."";
    $sql3 = mysql_query($sql3); 
    // Importation de la BDD générique // 
    $commande = "C:\MySQLServer\bin\mysql -h ".$_POST['ip_bdd']." -u ".$_POST['util_bdd']." -p".$_POST['psw_bdd']." ".$_POST['nom_bdd']." < C:\BDD_generique.sql";
    $CR_exec = shell_exec($commande);
     
     
     
     
     if($commande)
      {
        	 include('menu_creation_2.php');
     
      }
      else
      {
        echo("La création &agrave; &eacute;chou&eacute;e.") ;
    	 include('menu_creation.php');
      }

  2. #2
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Pour l'instant lorsque je crée une BDD je ne vérifie pas si elle existe déjà, j'aimerai qu'il y ait une vérification et que si elle existe déjà
    Consulte la doc de Php (http://fr2.php.net), les réponses s'y trouvent bien souvent.

    Pour exemple, la fonction mysql_connect() renvoie une ressource, cependant, la doc dit ceci :
    Citation Envoyé par Doc Php
    Valeurs de retour
    Retourne l'identifiant de connexion MySQL en cas de succès ou FALSE si une erreur survient.
    Donc la valeur de retour pour cette fonction mysql_connect() te dira si la connexion au serveur MySQL à réussi ou pas.

    Il existe aussi la fonction is_resource() pour par exemple s'assurer que cette valeur de retour est réellement une ressource ou pas.

    Mais encore, il y a la fonction mysql_select_db($nom_de_la_bdd, $rlink_identifier) : valeur de retour un booléen
    qui va te permettre de savoir si la base de donnée passée en paramètre existe ou pas pour le serveur MySQL en question (celui qu'on vient de réussir à faire une connexion).


    La liste des -> fonctions MySQL


    Au passage, il serait bon de te pencher sur MySQLi ou PDO, car les fonctions mysql_truc_bibule commence sérieusement à prendre de la bouteille.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 265
    Points : 20
    Points
    20
    Par défaut
    Oui mais je sélectionne pas de BDD, la 1ère étape pour l'instant c'est la création d'une BDD avec le nom donnée par l'utilisateur (après la connexion au serveur SQL bien sur ...), je voudrai un moyen de tester l'existence de la BDD avant de la créer (car pour l'instant si elle existe et on retape le même nom l'ancienne est écrasée !).
    Merci;

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Citation Envoyé par RunCodePhp Voir le message
    Mais encore, il y a la fonction mysql_select_db($nom_de_la_bdd, $rlink_identifier) : valeur de retour un booléen qui va te permettre de savoir si la base de donnée passée en paramètre existe ou pas pour le serveur MySQL en question (celui qu'on vient de réussir à faire une connexion).
    En gros, tu essayes de te connecter à la base. Si ça réussit, c'est que la base existe déjà et donc que tu ne peux pas la recréer.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  5. #5
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 227
    Points
    20 227
    Par défaut
    Ou sinon on peut rajouter IF NOT EXISTS à un create database.

    http://dev.mysql.com/doc/refman/5.0/...-database.html

    Mais chez moi (et d'après la doc) un create database d'une base existante retourne une erreur.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 265
    Points : 20
    Points
    20
    Par défaut
    Merci pour vos réponses ...
    Au fait, si la BDD existe je dois renvoyer l'utilisateur au formulaire initial (@IP serveur SQL, utilisateur, mots de passe et nom de la BDD). Pour l'instant je ne gère pas ça, donc si une BDD existe et que je mets le même nom celle ci est écrasée (avec CREATE DATABASE).

  7. #7
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 227
    Points
    20 227
    Par défaut
    si une BDD existe et que je mets le même nom celle ci est écrasée (avec CREATE DATABASE).
    C'est pas ce que dit la doc et c'est pas ce qui se passe quand je teste.

    Si une base existe , mysql_query me retourne false avec l'erreur
    Can't create database xxx; database exists
    Tu as sans doute un problème de configuration de mysql puisque c'est le comportement par défaut.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 265
    Points : 20
    Points
    20
    Par défaut
    Sinon il n'y a pas moyen de tester moi même l'existance d'une BDD avec mon script (Message n°1). Ensuite je renvoie vers la page de création de BDD (formulaire ...) si une BDD existe, sinon elle on la crée. Je pense que le seul moyen serait de lister les bases du serveur MySQL (requête) et de comparer le nom tapé par l'utilisateur avec les noms des bdd, parcontre je sais pas trop comment m'y prendre

  9. #9
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Sinon il n'y a pas moyen de tester moi même l'existance d'une BDD avec mon script (Message n°1).
    Je t'ai déjà donnée une solution pour ça, à quoi bon poser la même question n fois ?
    1/ On tente d'abord de faire une connexion au serveur MySQL (tu dois obligatoirement avoir les infos pour ça, sinon il sera de toute manière impossible de créer une Bdd).
    2/ On tente de sélectionner la Base De Donnée du serveur MySQL où on vient de réussir la connexion.

    Ca s'arrête à exploiter les valeurs de retours des 2 fonctions : mysql_connect(), mysql_select_db().

    De plus, on vient de te dire que si on tente de créer (je dirais écraser) une base de données déjà existante sans aucune précaution, ça génèrera une erreur.
    On peu toujours exploiter cette erreur afin de savoir que finalement la Bdd existe déjà.

    Mais encore, on te dit aussi qu'il est possible de tenter de créer une Bdd à la condition quelle n'existe pas déjà (IF NOT EXISTS à rajouter dans la requête SQL)

    Pour ma part tu dispose de tout ce qu'il faut pour ce faire.
    Je ne vois pas où est le problème.


    Question à tout hasard, as tu essayé ?
    (On dirait que tu suppose que ... sans avoir fait d'essai).


    Ensuite je renvoie vers la page de création de BDD (formulaire ...) si une BDD existe, sinon elle on la crée
    C'est pas l'inverse ?
    -> Ce ne serait que SI la Bdd n'existe pas où on renverrait vers le formulaire afin d'obtenir le nom de la future Bdd à créer.


    Par ailleurs, on est bien d'accord que le serveur MySQL c'est une chose, et le ou les Bdd faisant partie en est une autre (d'où les 2 fonctions en question vu au début) ?
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  10. #10
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Autre suggestion comme ça, à tout hasard si cela est possible de ton coté.

    Vu qu'il y aurait une sorte de gestion de bases de données, on peu envisager de créer une Base Maitre (master) qui elle contiendrait les infos de toutes les autres Bdd Esclaves.

    Ceci peu permettre par exemple de lister toutes les Bdd Escaves sans devoir se connecteur à ces Bdd esclaves en question, suffit pour ça de se connecter à la Bdd Maitre et récupérer tous les infos.
    Rien empêche par exemple de rajouter un statut à chaque Bdd esclave (en service, hors service, date de création, etc, etc ...).

    Il va de soit qu'à chaque opération sur ces Bdd Esclaves (surtout la création, suppression) il faudra mettre à jour la Bdd Maitre.

    Ca n'est qu'une suggestion.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  11. #11
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 265
    Points : 20
    Points
    20
    Par défaut
    J'ai pas d'erreurs générés je t'assure lorsque la BDD est déjà existante et que j'en crée une autre (il y a bien un effacement des données de la BDD, c'est ce que j'appelle écrasement ).

  12. #12
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    J'ai pas d'erreurs générés je t'assure lorsque la BDD est déjà existante et que j'en crée une autre


    Très franchement, c'est extrêmement rare que je tente de créer dynamiquement (Php/SQL) des bases de données, la dernière fois ça remonte à ... je ne sais plus (donc il y a longtemps).

    Je pencherais aussi sur ce qu'a dit Grunk, il doit avoir un problème de config par là.
    Regarde du coté de la gestion des erreur coté de Php ou/et de MySQL, à tout hasard.

    Ce type de fonctionnement est trop permissif, il ne doit pas être possible d'écraser une Bdd comme ça.

    J'espère juste que cela n'est pas lier au driver MySQL (celui correspondant aux fonctions mysql_truc_machin), car si mes souvenir sont bon, avec PDO j'obtenais systématiquement une erreur.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  13. #13
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 032
    Points
    34 032
    Billets dans le blog
    14
    Par défaut
    Très franchement, c'est extrêmement rare que je tente de créer dynamiquement (Php/SQL) des bases de données
    +1

    Sauf cas rares, une application n'a pas à créer des bases de données ; même pas des tables !
    La structure de données pré-existe à l'application et l'application ne fait qu'utiliser la ou les bases de données existantes.

    En plus, pour faire ça, il faut un privilège élevé sur le SGBD, ce qui veut probablement dire dans le cas présent que l'utilisateur de l'application est root, ce qui n'est absolument pas sécurisé.

    Pourquoi voulez-vous faire créer des bases de données sur des serveurs distants par une application ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  14. #14
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 265
    Points : 20
    Points
    20
    Par défaut
    Les BDD sont crées sur les PCs clients (j'ai monter un site WEB sous Apache) sur tous les PCs clients on peut avoir des BDD à créer (pour des mesures ...) on m'a donc demander de simplifier la création et le remplissage de BDD, cepandant avec ce script là je ne gère pas le cas où une BDD existe déjà sur le PC client.

  15. #15
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 032
    Points
    34 032
    Billets dans le blog
    14
    Par défaut
    Je ne vois toujours pas ce qui peut justifier la création de BDD sur des postes clients mais bon...

    Pour tester si la BDD existe déjà sur le poste client, plusieurs méthodes ont déjà été données. J'en donne une de plus : se connecter au poste client et faire une requête sur information_schema.SCHEMATA :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT COUNT(*) AS existe_bdd
    FROM information_schema.SCHEMATA
    WHERE SCHEMA_NAME = 'nom_de_la_bdd'
    Si existe_bdd est égal à 1, la BDD existe déjà, si c'est 0, elle n'existe pas encore.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  16. #16
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 265
    Points : 20
    Points
    20
    Par défaut
    Je mets la requête dans la variable test, pour le test de création j'utilise $test ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $test = "SELECT COUNT(*) AS existe_bdd
    FROM information_schema.SCHEMATA
    WHERE SCHEMA_NAME = ".$_POST['nom_bdd']."";

  17. #17
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 032
    Points
    34 032
    Billets dans le blog
    14
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $test = "SELECT COUNT(*) AS existe_bdd
    FROM information_schema.SCHEMATA
    WHERE SCHEMA_NAME = ".$_POST['nom_bdd']."";
    Euh... méfie toi des guillemets et des apostrophes !

    En SQL, les valeurs textuelles s'entourent d'apostrophes.

    Pour bien écrire ta requête, indente correctement le code, tu verras plus facilement les erreurs éventuelles :
    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
    $test = "
    	SELECT COUNT(*) AS existe_bdd
    	FROM information_schema.SCHEMATA
    	WHERE SCHEMA_NAME = '".mysql_real_escape_string($_POST['nom_bdd'])."'
    ";
    $result = mysql_query($test) or die('Erreur : '.mysql_error().'<br />Requête :<br />'.$test);
     
    $row = mysql_fetch_array($result);
     
    if($row['existe_bdd'])
    {
    	// la BDD existe déjà !
    }
    else
    {
    	// la BDD n'existe pas encore
    }
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  18. #18
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 265
    Points : 20
    Points
    20
    Par défaut
    OK, merci beaucoup je vais tester ça !

Discussions similaires

  1. [phpMyAdmin] Probléme de création d'une BDD
    Par keizer dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 8
    Dernier message: 11/09/2007, 20h24
  2. Questions sur la création d'une BDD en SQL (débutant)
    Par CleeM dans le forum Langage SQL
    Réponses: 10
    Dernier message: 14/06/2007, 15h14
  3. [PostgreSQL] [PostGreSQL] Création d'une bdd avec PHP
    Par damien150 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 09/03/2007, 16h13
  4. [Oracle10gR2] ORA-00604 lors de la création d'une BDD
    Par Darkdaemons dans le forum Oracle
    Réponses: 9
    Dernier message: 07/11/2006, 10h22
  5. Aide sur la création d'une bdd sous MySQL
    Par Shellai-93 dans le forum Débuter
    Réponses: 20
    Dernier message: 18/08/2006, 11h15

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