page déposer trajet V1

admin
remi.biette 5 years ago
parent fe89b5b7f6
commit 08f263e3c7

@ -0,0 +1,131 @@
*{
font-family: "Arial";
padding: 0;
margin: 0;
}
.villeSelect, .villeText{
box-sizing: border-box;
margin-bottom: 0.7em;
}
.villeText{
width: 20%;
}
.villeSelect{
margin-bottom: 0.7em;
margin-left: 2%;
width: 33%;
}
body{
display: flex;
flex-wrap: wrap;
flex-direction: row;
justify-content: center;
align-items: center;
}
#formulaire{
background-color: white;
border-radius: 10px;
padding: 4em;
width: 40%;
}
#enregistrer{
margin-top: 1em;
text-align: center;
}
h1{
text-align: center;
}
form{
margin-top: 3em;
}
.form{
box-sizing: border-box;
width: 55%;
margin-bottom: 0.7em;
}
#avatar{
border-style: none;
}
.button{
cursor: pointer;
font-weight: bold;
padding: 8px;
color: white;
background-color: rgb(65, 154, 28);
border-radius: 5em;
border: none;
}
.button:hover{
background-color: rgb(48, 112, 20);
border-color: rgb(48, 112, 20);
}
.button:disabled{
cursor: not-allowed;
background-color: grey;
}
#submit{
margin-top: 1em;
margin-left: 50%;
transform: translate(-50%);
}
.line{
display: flex;
flex-wrap: wrap;
flex-direction: row;
justify-content: left;
width: 100%;
}
#error{
margin-bottom: 1em;
}
.error{
color: red;
text-align: center;
}
.label{
box-sizing: border-box;
font-size: 1.1em;
width: 45%;
min-width: 8em;
}
h1{
font-size: 2em;
}
button{
color: forestgreen;
border-color: forestgreen;
border-radius: 5em;
}
#supprimerEtape{
display: none;
}
#boutonEtape{
margin-top: 1.5em;
display: flex;
flex-wrap: nowrap;
flex-direction: row;
justify-content: space-between;
}

@ -0,0 +1,55 @@
$(document).ready(function () {
//copy options
let options = $('#villeDepart option').clone();
//react on keyup in textbox
$('#villeDepartText').keyup(function () {
let val = $(this).val().toString().toLowerCase();
$('#villeDepart').empty();
//take only the options containing your filter text or all if empty
options.filter(function (idx, el) {
return val === '' || $(el).text().toLowerCase().indexOf(val) >= 0;
}).appendTo('#villeDepart');//add it to list
});
//copy options
let optionsEtape = $('#villeEtape option').clone();
//react on keyup in textbox
$('#villeEtapeText').keyup(function () {
let val = $(this).val().toString().toLowerCase();
$('#villeEtape').empty();
//take only the options containing your filter text or all if empty
optionsEtape.filter(function (idx, el) {
return val === '' || $(el).text().toLowerCase().indexOf(val) >= 0;
}).appendTo('#villeEtape');//add it to list
});
$("#ajoutEtape").click(function () {
let depart = $("#villeDepart");
let etape = $("#villeEtape");
let nbEtape = $("#nbEtapes");
if(etape.val() != null && etape.val() !== "" && depart.val() != null && depart.val() !== ""){
let option = $("#villeEtape option:selected");
let numero = (parseInt(nbEtape.val()));
$(this).parent().before("<div class='line etape'>" +
"<lablel class='label' for='etape" + numero + "'>Etape " + numero + " :</lablel>" +
"<input type='text' class='form' value='" + option.text() + "' readonly>" +
"<input type='hidden' name='etape" + numero + "' value='" + option.val() + "' readonly></div>");
nbEtape.attr('value', parseInt(nbEtape.val())+1);
//$("#supprimerEtape").css("display", "initial");
$("#supprimerEtape").show();
}
});
$("#supprimerEtape").click(function () {
let etape = $(".etape:last");
let nbEtape = $("#nbEtapes");
if (parseInt(nbEtape.val())>0){
etape.remove();
nbEtape.attr('value', parseInt(nbEtape.val())-1);
if (parseInt(nbEtape.val())<=1){
//$("#supprimerEtape").css("display", "none");
$("#supprimerEtape").hide();
}
}
});
});

