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 :

condition pour vérifier si une base de donnée existe et si les tables existent


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Homme Profil pro
    Autre
    Inscrit en
    Mars 2021
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Mars 2021
    Messages : 201
    Points : 92
    Points
    92
    Par défaut condition pour vérifier si une base de donnée existe et si les tables existent
    Bonjour,
    j'ai créé un formulaire(form.php) et à la validation du formulaire une base de donnée et des tables sont créés (traitement PHP) :

    formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <div class="container">
            <h1 class="text-center">Connexion et création base de donnée</h1>
            <form action="traitement.php" method="post">
                <div class="form-group">
                    <label for="hote">Hôte :</label>
                    <input type="text" class="form-control" name="hote">
                    <label for="login">login :</label>
                    <input type="text" class="form-control" name="login">
                    <label for="mdp">Mot de passe :</label>
                    <input type="text" class="form-control" name="mdp">
                </div>
                <input type="submit" class= "btn btn-primary mt-3" value="envoyer">
            </form>
        </div>
    traitement.php (je vous montre le code d'une seule table pour éviter de vous mettre un long code..)
    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
     <?php
            $servername= htmlentities($_POST["hote"]);
                $username= htmlentities($_POST["login"]);
                $password= htmlentities($_POST["mdp"]);
     
                try {
                    $bdd= new PDO("mysql:host=$servername", $username, $password);
                    echo "connexion reussie <br>";
     
                    //creation base de donnée
                    $creationBD ="CREATE DATABASE siterecettes DEFAULT CHARSET=utf8 COLLATE utf8_general_ci;";
                    $bdd->exec($creationBD);
                    echo "base de donnée bien crée";
                    $createTb = "use siterecettes";
                    $bdd->exec($createTb);
     
                    //creation des tables
                    createTableRegions($bdd);
     
     function createTableRegions($bdd) : void {
                    try {
                        $createTab = "CREATE TABLE regions(
                            id_reg Int  Auto_increment  NOT NULL,
                            nom  Varchar(50) NOT NULL,
                            CONSTRAINT region_PK PRIMARY KEY (id_reg)
                       ) ENGINE = InnoDB CHARSET=utf8 COLLATE utf8_general_ci";
                        $bdd->exec($createTab);
                        echo "table region bien crée <br> ";
                    } catch(PDOException $e) {
                        echo $e->getMessage();
                    }   
                }
    :
    Je souhaiterais que à la validation du formulaire il y ait une vérification pour contrôler si la base et les tables existent déjà : je pensais entourer tout mon code avec un
    SI(base et table n'existent pas) Alors
    création
    SINON :
    echo "votre base et tables ont déjà été créés"

    Je suis débutant, j'ai fait quelques recherches sur internet pour trouver une solution mais rien trouvé..
    Merci pour votre aide précieux
    Bon dimanche

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    dans les requetes de création, vous pouvez utiliser IF NOT EXISTS pour ne pas avoir de message d'erreur quand elles existent :
    https://dev.mysql.com/doc/refman/8.0...-database.html
    https://dev.mysql.com/doc/refman/8.0...ate-table.html

    ou alors si vous avez besoin de l'information d'existence, vous pouvez essayer des requetes SHOW :
    https://dev.mysql.com/doc/refman/8.0...databases.html
    https://dev.mysql.com/doc/refman/8.0...ow-tables.html

  3. #3
    Membre régulier
    Homme Profil pro
    Autre
    Inscrit en
    Mars 2021
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Mars 2021
    Messages : 201
    Points : 92
    Points
    92
    Par défaut
    Si je comprends bien je dois insérer IF NOT EXISTS à la création de la base, et de toutes les tables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
                    $creationBD ="CREATE DATABASE IF NOT EXISTS siterecettes DEFAULT CHARSET=utf8 COLLATE utf8_general_ci;";
                    $bdd->exec($creationBD);
                    echo "base de donnée bien crée";
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    unction createTableRegions($bdd) : void {
                    try {
                        $createTab = "CREATE TABLE IF NOT EXISTS regions(
                            id_reg Int  Auto_increment  NOT NULL,
                            nom  Varchar(50) NOT NULL,
                            CONSTRAINT region_PK PRIMARY KEY (id_reg)
                       ) ENGINE = InnoDB CHARSET=utf8 COLLATE utf8_general_ci";
                        $bdd->exec($createTab);
                        echo "table region bien crée <br> ";
                    } catch(PDOException $e) {
                        echo $e->getMessage();
                    }   
                }
    j'ai une question pour que je comprenne bien : Si on essaye de recréer une base et des tables existants, quel est le risque? est-ce que les tables existants risquent d'être écrasées avec la perte des valeurs ?

    j'ai aussi une autre question :
    lors de la création de mes tables parfois j'ai fait des erreurs(oubli de virgule etc..) mais lors de la validation du formulaire aucun erreur étais signalé et j'avais "table région bien crée", pourtant la table ne se créait pas. Normalement le try catch ne signale pas les erreurs de requête ?
    Merci pour votre aide

  4. #4
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 098
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 098
    Points : 8 207
    Points
    8 207
    Billets dans le blog
    17
    Par défaut
    Si on essaye de recréer une base et des tables existants, quel est le risque?
    Aucun, car si la base existe déjà rien n'est fait.

    est-ce que les tables existants risquent d'être écrasées avec la perte des valeurs ?
    Non, rien ne change si la table existe déjà.

    j'ai aussi une autre question :
    lors de la création de mes tables parfois j'ai fait des erreurs(oubli de virgule etc..) mais lors de la validation du formulaire aucun erreur étais signalé et j'avais "table région bien crée", pourtant la table ne se créait pas. Normalement le try catch ne signale pas les erreurs de requête ?
    Il faut vérifier le mode de levée d'erreur PDO. Par défaut c'est PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING
    Voir les options de PDO::__construct() ou PDO::setAttribute() pour passer en PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  5. #5
    Membre régulier
    Homme Profil pro
    Autre
    Inscrit en
    Mars 2021
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Mars 2021
    Messages : 201
    Points : 92
    Points
    92
    Par défaut
    Bonsoir,
    Merci beaucoup pour vos réponses et vos explications.
    Bonne soirée

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 134
    Points : 38 555
    Points
    38 555
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    En général le SQL de type DDL, c'est à dire celui qui permet de créer (CREATE), modifier (ALTER) ou supprimer (DROP) les objets base de données, n'est pas exécuté depuis un programme applicatif. En effet, le DDL requiert des droits particuliers différents de ceux du DML.
    C'est pourquoi le DDL est plutôt exécuté depuis des scripts lancés avec un login disposant des droits nécessaires.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Image pour supprimer dans une base de données
    Par fabpeden dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 18/07/2007, 15h21
  2. créer une boulce pour lire dans une base de donnéé MySQL
    Par pierrot10 dans le forum Administration
    Réponses: 1
    Dernier message: 26/07/2006, 14h21
  3. Réponses: 1
    Dernier message: 17/05/2006, 15h27
  4. Réponses: 4
    Dernier message: 18/01/2006, 21h30

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