Gestion de professeur en fonction de leur compétence

Pytchoun

Pytchoun Le 31 mai 2017 à 00:09 (Édité le 25 janvier 2019 à 17:53)

Bonjour,
Je suis face à un problème de taille.
Voici mon énoncé: Rentrer des professeurs (nom, prenom, compétences (html,css,php, etc..), et upload d'un CV) et ensuite pouvoir afficher et filtrer en fonction des compétences sélectionnées.
Voici la base de donnée faite, je pense qu'elle est fausse mais je n'arrive pas à trouver autre chose

Voici mes fichiers
index.php >>> L'inscription dans ma bdd n'est pas effectué.
<?php
require "functions.php";

$bdd = connectDb();

if(isset($_POST['valider'])) {
   $nom = htmlspecialchars($_POST['nom']);
   $prenom = htmlspecialchars($_POST['prenom']);
   if(isset($_POST["nom"]) && isset($_POST["prenom"]) && isset($_POST["competence"]) && isset($_POST["cv"])) {

   $params = [
   $_POST["nom"],
   $_POST["prenom"],
   $_POST["competence"],
   $_POST["cv"]
   ];

  $statement = $bdd->prepare('INSERT INTO professeur(nom, prenom, competence, cv) VALUES(?, ?, ?, ?)');
  $statement->execute($params);
  echo 'ok';
  } else {
    http_response_code(400);
  }
}
?>

<!DOCTYPE html>
<html lang="fr">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <title>CV des professeurs de l'ESGI</title>

    <meta name="description" content="Liste des professeurs de l'ESGI avec leurs compétences">

    <link rel="stylesheet" type="text/css" href="bootstrap/css/bootstrap.min.css">
    <link rel="stylesheet" type="text/css" href="css/style.css">

    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
    <!--[if lt IE 9]>
      <script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
      <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
  </head>
  <body>
    <header>
    </header>
    <section>
      <div class="container">
        <div class="row">
          <div class="col-sm-6 col-sm-offset-3">
            <h1>Ajout d'un professeur</h1>
            <form method="POST" action="upload.php" enctype="multipart/form-data">
              <div class="form-group">
                <label for="nom">Nom</label>
                <input type="text" class="form-control" id="nom" placeholder="Nom">
              </div>
              <div class="form-group">
                <label for="prenom">Prénom</label>
                <input type="text" class="form-control" id="prenom" placeholder="Prénom">
              </div>
              <div class="form-group">
                <label for="competence">Compétences</label>
                <div class="checkbox">
                  <label>
                    <input type="checkbox"> Algorithmique
                  </label>
                </div>
                <div class="checkbox">
                  <label>
                    <input type="checkbox"> Anglais
                  </label>
                </div>
                <div class="checkbox">
                  <label>
                    <input type="checkbox"> Langage C
                  </label>
                </div>
                <div class="checkbox">
                  <label>
                    <input type="checkbox"> HTML
                  </label>
                </div>
                <div class="checkbox">
                  <label>
                    <input type="checkbox"> CSS
                  </label>
                </div>
                <div class="checkbox">
                  <label>
                    <input type="checkbox"> PHP
                  </label>
                </div>
                <div class="checkbox">
                  <label>
                    <input type="checkbox"> Javascript
                  </label>
                </div>
                <div class="checkbox">
                  <label>
                    <input type="checkbox"> Architecture Web
                  </label>
                </div>
                <div class="checkbox">
                  <label>
                    <input type="checkbox"> Langage SQL
                  </label>
                </div>
                <div class="checkbox">
                  <label>
                    <input type="checkbox"> Virtualisation
                  </label>
                </div>
              </div>
              <div class="form-group">
                <label for="cv">Sélection du CV</label>
                <input type="hidden" name="MAX_FILE_SIZE" value="100000">
                <input type="file" name="cv" id="cv">
              </div>
              <button type="submit" name="valider" class="btn btn-default">Valider</button>
            </form>
          </div>
        </div>
      </div>
    </section>
    <footer>
    </footer>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
    <script src="js/bootstrap.min.js"></script>
  </body>
</html>
functions.php
<?php

function connectDb(){
    try{
            $db = new PDO('mysql:host=localhost;dbname=profesgi', 'root', '');
        }catch(Exception $e){
            die("Erreur SQL : ". $e->getMessage() );
        }
        return $db;
    }
    
?>
upload.php >>> Les fichiers .pdf ne se mettent pas dans le dossier alors que .docx oui.
<?php
$dossier = 'cv/';
$fichier = basename($_FILES['cv']['name']);
$taille_maxi = 100000;
$taille = filesize($_FILES['cv']['tmp_name']);
$extensions = array('.pdf', '.docx');
$extension = strrchr($_FILES['cv']['name'], '.');
//Début des vérifications de sécurité
if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
{
     $erreur = 'Vous devez uploader un fichier de type pdf ou docx.';
}
if($taille>$taille_maxi)
{
     $erreur = 'Le fichier est trop gros.';
}
if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
{
     //On formate le nom du fichier ici
     $fichier = strtr($fichier,
          'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
          'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
     if(move_uploaded_file($_FILES['cv']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné
     {
          echo 'Upload effectué avec succès !';
     }
     else //Sinon (la fonction renvoie FALSE)
     {
          echo 'Echec de l\'upload !';
     }
}
else
{
     echo $erreur;
}
?>
Pouvez-vous m'aider ? Merci.
TheOldNoob

TheOldNoob Le 31 mai 2017 à 09:34

Salut,
Tu n'a aucun message d'erreur?

Je conseil toujours de faire un if par input afin de savoir précisément ou est l'erreur. C'est surtout pour ton utilisateurs, si il y a un problème lors de sa saisie, il n'aura aucune idée d'ou il a merdé et va devoir tout recommencé. au bout de 3 fois, il va abandonné.
Ensuite, je vois pas comment tu récupère tes compétences.

Sinon, met la valeur de $taille_maxi plus grande pour faire des testes, car là tu est a moins d'1Mo est c'est très peu.
Pytchoun

Pytchoun Le 31 mai 2017 à 10:06

Je pas vraiment comment faire.
Ma base de donnée est surement fausse aussi :s

http://image.noelshack.com/fichiers/2017/22/1496217978-bdd.png

J'ai aussi augmenté la taille mais ca ne change rien pour le pdf
TheOldNoob

TheOldNoob Le 31 mai 2017 à 13:36

Tu peu t'inspiré de ce mini tuto que j'ai fait.

https://www.primfx.com/forum/programmation/php/mini-tuto-bien-verifie-proteger-formulaire-php-888
Vous devez être connecté pour poster une réponse. Se connecter ou Créer un compte