@ -0,0 +1,180 @@
<?php
//Récupérer la liste des voitures concernant un utilisateur
function getListeVoitures($db, $mail){
$result = pg_query_params($db, "SELECT * FROM Voiture WHERE mail = $1;", array($mail));
return $result;
}
//Afficher les voitures dans un select
function afficherVoitures($db, $mail){
$voitures = getListeVoitures($db, $mail);
while ($row = pg_fetch_array($voitures)) {
$modele = $row['modele'];
$matricule = $row['matricule'];
echo "<option value='$matricule'>$modele</option>";
}
}
//Afficher les voitures dans un select
function afficherVilles($db)
{
$villes = getListeVilles($db);
while ($row = pg_fetch_array($villes)) {
$nom = $row['nomville'];
$cp = $row['codepostal'];
echo "<option value='$nom%%$cp'>$nom ($cp)</option>";
}
}
function printError()
{
if (isset($_GET['error'])) {
$erreur = getError($_GET['error']);
echo "<p class = 'error'>$erreur</p>";
}
}
function getError($code)
{
switch ($code) {
case 1:
return "Erreur lors de la vérification des étapes.";
case 2:
return "Erreur lors de la vérification des dates.";
case 3:
return "Ce compte n'est pas associé à la voiture sélectionnée.";
case 4:
return "Erreur lors de l'enregistrement du trajet.";
}
}
require_once('../connexionBD.php');
require_once('../ressources/trajet.php');
session_start();
//Utilisateur connecté
if (!isset($_SESSION['mail'])) {
header('Location: ../index.php');
exit();
}
$mail = $_SESSION['mail'];
//Tester que tous les champs ont été renseignés
if (isset($_POST['dateDepart']) && isset($_POST['dateArrivee']) && isset($_POST['voiture']) && isset($_POST['villeDepart']) && isset($_POST['nbEtapes']) && isset($_POST['etape1'])) {
//Récupérer tous les $_POST en variables
$nbEtapes = htmlspecialchars(pg_escape_string($_POST['nbEtapes']));
$dateDepart = htmlspecialchars(pg_escape_string($_POST['dateDepart']));
$dateArrivee = htmlspecialchars(pg_escape_string($_POST['dateArrivee']));
$voiture = htmlspecialchars(pg_escape_string($_POST['voiture']));
$villeDepart = htmlspecialchars(pg_escape_string($_POST['villeDepart']));
$arrEtapes = array();
$i=1;
//Ajouter les étapes à un tableau
array_push($arrEtapes, htmlspecialchars(pg_escape_string($_POST['villeDepart'])));
while (isset($_POST['etape'.$i])){
array_push($arrEtapes, htmlspecialchars(pg_escape_string($_POST['etape'.$i])));
$i++;
}
//Vérifie le nombre d'étapes entré par l'utilisateur
if (count($arrEtapes) == 0 || intval($nbEtapes)<1 || intval($nbEtapes) != count($arrEtapes)){
header('Location: depotTrajet.php?error=1');
exit();
}
//Vérifie que les dates entrées par l'utilisateur ne se chevauchent pas et sont correctes
if (!checkDates($db, $mail, $dateDepart, $dateArrivee)){
header('Location: depotTrajet.php?error=2');
exit();
}
//Vérifie la voiture de l'utilisateur est correcte
if (!checkVoiture($db, $mail, $voiture)){
header('Location: depotTrajet.php?error=3');
exit();
}
//Creer le trajet en bd
$result = creerTrajet($db, $mail, $dateDepart, $dateArrivee, $voiture);
if ($result){
$codeTrajet = pg_fetch_array($result)[0];
//Creer les etapes en bd
$result = creerEtapes($db, $codeTrajet, $arrEtapes);
}
if (!$result){
header('Location: depotTrajet.php?error=4');
exit();
}
}
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="../ressources/libs/jquery-ui.min.css">
<link rel="stylesheet" href="../ressources/navbarhtml.css">
<link rel="stylesheet" href="depotTrajet.css">
<title>Déposer un trajet</title>
</head>
<body>
<script type="application/javascript" src="../ressources/libs/jquery-3.4.1.js"></script>
<script type="application/javascript" src="../ressources/libs/jquery-ui.min.js"></script>
<script type="application/javascript" src="../ressources/libs/chosen.jquery.min.js"></script>
<?php require_once ("../ressources/navbarhtml.php"); ?>
<div id="formulaire">
<h1>Déposer un trajet</h1>
<form method="post" enctype="multipart/form-data" action="depotTrajet.php">
<div class="line">
<label class="label" for="dateDepart">Date départ : </label>
<input type="datetime-local" class="form" name="dateDepart" id="dateDepart" required>
</div>
<div class="line">
<label class="label" for="dateArrivee">Date arrivée : </label>
<input type="datetime-local" class="form" name="dateArrivee" id="dateArrivee" required>
</div>
<div class="line">
<label class="label" for="voiture">Voiture : </label>
<select class="form" name="voiture" id="voiture" required>
<option selected></option>
<?php
afficherVoitures($db, $mail);
?>
</select>
</div>
<div class="line">
<label class="label" for="villeDepart">Ville de départ : </label>
<input type="text" class="form, villeText" name="villeDepartText" id="villeDepartText">
<select class="form, villeSelect" name="villeDepart" id="villeDepart" required>
<option selected></option>
<?php
afficherVilles($db);
?>
</select>
</div>
<div id="villeEtapeDiv" class="line">
<label class="label" for="villeEtape">Etape : </label>
<input type="text" class="form, villeText" id="villeEtapeText" name="villeEtapeText">
<select class="form, villeSelect" name="villeEtape" id="villeEtape" required>
<option selected></option>
<?php
afficherVilles($db);
?>
</select>
</div>
<div id="boutonEtape" class="line">
<input class="button" id="ajoutEtape" type="button" value="Ajouter une étape">
<input id="supprimerEtape" class='button' type='button' value='Supprimer une étape'>
<input id="nbEtapes" name="nbEtapes" type="hidden" value="1" required>
</div>
<?php
printError();
?>
<div class="line">
<input id="submit" class="button" type="submit" value="Poster le trajet">
</div>
</form>
<script src="depotTrajet.js"></script>
</div>
</body>
</html>

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -0,0 +1,39 @@
<?php
//Récupérer la liste complete des villes
function getListeVilles($db) {
$result = pg_query($db, "SELECT * FROM Ville;");
return $result;
}
//Créer un trajet en bd
function creerTrajet($db, $mail, $dateDepart, $datArrivee, $matricule){
$date = date('Y-m-d H:i:s');
$result = pg_query_params($db, "INSERT INTO Trajet (datedepart, datearrivee, dateproposition, estannule, mailproposition, matricule) VALUES ($1, $2, $3, false, $4, $5) RETURNING codeTrajet;", array($dateDepart,$datArrivee, $date, $mail, $matricule));
return $result;
}
//Creer les étapes d'un trajet
function creerEtapes($db, $codeTrajet, $etapes){
$result = true;
for ($i=0; $i<count($etapes) && $result; $i++){
$arr = explode("%%", $etapes[$i]);
$result = pg_query_params($db, "INSERT INTO traverser (codetrajet, nomville, codepostal, numeroetape) VALUES ($1, $2, $3, $4);", array($codeTrajet, $arr[0], $arr[1], $i+1));
}
return $result;
}
//Vérifier la cohérence des dates
function checkDates($db, $mail, $dateDepart, $dateArrivee) {
$valide = $dateDepart < $dateArrivee && $dateDepart > date('Y-m-d H:i:s');
$result = pg_query_params($db, "SELECT COUNT(*) From Trajet WHERE mailproposition = $1 AND $2 BETWEEN datedepart AND datearrivee;", array($mail, $dateDepart));
$row = pg_fetch_array($result);
return $row[0] == 0 && $valide;
}
//Vérifier que l'utilisateur est bien associé à cette voiture
function checkVoiture($db, $mail, $matricule){
$result = pg_query_params($db, "SELECT matricule From Voiture WHERE mail = $1 AND matricule = $2;", array($mail, $matricule));
$row = pg_fetch_array($result);
return !strcmp($matricule, $row[0]);
}

@ -0,0 +1,11 @@
<?php
require_once ('../connexionBD.php');
//Envoyer en json les villes correspondantes au champ de saisie pour les villes
if (isset($_GET['search'])){
$ville = strtolower(htmlentities(pg_escape_string ($_GET['search'])));
$result = pg_query_params($db, "SELECT codepostal, nomville FROM ville WHERE lower(nomVille) like lower($1);", array("%$ville%"));
$return_arr = pg_fetch_all($result);
echo json_encode($return_arr);
}
Loading…
Cancel
Save