Script SQL : Générer une table à partir d'un formulaire

En phase de développement on peut être amené à redéfinir une table, modifier les colonnes et corrélativement, modifier le formulaire qui permet d'entrer des données et de créer des lignes pour cette table.

Pourquoi ne pas générer la table directement à partir du formulaire? Cela diviserait la tâche par 2.

Ce script convient dans les cas suivants:

Principe

Le script aura les composants suivants:

Le nom de la table sera passé par un objet input caché. Le script ajoutera un préfixe éventuellement défini dans le fichier de configuration.

<input type="hidden" name="tablename" value="userlist">

Les attributs name des élément input du formulaire contiendront des noms qui seront aussi les noms des colonnes.

Durant la phase de développement l'attribut "action" du formulaire appelle le script de création. Par la suite on remplace le nom du script par le script qui traite les données entrées par l'utilisateur.

<form name="users" action="form2php.php">

deviendra:

<form name="users" action="monscript.php"> 

Exemple

Un formulaire simple pour entrer un pseudo et une adresse email.

Nom:

Email:

Le code HTML

<form name="users" method="post" action="form2php.php">
   <input type="hidden" name="tablename" value="userlist">
<p>Nom <input type="text" name="name" maxlength=32></p>
<p>Email <input type="text" name="email" maxlength=64></p> <input type="submit" value="Submit">
</form>

La table SQL à générer

La table s'appelle userlist ou prefixe_userlist.

name email
   

Le code JavaScript

Il définit les largeurs de colonnes en reprenant le nombre maximal de caractères des champs d'entrée de texte:

function setsizes()
{
var it = document.getElementsByTagName("input");
for(var i = 0; i < it.length; i++)
{
var element = it.item(i);
var len = element.maxLength;
if(len > 0)
{
element.value = new String(len);
}
}
}

La longueur maximale, assignée à maxlength (maxLength en JavaScript) est transmise à l'attribut value pour être passée avec les données de formulaire.

Pour simplifier on suppose qu'il n'y a qu'un seul formulaire dans la page.

Le code PHP

Le script doit parcourir le DOM pour récupérer tous les objets de formulaire, en faire une liste à partir de laquelle il construit une commande SQL de création de table.

<?php
include("config.php");
$hnd = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME)
or die("MySQL database '".DB_NAME."' not accessible.<br>");
mysqli_select_db($hnd, DB_NAME)
or die("Enable to select ".DB_NAME." database<br>");
$tablename = $table_prefix.$_POST['tablename'];
$query = "CREATE TABLE $tablename(";
$flag = false;
foreach($_POST as $name => $value)
{
if($name == "Submit") continue;
if($name == "tablename") continue;
if($flag) $query .= ",";
$query .= "$name varchar($value) ";
if($name == "ID") $name .= " PRIMARY NOT NULL";
else
if($name == 'name') $name .= " NOT NULL";
$flag = true;
}
$query.=")";
mysqli_query($hnd, "DROP TABLE $tablename");
$x = mysqli_query($hnd, $query);
if($x == false)
{
echo "Error, ", mysql_error(), "<br>";
}
?>

C'est un code de base qui doit au besoin être adapté. Le type de colonnes peut varier, des qualités peuvent être ajoutées.

Télécharger le code complet