Bonjour à tous,
Après de multiple recherches et conseils, j'ai modifié le code de traitement de mon formulaire mais également la base de données et ses caractéristiques :
La base de données :
create table parc_quimper
(
ID INT(11) NOT NULL AUTO_INCREMENT,
CODE VARCHAR(12) not null,
TYPE VARCHAR(100) not null,
POLE VARCHAR(100) not null,
DIRECTION VARCHAR(100) not null,
SERVICE VARCHAR(255) not null,
CONDUCTEUR VARCHAR(255),
DOM VARCHAR(12) not null,
IMMAT_VEHICULE VARCHAR(20) not null,
CARTE_GRISE VARCHAR(12) not null,
LOGO VARCHAR(12) not null,
MARQUE VARCHAR(255) not null,
PREMIERE_CIRCULATION DATE not null,
FIN_GARANTIE DATE,
DERNIER_PASSAGE DATE,
KILOMETRAGE NUMERIC(10),
ECHEANCES_VISITES DATE,
LOCATION VARCHAR(12) not null,
OBSERVATIONS TEXT,
INTERLOCUTEUR VARCHAR(255),
DERNIER_CT DATE,
PROCHAIN_CT DATE,
CT VARCHAR(12),
DERNIER_ANTIPOL DATE,
PROCHAIN_ANTIPOL DATE,
ANTIPOL VARCHAR(12),
DERNIER_TACHY DATE,
PROCHAIN_TACHY DATE,
TACHY VARCHAR(12),
DERNIER_LIMITEUR DATE,
PROCHAIN_LIMITEUR DATE,
LIM VARCHAR(12),
TYPE_CONTROLE VARCHAR(12),
NATURE_CONTROLE VARCHAR(12),
EXEMPTION_CONTROLE VARCHAR(12),
IMAGE VARCHAR(255),
LIEN VARCHAR(255),
primary key (ID)
);
je vous transmets également le fichier de traitement du formulaire :
<?php
session_start();
if (@$_SESSION['auth'] !="gestparq29590-732310")
{
header("Location: essai_index.php");
exit();
}
/* Fonction de vérification des immatriculation*/
function verifImmatriculation($immatriculation, &$immat_vehicule = null){
$p = '#^([0-9]+|[a-z]+)(?:\s|-)?([a-z]+|[0-9]+)(?:\s|-)?([a-z]+|[0-9]+)$#i';
if (preg_match('#^(?(?!ss|ww)[a-hj-np-tv-z]{2})(?:\s|-)?[0-9]{3}(?:\s|-)?(?(?!ss)[a-hj-np-tv-z]{2})$#i', $immatriculation)) {
$immat_vehicule = strtoupper(preg_replace($p, '$1-$2-$3', $immatriculation));}
elseif (preg_match('#^[0-9]{1,4}(?:\s|-)?[a-hj-np-tv-z]{2,3}(?:\s|-)?(?:97[1-6]|0[1-9]|[1-8][0-9]|9[1-5]|2[ab])$#i', $immatriculation)){
$immat_vehicule = strtoupper(preg_replace($p, '$1 $2 $3', $immatriculation));}
else{
$immat_vehicule = "bad";
}}
?>
<!doctype html>
<html>
<head>
<meta charset='utf-8'>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="styles.css">
<link rel="icon" type="image/png" href="images/design/ico.png" />
<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
<script src="script.js"></script>
<title>Enregistrement Nouveau Véhicule</title>
</head>
<body>
<?php
include('include/entete.html');
echo ("<div id='contenu'>");
function stripslashes_r($var) // Fonction qui supprime l'effet des magic quotes
{
if(is_array($var)) // Si la variable passée en argument est un array, on appelle la fonction stripslashes_r dessus
{
return array_map('stripslashes_r', $var);
}
else // Sinon, un simple stripslashes suffit
{
return stripslashes($var);
}
}
if(get_magic_quotes_gpc()) // Si les magic quotes sont activés, on les désactive avec notre super fonction ! ;)
{
$_POST = stripslashes_r($_POST);
}
/* ********************************************************************** */
echo ("<h1>Traitement du nouveau véhicule</h1>");
// Si l'internaute à bien envoyer le formulaire
if($_POST['submit']='Enregistrer ...')
{
/*Connection avec la base données MySQL*/
include("menu//chiens.php");
/*On définit ID*/
$id="";
$nature_controle="";
// On traite en premier lieu le fichier uploader
if(!empty($_FILES['fichier_source']['tmp_name']) AND is_uploaded_file($_FILES['fichier_source']['tmp_name']))
{
/*On va vérifier la taille du fichier en ne passant pas par $_FILES['fichier_source']['size']
pour éviter les failles de sécurité*/
if(filesize($_FILES['fichier_source']['tmp_name'])<100000000){
//On vérifie maintenant le type de l'image à l'aide de la fonction getimagesize()
list($largeur, $hauteur, $type, $attr)=getimagesize($_FILES['fichier_source']['tmp_name']);
// On créé un tableau contenant les extensions autorisées
$extOk = array('.jpg','.gif','.png','.JPG','.GIF','.PNG');
// On lit l'extension du fichier
$fileExt = substr($_FILES['fichier_source']['name'],-4,4);
// Si c'est une image on traite le fichier uploadé
if(in_array($fileExt,$extOk)){
// On définit notre répertoire cible
$dstRep = 'images/parc/';
//On détermine le nom du fichier à uploader
$marque_upload = strtolower(str_replace(' ', '_', $_POST['marque']));
$modele_upload = strtolower(str_replace(' ', '_', $_POST['modele']));
$fichier= $marque_upload.$modele_upload;
//On vérifie si le dossier de destination est writable
if(!is_writable($dstRep))
die('Impossible d\'écrire dans le répertoire cible.');
//Copie le fichier dans le répertoire de destination
if(move_uploaded_file($_FILES['fichier_source']['tmp_name'], 'images/parc/'.$fichier.$fileExt)){
//Le fichier a été uploadé correctement
// On définit le lien à insérer dans la base
$lien=$dstRep.$fichier.$fileExt;
// On détermine qu'il y a bien une image à uploader
$size_image=1;
}
else{//Erreur
$mauvaisFormat[]='Erreur lors de la copie du fichier';
}
}
else
{
$mauvaisFormat[]= "Le fichier n'est pas une image";
}
}
else
{
$mauvaisFormat[]= 'Le fichier est trop gros, veuillez compresser le fichier !!!';
}
}
else
{
$size_image=0;
$lien="images/parc/no_image.png";
$fichier="no_image";
}
//Maintenant, on traite toutes les autres informations
// On définit les différents ReGex
$form_code= "/^(V{1})([1-9]{1})([0-9]{1})([0-9]|[A-Z]{1})/";
$form_nom= "/^([a-zA-Z'àâéèêôùûïçÀÂÉÈÔÙÛÏÇ[:blank:]-]{1,30})$/";
$form_texterea= '#^[a-zÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿA-Z0-9\.\#<>,;\-&\r\n ]{1,1000}$#i';
$form_date= "/^[0-9]{4}[\/\\- ][0-9]{2}[\/\\- ][0-9]{2}$/";
$form_on="/^[OUI]|^[NON]/";
$form_carte="/^[VQ]|^[QC]|^[Inconnue]/";
$form_logo="/^[VQ]|^[QC]|^[NON]/";
$form_km="/^\d+$/";
/* Le dernier passage correspond à la date du jour*/
$dernier_passage=date('Y-m-d');
/* Tester le champ code*/
/* Si le champ est bien rempli*/
if(!empty($_POST['code'])){
/*Test du format dela date*/
if(!preg_match($form_code, $_POST['code'])){
$mauvaisFormat[] ="Code Véhicule";
}
else{$code=$_POST['code'];}
}
else{$tabloVide[] ="Code véhicule !!!";}/* Si le champ est vide*/
/* Tester le champ type*/
/* Si le champ est bien rempli*/
if(!empty($_POST['type'])){
/*Test du format dela date*/
if(!preg_match($form_nom, $_POST['type'])){
$mauvaisFormat[] ="Type de véhicule";
}
else{$type=$_POST['type'];}
}
else{$tabloVide[] ="Type de véhicule !!!";}/* Si le champ est vide*/
/*Tester l'immatriculation*/
if(!empty($_POST['immat'])){
/*Test du format du champ immatriculation*/
if($type=="SCOOTER" or $type=="VELO" or $type=="TONDEUSE" or $type=="DIVERS"){
$immat_vehicule ="";
}
else{verifImmatriculation($_POST['immat'], $immat_vehicule);}
}
else{$immat_vehicule ="";}/* Si le champ est vide*/
/* Tester le champ marque*/
/* Si le champ est bien rempli*/
if(!empty($_POST['marque'])){
/*Test du format dela date*/
if(!preg_match($form_nom, $_POST['marque'])){
$mauvaisFormat[] ="Marque du véhicule";
}
else{$marque=$_POST['marque'];}
}
else{$tabloVide[] ="Marque du véhicule !!!";}/* Si le champ est vide*/
/* Tester le champ modèle*/
/* Si le champ est bien rempli*/
if(!empty($_POST['modele'])){
/*Test du format dela date*/
if(!preg_match($form_texterea, $_POST['modele'])){
$mauvaisFormat[] ="Modèle du véhicule";
}
else{$modele=$_POST['modele'];}
}
else{$modele="";}/* Si le champ est vide*/
/*Concatener la marque et le modèle du véhicule*/
$marque= $marque." ".$modele;
/* Si le champ est bien rempli*/
if(!empty($_POST['kilometrage'])){
/*Test du format du kilometrage*/
if(!preg_match($form_km, $_POST['kilometrage'])){
$mauvaisFormat[] ="Kilométrage !!!";
}
else{$kilometrage=$_POST['kilometrage'];}
}
else{$tabloVide[] ="Kilometrage !!!";}/* Si le champ est vide*/
/* Tester le champ pôle*/
/* Si le champ est bien rempli*/
if(!empty($_POST['pole'])){
/*Test du format d'un nom*/
if(!preg_match($form_nom, $_POST['pole'])){
$mauvaisFormat[] ="Pôle !!!";
}
else{$pole=$_POST['pole'];}
}
else{$tabloVide[] ="Pôle !!!";}/* Si le champ est vide*/
/* Tester le champ direction*/
/* Si le champ est bien rempli*/
if(!empty($_POST['direction'])){
/*Test du format de direction*/
if(!preg_match($form_nom, $_POST['direction'])){
$mauvaisFormat[] ="Direction !!!";
}
else{$direction=$_POST['direction'];}
}
else{$tabloVide[] ="Direction !!!";}/* Si le champ est vide*/
/* Tester le champ service*/
/* Si le champ est bien rempli*/
if(!empty($_POST['service'])){
/*Test du format dela date*/
if(!preg_match($form_nom, $_POST['service'])){
$mauvaisFormat[] ="Le service !!!";
}
else{$service=$_POST['service'];}
}
else{$tabloVide[] ="Le service !!!";}/* Si le champ est vide*/
/* Tester le champ premiéré circulation*/
/* Si le champ est bien rempli*/
if(!empty($_POST['premiere_circulation'])){
/* Remise en forme de la date*/
$premiere_date= date("Y-m-d",strtotime($_POST["premiere_circulation"]));
/*Test du format dela date*/
if(!preg_match($form_date, $premiere_date)){
$mauvaisFormat[] ="Première mise en circulation: ".$premiere_date;
}
else{$premiere_circulation=$premiere_date;}
}
else{$tabloVide[] ="Première mise en circulation : ".$premiere_date;}/* Si le champ est vide*/
/* Tester le champ garantie*/
/* Si le champ est bien rempli*/
if(!empty($_POST['garantie'])){
/*Test du format dela date*/
/* Remise en forme de la date*/
$garantie_date= date("Y-m-d",strtotime($_POST['garantie']));
if(!preg_match($form_date, $garantie_date)){
$mauvaisFormat[] ="Fin de Garantie";
}
else{$garantie=$garantie_date;}
}
else{$garantie="";}/* Si le champ est vide*/
/* Tester le champ remisage*/
/* Si le champ est bien rempli*/
if(!empty($_POST['remisage'])){
/*Test du format du champ remisage*/
if(!preg_match($form_on, $_POST['remisage'])){
$mauvaisFormat[] ="Remisage";
}
else{$remisage=$_POST['remisage'];}
}
else{$tabloVide[] ="Remisage";}/* Si le champ est vide*/
/* Tester le champ location*/
/* Si le champ est bien rempli*/
if(!empty($_POST['location'])){
/*Test du format du champ location*/
if(!preg_match($form_on, $_POST['location'])){
$mauvaisFormat[] ="Location !!!";
}
else{$location=$_POST['location'];}
}
else{$tabloVide[] ="Location";}/* Si le champ est vide*/
/* Tester le champ carte*/
/* Si le champ est bien rempli*/
if(!empty($_POST['carte'])){
/*Test du format du champ carte*/
if(!preg_match($form_carte, $_POST['carte'])){
$mauvaisFormat[] ="Carte Grise : ".$_POST['carte'];
}
else{$carte=$_POST['carte'];}
}
else{$tabloVide[] ="Carte Grise";}/* Si le champ est vide*/
/* Tester le champ logo*/
/* Si le champ est bien rempli*/
if(!empty($_POST['logo'])){
/*Test du format du champ carte*/
if(!preg_match($form_logo, $_POST['logo'])){
$mauvaisFormat[] ="Logo !!!";
}
else{$logo=$_POST['logo'];}
}
else{$tabloVide[] ="Logo !!!";}/* Si le champ est vide*/
if(!empty($_POST['conducteur'])){
/*Test du format du champ carte*/
if(!preg_match($form_nom, $_POST['conducteur'])){
$mauvaisFormat[] ="Conducteur !!!";
}
else{$conducteur=strtoupper($_POST['conducteur']);}
}
else{$conducteur="";}
if(!empty($_POST['interlocuteur'])){
/*Test du format du champ carte*/
if(!preg_match($form_nom, $_POST['interlocuteur'])){
$mauvaisFormat[] ="Interlocuteur !!!";
}
else{$interlocuteur=strtoupper($_POST['interlocuteur']);}
}
else{$interlocuteur="";}
/*Vérification du champs "Textarea"*/
if(!empty($_POST['observation'])){
/* Si le champ n'est pas vide on le teste*/
/*Test du format du texerea*/
if(!preg_match($form_texterea, $_POST['observation'])){$mauvaisFormat[] ="Observation";}else{$observation=$_POST['observation'];}
}
else{$observation="";}
/*Insertion des controles technique associés au véhicule*/
/* Tester le checkbox*/
if(!empty($_POST['ct'])){
$controle_tech="X";
$date_depart_ct=date("Y-m-d",strtotime($_POST['premiere_circulation']));
//durée à rajouter : 4 ans;
$duree = 4;
//la première étape est de transformer cette date en timestamp
$departCTTimestamp = strtotime($date_depart_ct);
//on calcule la date de fin
$date_control= date("Y-m-d",strtotime("+".$duree."year",$departCTTimestamp ));
$controle_type="CT";
$nature_controle="CNT";
}
else {
$controle_tech="";
$date_depart_ct=date('d/m/Y');
$date_control="";
}
if(!empty($_POST['antipol'])){
$antipol="X";
$date_depart_antipol=$date_depart_ct;
//durée à rajouter : 4 ans;
$duree = 1;
//la première étape est de transformer cette date en timestamp
$departAntipolTimestamp = strtotime($date_depart_antipol);
//on calcule la date de fin
$date_antipol= date("Y-m-d",strtotime("+".$duree."year",$departAntipolTimestamp ));
$controle_type="CT";
$nature_controle="CNT";
}
else {
$antipol="";
$date_depart_antipol="";
$date_antipol="";
}
if(!empty($_POST['tachy'])){
$controle_tachy="X";
$date_depart_tachy=$_POST['premiere_circulation'];
//durée à rajouter : 2 ans;
$duree = 2;
//la première étape est de transformer cette date en timestamp
$departTachyTimestamp = strtotime($date_depart_tachy);
//on calcule la date de fin
$date_tachy= date("Y-m-d",strtotime("+".$duree."year",$departTachyTimestamp ));
$controle_type="CT";
$nature_controle="CNT";
}
else {
$controle_tachy="";
$date_depart_tachy="";
$date_tachy="";
}
if(!empty($_POST['lim'])){
$controle_lim="X";
$date_depart_lim=$_POST['premiere_circulation'];
//durée à rajouter : 1 an;
$duree = 1;
//la première étape est de transformer cette date en timestamp
$departLimTimestamp = strtotime($date_depart_lim);
//on calcule la date de fin
$date_lim= date("Y-m-d",strtotime("+".$duree."year",$departLimTimestamp ));
$controle_type="CT";
$nature_controle="CNT";
}
else {
$controle_lim="";
$date_depart_lim="";
$date_lim="";
}
if(!empty($_POST['hc']) or ((empty($_POST['lim'])) AND (empty($_POST['tachy'])) AND (empty($_POST['antipol'])) AND (empty($_POST['ct'])))){
$controle_type="HC";} else {$controle_type="CT";}
/* Déterminer les exemptions de contrôle*/
$exemption_controle="";
/*Déterminer la date d'échéance la plus proche*/
/*On redetermine la date du jour*/
$date_jour=date('d/m/Y');
$echeance=min($date_control,$date_lim,$date_tachy,$date_antipol);
/*Par la fonction @sizeof on calcul, le nombre d'occurence dans $mauvaisFormat[] et $tabloVide[] */
if (@sizeof($tabloVide) > 0 or @sizeof($mauvaisFormat) > 0)
{
/* Informations manquantes ou incorrectes
Incription de la liste des données manquantes en haut d'une nouvelle page*/
/*On traite d'abord le $tabloVide[] on extrait les champs vide par un foreach*/
if(@sizeof($tabloVide) > 0)
{
echo "<b>Un champ au moins est vide. Vous devez remplir :</b><br>";
foreach($tabloVide as $champsvides)
{
echo "$champsvides<br>";
}
include("formulaire/formulaire_nouveau_vehicule.php");
exit();
}
/* Incription de la liste des données incorrectes en haut d'une nouvelle page*/
/*On traite ensuite le $mauvaisFormat[] on extrait les champs invalides par un foreach*/
if(@sizeof($mauvaisFormat) > 0)
{
/* Informations incorrectes */
echo "<b>Un champ au moins contient une donnée incorrecte. Corrigez :</b><br>";
/* Liste des champs incorrects */
foreach($mauvaisFormat as $champsMauvais)
{
echo "$champsMauvais<br>";
}
include("formulaire/formulaire_nouveau_vehicule.php");
exit();
}
/* Rappel du formulaire et affichage des erreurs de saisie */
}
/* ************************************************************************************************************************
Les données reçues sont correctes
Traitement du fichier en pièce jointe
************************************************************************************************************************* */
else
{
/* Insertion des données dans la base */
$req = $bdd->prepare('INSERT INTO `parc_quimper` (`CODE`,`TYPE`,`POLE`,`DIRECTION`,`SERVICE`,`CONDUCTEUR`,`DOM`,`IMMAT_VEHICULE`,`CARTE_GRISE`,`LOGO`,`MARQUE`,`PREMIERE_CIRCULATION`,`FIN_GARANTIE`,`DERNIER_PASSAGE`,`KILOMETRAGE`,`ECHEANCES_VISITES`,`LOCATION`,`OBSERVATIONS`,`INTERLOCUTEUR`,`DERNIER_CT`,`PROCHAIN_CT`,`CT`,`DERNIER_ANTIPOL`,`PROCHAIN_ANTIPOL`,`ANTIPOL`,`DERNIER_TACHY`,`PROCHAIN_TACHY`,`TACHY`,`DERNIER_LIMITEUR`,`PROCHAIN_LIMITEUR`,`LIM`,`TYPE_CONTROLE`,`NATURE_CONTROLE`,`EXEMPTION_CONTROLE`,`IMAGE`,`LIEN`)
VALUES(:code, :type, :pole, :direction, :service, :conducteur, :dom, :immat, :carte, :logo, :marque, :premiere_circulation, :garantie, :dernier_passage, :kilometrage, :echeances_visites, :location, :observations, :interlocuteur, :dernier_ct, :prochain_ct, :ct, :dernier_antipol, :prochain_antipol, :antipol, :dernier_tachy, :prochain_tachy, :tachy, :dernier_lim, :prochain_lim, :lim, :type_controle, :nature_controle, :exempt_controle, :fichier, :lien)');
$req->execute(array(
'code'=>$code,
'type'=>$type,
'pole'=>$pole,
'direction'=>$direction,
'service'=>$service,
'conducteur'=>$conducteur,
'dom'=>$remisage,
'immat'=>$immat_vehicule,
'carte'=>$carte,
'logo'=>$logo,
'marque'=>$marque,
'premiere_circulation'=>$premiere_circulation,
'garantie'=>$garantie,
'dernier_passage'=>$dernier_passage,
'kilometrage'=>$kilometrage,
'echeances_visites'=>$echeance,
'location'=>$location,
'observations'=>$observation,
'interlocuteur'=>$interlocuteur,
'dernier_ct'=>$date_depart_ct,
'prochain_ct'=>$date_control,
'ct'=>$controle_tech,
'dernier_antipol'=>$date_depart_antipol,
'prochain_antipol'=>$date_antipol,
'antipol'=>$antipol,
'dernier_tachy'=>$date_depart_lim,
'prochain_tachy'=>$date_tachy,
'tachy'=>$controle_tachy,
'dernier_lim'=>$date_depart_lim,
'prochain_lim'=>$date_lim,
'lim'=>$controle_lim,
'type_controle'=>$controle_type,
'nature_controle'=> $nature_controle,
'exempt_controle'=>$exemption_controle,
'fichier' => $fichier,
'lien' => $lien));
/*Messages d'erreur de validation*/
$bdd ->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
/*Message de prise en compte de l'enregistrement*/
echo "<p>Votre véhicule a bien été enregistré.</p>";
echo "<p>Merci de votre colaboration.</p>";
echo "<img src='images/design/logo_administrateur.png' alt='Arobase' title='Nouveau Vehicule'/>";
echo "<p>Bonne navigation...</p>";
}
}
else
{
echo ("Une erreur s'est produite, l'accès à cette page est impossible...<br>");
echo ("veuillez contacter votre administrateur !!!");}
/*Affichage de la plage de recherche et du pied de page*/
echo ("</div>");
include('include/sidebar.html');
include('include/pied_de_page.html');
?>
<html>
Je vous remercie pour votre aide.
Je dois maintenant faire en sorte qu'on ne puisse pas enregistrer deux véhicules sous le même code ville mais aussi gérer les rechargement du formulaire en cas de mauvais format, ce qui à mon avis va poser plus de problèmes.
Merci encore.