Fonctions de mise à jour SQL

Dans la lignée des fonctions de manipulation SQL que j'avais publiées il y a un moment, voici une série de fonctions permettant la mise à jour de données dans une base de données SQL : ajout, mise à jour, suppression.

sql_insert

/**
 * Créé la requete d'insertion
 */
function sql_insert( $table, $record ) {

    $fields = join(', ', array_keys($record));
    $values = join(', ', array_map('sql_add_quotes', array_values($record)));
    return 'insert into '.$table.' ('.$fields.') values ('.$values.');';

} // end of 'sql_insert()'

sql_update

/**
 * Créé la requete de modification
 */
function sql_update( $table, $record, $key ) {

    $fields     = array_keys($record);
    $values     = array_map('sql_add_quotes', array_values($record));
    for ( $i = 0, $count = count($record), $updates = array(); $i < $count; $i++ ) {
        if ( $key == $fields[$i] ) continue;
        $updates[] = $fields[$i].' = '.$values[$i];
    }
    return 'update '.$table.' set '.join(', ', $updates).' where '.$key.' = \''.$record[$key].'\';';

} // end of 'sql_update()'

sql_delete

/**
 * Créé la requete de suppression
 */
function sql_delete( $table, $record, $key ) {

    return 'delete from '.$table.' where '.$key.' = \''.$record[$key].'\';';

} // end of 'sql_delete()'

sql_add_quotes

/**
 * Entoure une valeur par des guillemets simples
 */
function sql_add_quotes( $element ) {

    return "'".( ( get_magic_quotes_gpc() == 0 ) 
        ? addslashes($element)
        : $element )."'";

} // end of 'sql_add_quotes()'

Exemple

L'exemple le plus parlant pourrait être la mise à jour de données via un formulaire ; avec un formulaire dont les champs sont nommés de manière intelligente, on peut ainsi enregistrer les données en un minimum de code.

Soit le formulaire suivant (mise à jour d'une fiche contact) :

<form action="#" method="post">
<input type="hidden" name="data[id]" value="1" />

<input type="text" name="data[nom]" value="Duret" />
<input type="text" name="data[prenom]" value="David" />
<input type="text" name="data[email]" value="david@example.com" />

<input type="submit" value="Enregistrer les modifications" />
</form>

Dans le fichier de traitement, on peut écrire de manière très simple le code suivant :

// Récupération des données en provenance du formulaire
$action = $_POST['action'];
$data = $_POST['data'];

// Mise à jour des données dans la table "contacts"
$sql = sql_update('contacts', $data, 'id');

Il n'y a plus qu'à exécuter la requête pour l'enregistrement (fonction native du SGBDR que vous utilisez, utilisation d'une couche d'abstraction, vous avez le choix).

On peut même pousser la simplification à l'extrême en passant l'action à effectuer dans un champ caché du formulaire du type <input type="hidden" name="action" value="update" /> et à faire la chose suivante :

$action     = $_POST['action'];
$data       = $_POST['data'];

$funcName   = 'sql_'.$action;
$sql        = $funcName('contacts', $data, 'id');       

Remarque : dans tous les cas, il ne faut pas oublier de vérifier la validité des données insérées avant pour éviter un éventuel piratage mais ça il s'agit d'un autre sujet.

Posté le Tuesday 21 November 2006 dans , .

Commentaires

Ajouter un commentaire

Il n'est plus possible de réagir à cette entrée directement mais si vous pensez que votre intervention peut être intéressante, envoyez-moi votre commentaire, je l'ajouterai ici en votre nom.