Cette page vous permet de nous contacter au sujet de notre politique de confidentialité.
[insert_php]
/**
* \project Simply adaptable form
* \brief This PHP code can be easily adapt for simple form connected with MySQL BD
* \version 1.0.1
* \author Valérie Bellynck
* \author uri http://tiprof.fr
* \domain adaptablePHPform
*
* Copyright 2017-2018 Valérie Bellynck (email : t.bidon@live.fr)
*
* This file is part of « adaptablePHPform ».
*
* « adaptablePHPform » is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* « adaptablePHPform » is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with « adaptablePHPform ». If not, see
*
*/
[/insert_php]
[insert_php]
/**
* \enum DEBUG
* \brief Constante définie (ou pas) pour activer des affichages de trace pendant le débogage.
*/
define(‘DEBUG’, »);
//define(‘DEBUG’,’test’);
//define(‘DEBUG’,’mysql’);
//define(‘DEBUG’,’export’);
/**
* === Adaptation de la configuration du serveur === pour activer ou désactiver l’affichage des notice et des alertes (Warning)
*/
//error_reporting(E_ALL & ~E_DEPRECATED); // & ~E_NOTICE
error_reporting(E_ALL );
ini_set(« display_errors », 1);
if(defined(‘DEBUG’) && DEBUG==’test’) echo ‘error_reporting = ‘,error_reporting(),’
‘;
/**
* === Définition des constantes === Il suffit de modifier le nom de la table à ce seul endroit
*/
/**
* \enum TABLE
* \brief Nom de la table MySQL.
*/
define(‘TABLE’,’algm__contacts’);
/**
* \enum FICSQL
* \brief Nom de la table MySQL.
*/
define(‘FICSQL’,’CreateTable.mysql’);
/**
* === Définition des fonctions ===
*/
/**
* @fn function test_exist_table( $table=TABLE )
* @brief Cette fonction teste si une table existe déjà dans la BD
*
* @param $tab Nom de la table à chercher dans la BD. (facultatif)
* @return \e boolean valant TRUE si la table est trouvée dans les tables de la BD.
*/
function test_exist_table($pdo, $table=TABLE) {
//global $pdo;
//$sql = ‘SHOW CREATE TABLE ‘ .$table ‘ ‘ ;
$sql = « SHOW TABLES FROM ` ».my_DB_NAME. »` « ;
if(defined(‘DEBUG’) && DEBUG==’mysql’) echo «
$sql
« ;
$prep = $pdo->prepare($sql);
try {
$prep->execute();
//if ( $row = $prep->fetchAll(PDO::FETCH_ASSOC) ) ;
while ($row = $prep->fetch() ) {
//echo «
"; print_r($row); echo "
« ;
if($row[‘Tables_in_’.my_DB_NAME] == $table) return TRUE;
}
} catch( Exception $e ){
echo ‘Erreur de requête : ‘, $e->getMessage();
}
}
/**
* @fn function cree_table( $table=TABLE, $sql_create= » )
* @brief Cette fonction crée une table MySQL avec la requête transmise en paramètre.
* Si la requête de création de table n’est pas fournie en paramètre,
* alors elle est cherchée dans le ‘CreateTable.mysql’.
* Si le fichier n’existe pas, la requête utilisée est contenue « en dur » dans le code
*
* @param $tab Nom de la table à créer dans la BD. (facultatif)
* @param $sql_create Requête MySQL de la table à créer dans la BD. (facultatif)
* @return Ne rend pas de valeur.
*/
function cree_table($pdo, $table=TABLE, $sql_create= ») {
//global $pdo;
if(!empty($sql_create))
$sql = $sql_create;
elseif(is_file(FICSQL))
$sql = sprintf(file_get_contents(FICSQL, NULL, NULL), $table);
else {
$sql_param = »
CREATE TABLE `%s` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`titre` enum(‘Mme’,’Mlle’,’M.’) DEFAULT NULL,
`nom` varchar(30) NOT NULL DEFAULT »,
`prénom` varchar(30) DEFAULT NULL,
`adresse électronique` varchar(60) DEFAULT NULL,
`demande sur` enum(‘un logement’,’une offre de location’,’la salle de restaurant et la salle du bar (ERP)’,’une option’,’les moyens de paiement’) DEFAULT NULL,
`sujet` varchar(60) DEFAULT NULL,
`votre message` varchar(60) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci
« ;
$sql = sprintf($sql_param, $table);
}
if(defined(‘DEBUG’) && DEBUG==’mysql’) echo «
$sql
« ;
$prep = $pdo->prepare($sql);
try {
$prep->execute();
echo « La table MySQL $table a été créée. »;
} catch( Exception $e ){
echo ‘Erreur de requête : ‘, $e->getMessage();
}
}
/**
* \fn function my_addslashes( $string )
* \brief Cette fonction ajoute des \a antislashes devant les caractères « quote » selon la configuration du serveur
*
* @param $string Texte à traiter.
* @return \e string Texte traité.
*/
function my_addslashes($string) {
if (get_magic_quotes_gpc()) return $string;
elseif (function_exists(‘addslashes’)) return addslashes($string);
else return mysql_real_escape_string($string);
}
/**
* \fn function insert_data( $data )
* \brief Cette fonction insère une ligne de données dans la table MySQL
*
* @param $data Tableau associatif PHP (\e array ) contenant les valeurs d’un enregistrement à réaliser dans une ligne de table MySQL.
* @return \e integer Indentifiant de la ligne créée dans la table MySQL.
*/
function insert_data($pdo, $data) {
//global $pdo;
// INSERT INTO `DD__contacts` (`titre` ,`nom` ,`prenom`) VALUES (‘M.’, ‘O’\’Hara’, ‘Joe’);
// Remarque : id et date sont instanciés avec les valeurs par défaut
$list_fields = get_fields($pdo);
// SET `titre` = ‘Mlle’ AND `nom`=’Moi’ …
foreach($list_fields as $df) {
if($df[‘Field’]!=PRIM && $df[‘Field’]!=DATE && isset($_REQUEST[$df[‘Field’]])) {
$connect = (!isset($connect))?’ ‘:’, ‘;
$str_keys = @$str_keys . $connect . « ` ».$df[‘Field’]. »` »;
$str_vals = @$str_vals . $connect . « ‘ ».my_addslashes($_REQUEST[$df[‘Field’]]). »‘ »;
}
}
$sql = ‘INSERT INTO `’ .my_DB_NAME.’`.`’.TABLE. « ` ($str_keys) VALUES ($str_vals) « ;
if(defined(‘DEBUG’) && DEBUG==’mysql’) echo «
$sql
« ;
$prep = $pdo->prepare($sql);
try {
$prep->execute();
$no = $pdo->lastInsertId();
} catch( Exception $e ){
echo ‘Erreur de requête : ‘, $e->getMessage();
}
return $no;
}
/**
* \fn function delete_data( $data )
* \brief Cette fonction supprime une ligne de données de la table MySQL
*
* @param $id Identifiant de l’enregistrement à supprimer.
* @return \e boolean valant TRUE seulement si la requête MySQL n’a pas généré d’erreur.
*/
function delete_data($pdo, $id) {
//global $pdo;
// DELETE FROM `wordpress`.`DD__contacts` WHERE `dd__contacts`.`id` = $id;
$sql = ‘DELETE FROM `’ .my_DB_NAME.’`.`’ .TABLE. ‘` WHERE `’ .PRIM. « ` = ‘ » .$id. « ‘ « ;
$prep = $pdo->prepare($sql);
try {
$prep->execute();
return TRUE; // sort en rendant TRUE s’il n’y a pas eu d’erreur MySQL
} catch( Exception $e ){
echo ‘Erreur de requête : ‘, $e->getMessage();
}
}
/**
* \fn function update_data( $data )
* \brief Cette fonction met à jour une ligne de données dans la table MySQL
*
* @param $id Identifiant de l’enregistrement à mettre à jour ; les informations à prendre en compte sont récupérées par $_REQUEST.
* @return \e boolean valant TRUE seulement si la requête MySQL n’a pas généré d’erreur.
*/
function update_data($pdo, $id= ») { $id=$_REQUEST[PRIM];
//global $pdo;
// UPDATE `wordpress`.`DD__contacts` SET `titre` = ‘Mlle’ AND `nom`=’Moi’ WHERE `dd__contacts`.`id` = $id;
$list_fields = get_fields($pdo);
// SET `titre` = ‘Mlle’ AND `nom`=’Moi’ …
foreach($list_fields as $df) {
if($df[‘Field’]!=PRIM && $df[‘Field’]!=DATE) {
$connect = (!isset($connect))?’SET ‘:’, ‘;
$str_set = @$str_set . $connect . ‘`’.$df[‘Field’]. »` = ‘ ».$_REQUEST[$df[‘Field’]]. »‘ « ;
}
}
$sql = ‘UPDATE `’ .my_DB_NAME.’`.`’ .TABLE. « ` $str_set WHERE ` » .PRIM. « ` = ‘ » .$_REQUEST[PRIM]. « ‘ « ;
if(defined(‘DEBUG’) && DEBUG==’mysql’) echo «
$sql
« ;
$prep = $pdo->prepare($sql);
try {
$prep->execute();
return TRUE; // sort en rendant TRUE s’il n’y a pas eu d’erreur MySQL
} catch( Exception $e ){
echo ‘Erreur de requête : ‘, $e->getMessage();
}
}
function get_lasts($pdo, $nb= », $field_date=DATE) {
//global $pdo;
// SELECT * FROM `DD__contacts` WHERE 1 ORDER BY date DESC LIMIT 4
if(empty($nb)) $limit = »;
else $limit = « LIMIT $nb »;
$sql = ‘SELECT * FROM `’ .my_DB_NAME.’`.`’.TABLE. « ` ORDER BY $field_date DESC $limit »;
$prep = $pdo->prepare($sql);
try {
$prep->execute();
while ($row = $prep->fetch(PDO::FETCH_ASSOC)) { $tab[] = $row; }
return (isset($tab)?$tab:NULL);
} catch( Exception $e ){
echo ‘Erreur de requête : ‘, $e->getMessage();
}
}
function get_one($pdo, $id) {
//global $pdo;
// SELECT * FROM `DD__contacts` WHERE `id`= $d
$sql = ‘SELECT * FROM `’ .my_DB_NAME.’`.`’.TABLE. « ` WHERE ` ».PRIM. »` = $id »;
$prep = $pdo->prepare($sql);
try {
$prep->execute();
while ($row = $prep->fetch(PDO::FETCH_ASSOC)) { $tab[] = $row; }
} catch( Exception $e ){
echo ‘Erreur de requête : ‘, $e->getMessage();
}
return $tab;
}
/**
* \fn function affich_table( $tab, $pri=PRIM )
* \brief Cette fonction génère le code HTML qui présentera les données d’une table PHP dans un tableau HTML
* Si le texte d’une des clés est le nom de la clé primaire,
* alors on ajoute une case à cocher pour sélectionner plusieurs items et un bouton radio pour en choisir un
*
* @param $tab Table associative PHP (chaque cellule est indexé par une clé pouvant être un texte)
* @param $pri Nom d’une clé à utiliser pour porter les boutons radio et les cases à cocher
* @return \e string Texte HTML d’un tableau
*/
function affich_table($tab, $pri=PRIM) {
if(defined(‘DEBUG’) && DEBUG==’export’) echo «
prim= $pri
« ;
$strHTML_bulle = ‘
‘;
$strJS_bulle = ‘onmouseout= »cache(); » onmouseover= »montre(\’%s\’); »‘;
$textbulle_checkbox = ‘Cocher pour sélectionner‘;
$textbulle_radio = ‘Cocher pour choisir‘;
$str = sprintf($strHTML_bulle, »Espèce de chouette mal empaillée ! »);
$str .= «
‘ .$row[$k].’ |
‘.$row[$k].’ |
---|
\n »;
return $str;
}
function get_table_csv($pdo, $table=TABLE) {
//global $pdo;
// SELECT * FROM `DD__contacts` WHERE `id`= 2 or `id`= 3
foreach(array_keys($_REQUEST) as $param) { //echo ‘
'.substr($param, 0, strlen(PRIM)+1).'
‘;
if(substr($param, 0, strlen(PRIM)+1) == PRIM.’_’) {
$connect = (!isset($connect))?’ `’.PRIM.’`= ‘:’ OR `’.PRIM.’`= ‘;
$str_listOR = @$str_listOR . $connect . substr($param, strlen(PRIM)+1);
}
}
if(!empty($str_listOR)) {
$sql = « SELECT * FROM ` » .my_DB_NAME. »`.`$table` WHERE $str_listOR « ;
if(defined(‘DEBUG’) && DEBUG==’export’) echo «
$sql
« ;
$prep = $pdo->prepare($sql);
try {
$prep->execute();
while ($row = $prep->fetch(PDO::FETCH_ASSOC)) { $tab[] = $row; }
} catch( Exception $e ){
echo ‘Erreur de requête : ‘, $e->getMessage();
}
return $tab;
}
}
function affich_csv($table) {
$str = »;
foreach ($table as $row) {
if(empty($keys)) $keys = array_keys($row);
foreach ($keys as $k) {
$str .= $row[$k]. »\t »;
}
$str .= « \n » ;
}
return $str;
}
function get_show_create($pdo, $table=TABLE) {
//global $pdo;
$sql = ‘SHOW CREATE TABLE ‘ .$table. ‘ ‘ ;
//echo «
$sql
« ;
$prep = $pdo->prepare($sql);
try {
$prep->execute();
if ($row = $prep->fetch(PDO::FETCH_ASSOC) ) {
return $row[‘Create Table’];
}
} catch( Exception $e ){
echo ‘Erreur de requête : ‘, $e->getMessage();
}
}
/**
* \fn function get_fields_v0( $table=TABLE )
* \brief Cette fonction récupère les \e champs (noms des colonnes) de la table MySQL
* \bug Gardée pour mémoire ; ne marche pas tout à fait
*
* @param $table Nom de la table MySQL .
* @return \e array Tableau PHP résultant de l’analyse par expression régulière de la requête MySQL de création de la table
*/
function get_fields_v0($pdo, $table=TABLE) {
// Note : rajout de $pdo dans les paramètres alors qu’il n’est pas nécessaire quand on peut le déclarer en global
// parce qu’il est utilisé dans une des fonctions utilisées par celle-ci
$sql_create = get_show_create($pdo, $table);
preg_match_all(« /`(.+)` (\w+)\(? ?(\d*) ?\)?/ », $sql_create, $_matches, PREG_SET_ORDER);
//{ echo «
"; print_r($_matches); echo "
« ; }
return $_matches;
}
/**
* \fn function get_fields( $table=TABLE )
* \brief Cette fonction récupère les \e champs (noms des colonnes) de la table MySQL
*
* @param $table Nom de la table MySQL .
* @return \e array Tableau PHP à 2 dimensions : pour chaque colonne, 1 tableau associatif avec son nom, son type, si c’est une clé primaire, sa valeur par défaut…
*/
function get_fields($pdo, $table=TABLE) {
//global $pdo;
$sql = ‘DESC `’ .my_DB_NAME.’`.`’.$table. ‘` ‘ ;
if(defined(‘DEBUG’) && DEBUG==’mysql’) echo «
$sql
« ;
$prep = $pdo->prepare($sql);
try {
$prep->execute();
while ($row = $prep->fetch(PDO::FETCH_ASSOC) ) $tab_fields[] = $row; {
if(defined(‘DEBUG’) && DEBUG==’mysql’) { echo «
"; print_r($row); echo "
« ; }
}
} catch( Exception $e ){
echo ‘Erreur de requête : ‘, $e->getMessage();
}
return $tab_fields;
}
function affich_fieldset_table($pdo, $table=TABLE) {
// Note : rajout de $pdo dans les paramètres alors qu’il n’est pas nécessaire quand on peut le déclarer en global
// parce qu’il est utilisé dans une des fonctions utilisées par celle-ci
$list_fields = get_fields($pdo, $table);
if(defined(‘DEBUG’) && DEBUG==’mysql’) { echo «
"; print_r($list_fields); echo "
« ; }
$str = «
\n »;
return $str;
}
/**
* \fn function get_primary_key( $table=TABLE )
* \brief Cette fonction récupère la clé \e primaire de la table MySQL
*
* @param $table Nom de la table MySQL .
* @return \e string Nom du champ qui est la clé primaire de la table
*/
function get_primary_key($pdo, $table=TABLE) {
// Note : rajout de $pdo dans les paramètres alors qu’il n’est pas nécessaire quand on peut le déclarer en global
// parce qu’il est utilisé dans une des fonctions utilisées par celle-ci
$list_fields = get_fields($pdo, $table);
// { echo «
"; print_r($list_fields); echo "
« ; }
foreach ($list_fields as $df) {
if($df[‘Key’]==’PRI’) { return $df[‘Field’]; }
}
}
/**
* \fn function get_date_key( $table=TABLE )
* \brief Cette fonction récupère le nom du champ dont la valeur par défaut est la date courante
*
* @param $table Nom de la table MySQL .
* @return \e string Nom du premier champ trouvé dans la liste des champs dont la valeur par défaut est CURRENT_TIMESTAMP
*/
function get_date_key($pdo, $table=TABLE) {
// Note : rajout de $pdo dans les paramètres alors qu’il n’est pas nécessaire quand on peut le déclarer en global
// parce qu’il est utilisé dans une des fonctions utilisées par celle-ci
$list_fields = get_fields($pdo, $table);
// { echo «
"; print_r($list_fields); echo "
« ; }
foreach ($list_fields as $df) {
if($df[‘Default’]==’CURRENT_TIMESTAMP’) { return $df[‘Field’]; }
}
}
/**
* ===TEST=== Affichage pour vérifier que les valeurs du formulaire sont bien reçues par le serveur
*/
if(defined(‘DEBUG’) && DEBUG==’test’) foreach($_GET as $k=>$v) echo « $k
$v
\n »;
[/insert_php]