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éer une table mySQL automatiquement via un form


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2013
    Messages : 23
    Points : 22
    Points
    22
    Par défaut Créer une table mySQL automatiquement via un form
    Bonjour,

    comment générer automatiquement une table mySQL via le formulaire ci-dessous :
    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
    	<form name="mySQL_table" id="mySQL_table">
    	<fieldset>
    		<legend>Create MySQL table</legend>
    			<div style="display:block; height:100px;">
    				<label>Nom de la table</label> <input type="text" name="name_table" id="name_table" value="" class="width300" required />  Ajouter <input type="number" name="numColumn" id="numColumn" value="1" class="width80" /> colonne(s) <button type="button" id="btn_addColumn">Exécuter</button>
    			</div>
     
    			<div style="display:block">
    					<table id="table_create" width="95%">
    						<tr>
    							<th width="20%">Nom</th>
    							<th width="20%">Type</th>
    							<th width="10%">Taille/valeurs</th>
    							<th width="10%">Defaut</th>
    							<th width="10%">Interclassement</th>
    							<th width="10%">Attributs</th>
    							<th width="5%">Null</th>
    							<th width="5%px">Index</th>
    							<th width="5%">A_I</th>
    							<th width="5%"></th>
    						</tr>
     
    						<tr>
    							<td>
    								<input type="text" name="name_column[]" class="name_column" value="" class="width400" required />
    							</td>
    							<td>
    								<select name="type[]" class="type width200">
    									<option value="INT">INT</option>	
    									<option value="TINYINT">TINYINT</option>	
    									<option value="VARCHAR">VARCHAR</option>	
    									<option value="CHAR">CHAR</option>	
    									<option value="TEXT">TEXT</option>	
    									<option value="DATE">DATE</option>	
    									<option value="DECIMAL">DECIMAL</option>	
    									<option value="FLOAT">FLOAT</option>	
    								</select>
    							</td>
     
    							<td>
    								<input type="number" name="size[]" value="" class="size width80" required / >
    							</td>
     
    							<td>
    								<select name="defaut[]" class="defaut width150">
    									<option value="Aucune">Aucune</option>	
    								</select>
    							</td>
     
    							<td>
    								<select name="interclassement[]" class="interclassement width200">
    									<option value="utf8_general_ci">utf8_general_ci</option>	
    								</select>
    							</td>
     
    							<td>
    								<select name="attributs[]" class="attributs width200">
    									<option value="BINARY">BINARY</option>	
    									<option value="UNSIGNED" selected>UNSIGNED</option>	
    									<option value="UNSIGNED_ZEROFIL">UNSIGNED ZEROFIL</option>	
    									<option value="CURRENT_TIMESTAMP">on update CURRENT_TIMESTAMP</option>	
    								</select>
    							</td>
     
    							<td>
    								<input type="checkbox" name="null[]" class="null" value="NOT NULL" />
    							</td>
     
    							<td>
    								<select name="index[]" class="index width150">
    									<option value="0">...</option>
    									<option value="PRIMARY KEY">PRIMAIRE</option>	
    									<option value="UNIQUE">UNIQUE</option>	
    									<option value="INDEX">INDEX</option>	
    									<option value="FULLTEXT">FULLTEXT</option>	
    								</select>
    							</td>
     
    							<td>
    								<input type="checkbox" name="A_I[]" class="A_I" value="AUTO_INCREMENT" />
    							</td>
     
    							<td></td>
     
    						</tr>
     
    					</table>
    				</form>
    Dans la page process.php, je récupère les variables postées :
    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
    	if(!empty( $_POST["name_column"] )) {
    		foreach($_POST['name_column'] as $name_column) {
              //echo "<p>name_column : ".$name_column."</p>";
    		}
     
    		//---------------------
    		//format 
    		//---------------------
    		$name_column = implode(",", $_POST["name_column"]);
    		echo "name_column => : ".$name_column."</br>";
     
    	}
    	else{
    		$name_column = "";	
    	}
    mais comment compiler les colonnes afin d'obtenir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql = "CREATE TABLE IF NOT EXISTS ".$table_name."(
    		".$_POST['name_column']." "..$_POST['type']."(".$_POST['size.") ...,
    		PRIMARY KEY (ID) )";"
    Merci d'avance;

  2. #2
    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 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    POURQUOI l'application que vous développez a t-elle besoin de créer des tables ?

    Dans l'écrasante majorité des cas, une application doit utiliser une base de données mais ne doit pas piloter la structure de cette base.

    Normalement, quand on crée une application, on doit commencer par modéliser les données, ce qui déterminera la structure de la BDD. Ensuite, on modélise l'application qui interrogera la BDD, y enregistrera des données, les mettra à jour... Mais en principe, une application n'a pas à créer des tables dans la BDD.
    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 !

  3. #3
    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
    Le seul cas que je vois où une application peut créer des tables, c'est une application de gestion de base de données, comme PhpMyAdmin. Si ce n'est pas ce que tu cherches à faire, il faut effectivement se poser la question de pourquoi ton application doit-elle créer des tables.

    Maintenant, si tu veux vraiment créer une table, ça fonctionne pareil que pour interroger la base : il faut construire la requête à partir des données du formulaire, puis l'exécuter.
    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]

  4. #4
    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 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Le seul cas que je vois où une application peut créer des tables, c'est une application de gestion de base de données, comme PhpMyAdmin.
    Pas seulement, mais ça reste rare.

    Je suis arrivé dans le monde PHP/MySQL en travaillant pour l'INRA sur une application de statistiques dont les résultats étaient présentés sur une carte de France.
    L'application permettait de charger en BDD des données externes à étudier et créait donc des tables correspondant à la structure du CSV importé. Puis un système de métadonnées permettait d'interroger ces tables pour faire les études statistiques.

    Ensuite, il y a les CMS qui créent des tables pour les vues ou formulaires que tu crées dans le CMS mais c'est fait selon un modèle standard pour le CMS ; ce n'est pas l'utilisateur qui dit spécifiquement qu'il veut la création de telle table avec telles colonnes de tel type.

    Le cas présenté ici ressemble en effet furieusement à un logiciel de gestion de BDD comme phpMyAdmin. Bon courage !
    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 !

  5. #5
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2013
    Messages : 23
    Points : 22
    Points
    22
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    POURQUOI l'application que vous développez a t-elle besoin de créer des tables ?

    Dans l'écrasante majorité des cas, une application doit utiliser une base de données mais ne doit pas piloter la structure de cette base.

    Normalement, quand on crée une application, on doit commencer par modéliser les données, ce qui déterminera la structure de la BDD. Ensuite, on modélise l'application qui interrogera la BDD, y enregistrera des données, les mettra à jour... Mais en principe, une application n'a pas à créer des tables dans la BDD.

    Bonjour er merci pour votre réponse,

    Je suis d'accord avec vous à 200%.

    Dans la pratique je développe de la manière suivante :
    1. Création de la table via phpmyadmin.
    2. Edition du formulaire reprenant tous les champs de la table.


    Ce travail peut s'avérer fastidieux lorsque qu'on a de nombreux forms à éditer manuellement.
    J'ai donc pensé à automatiser la création de mes forms.
    En automatisant le création de la table mySQL, je peux aussi automatiser la création des éléments du form (leur nom, type, attribut,.. ) qui seront enregistrés dynamiquement dans une autre table.
    Ainsi, adieu l'écriture manuelle des forms.

    Il existe peut-être une autre méthode à laquelle je n'ai pas pensé, mais pour le moment, j'ai en tête cette solution (peu conventionnelle).
    Si vous avez une autre soluss, merci de m'éclairer

    Joce.

  6. #6
    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 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Euh... là je ne comprends pas !

    Vous avez un outil plutôt bien foutu nommé phpMyAdmin qui vous permet de créer des tables, les modifier, mettre des données dedans, les modifier... et vous voulez faire grosso-modo la même chose ?
    ÇA SERT À QUOI ? !!

    Dans la pratique je développe de la manière suivante :

    Création de la table via phpmyadmin.
    Edition du formulaire reprenant tous les champs de la table.
    Avant le 1, vous avez oublié :
    - établissement d'un cahier des charges du domaine à développer ;
    - écriture des règles de gestion des données ;
    - réalisation du MCD ;
    - déclinaison en MLD puis en script SQL permettant de créer la BDD d'un seul coup.

    Et du coup, vous donnez le script SQL à manger à phpMyAdmin et la BDD se construit toute seule. Si vous avez correctement fait la phase de conception, vous avez une BDD qui tient la route et que vous n'aurez besoin de modifier que si les spécifications du domaine changent.

    Et vous avez aussi un autre outil plutôt bien foutu nommé MySQL Workbench qui vous permet de dessiner un "Entity/Relationship Diagram", proche d'un MLD et qui peut se connecter à la base de données MySQL pour générer automatiquement la BDD.

    Mais si vous n'avez encore jamais fait de modélisation, commencez par le MCD, c'est plus sûr.


    Là vous réinventez la roue pour laisser à l'utilisateur la possibilité de faire n'importe quoi dans votre base de données !

    Du coup, si vous êtes 200% d'accord avec moi, POURQUOI faites-vous ça ? !!!
    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 !

  7. #7
    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
    Mouais, bof. La génération automatique de formulaire c'est bien en théorie, mais en pratique, on a rarement besoin d'un simple formulaire qui reflète bêtement la base.
    Il faut ajouter les validations de format (pour un email par exemple) et les contrôles de cohérence (si on a deux champs date_debut et date_fin, ce serait sans doute une bonne idée de vérifier que la date de fin est supérieure à la date de début), sans compter l'alimentation des colonnes qui sont des références vers d'autres tables...
    Et ensuite il y a toute la partie d'accès à la table pour lire les données dans le cas d'un formulaire de modification et les enregistrer après la validation.

    Cela dit, tu peux faire un script de création de formulaire qui fonctionnerait sensiblement comme ce que tu décris, mais au lieu de créer la table, le script lirait la structure de la table en base.

    Ou alors tu peux te tourner vers un framework ou un utilitaire qui fait ça pour toi.
    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]

Discussions similaires

  1. remplir un combobox via une table mysql
    Par zOoOm_10 dans le forum VB.NET
    Réponses: 6
    Dernier message: 10/03/2010, 16h39
  2. [MySQL] afficher un champ d'une table mysql sous form d'un menu combobox
    Par belakhdarbts10 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 15/05/2007, 11h29
  3. Réponses: 2
    Dernier message: 15/12/2006, 10h31
  4. Modifier une table MySQL via un lien
    Par Hayabusa dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 08/02/2006, 22h51
  5. Réponses: 4
    Dernier message: 26/08/2004, 08h01

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