par
moogli » 18 oct. 2016, 12:51
salut,
tu as des petit soucis d'indentation et d'organisation du code, c'est le souk la dedans

par exemple error_reporting(E_ALL); en fin de fichier ça sert à rien c'est au début qu'il faut le mettre
en indentant correctement le code et en factorisant un peu on obtient ceci
<?php
error_reporting(E_ALL);
include('include/bdd.inc.php');
function filter($in)
{
$search = array('@[éèêëÊË]@i', '@[àâäÂÄ]@i', '@[îïÎÏ]@i', '@[ûùüÛÜ]@i', '@[ôöÔÖ]@i', '@[ç]@i', '@[ ]@', '@[\']@');
$replace = array('e', 'a', 'i', 'u', 'o', 'c', '_', '');
return preg_replace($search, $replace, $in);
}
function fileNameFormat($fileName){
$fileName = strtr($fileName,
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
return preg_replace('/([^.a-z0-9]+)/i', '-', $fileName);
}
$nom = htmlspecialchars($_POST['nom']);
if (isset($_POST['actif'])) {
echo $actif=1 ;
} else {
echo $actif=0;
}
if (isset($_FILES['fichier_gp'])) {
echo '<br>' .$fichier_gp;
$dossier = 'ressources/guides_pratiques/';
echo '<br>' .$dossier;
$fichier_gp = basename($_FILES['fichier_gp']['name']);
$taille_maxi = 10000000;
$taille = filesize($_FILES['fichier_gp']['tmp_name']);
$extension = strrchr($_FILES['fichier_gp']['name'], '.');
//Début des vérifications de sécurité...
$erreur = '';
// as tu pensé à la casse ? (pdf c'est pas la même chose que PDF même si wondows dit le contraire ;) )
if ($extension != '.pdf') {
$erreur .= '<br> Vous devez uploader un fichier de type pdf...';
}
if ($taille>$taille_maxi) {
$erreur .= '<br> Le fichier est trop gros...';
}
if (empty($erreur)) { //S'il n'y a pas d'erreur, on upload
//On formate le nom du fichier ici...
$fichier_gp = fileNameFormat($fichier_gp);
//Si la fonction renvoie TRUE, c'est que ça a fonctionné...
if (move_uploaded_file($_FILES['fichier_gp']['tmp_name'], $dossier . $fichier_gp)) {
echo '<br> Upload PDF a effectué avec succès !';
} else { //Sinon (la fonction renvoie FALSE).
echo '<br> Echec de l\'upload PDF!';
echo '<br> chemin de destination =>' . $dossier . $fichier_gp;
}
} else {
echo $erreur;
}
}
if (isset($_FILES['image_gp'])) {
echo '<br>' .$image_gp;
$dossier = 'image/guides_pratiques/';
echo '<br>' .$dossier;
$image_gp = basename($_FILES['image_gp']['name']);
echo '<br>' . $_FILES['image_gp']['tmp_name'];
$taille_maxi = 100000;
$taille = filesize($_FILES['image_gp']['tmp_name']);
$extension = strrchr($_FILES['image_gp']['name'], '.');
$erreur = '';
//Si l'extension n'est pas dans le tableau
if ($extension != '.png') {
$erreur .= '<br> Vous devez uploader un fichier de type png...';
}
if ($taille>$taille_maxi) {
$erreur .= '<br> Le fichier est trop gros...';
}
if (empty($erreur)) { //S'il n'y a pas d'erreur, on upload
//On formate le nom du fichier ici...
$image_gp = fileNameFormat($image_gp);
if (move_uploaded_file($_FILES['image_gp']['tmp_name'], $dossier . $image_gp)) { //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
echo '<br> Upload a IMAGE effectué avec succès !';
} else { //Sinon (la fonction renvoie FALSE).
echo '<br> Echec de l\'upload IMAGE !';
echo '<br> chemin de destination =>' . $dossier . $image_gp;
}
} else {
echo $erreur;
}
}
// alors ça du coup y a de grande chance que ça foire si l'un des deux upload à merdé ;)
if (empty($erreur)) {
$req = $bdd->prepare('INSERT INTO guides_pratiques(nom, fichier_gp, image_gp, actif) VALUES (:nom, :fichier_gp, :image_gp, :actif)');
$req->execute(array(
'nom' => $nom,
'fichier_gp' => $fichier_gp,
'image_gp' => $image_gp,
'actif' => $actif
));
}
// header('location:guides_pratiques.php');
j'ai viré les tests sur l’existence des répertoire de destination, c'est a toi de les créer, l'utilisateur se fout de savoir comment c'est stocké
Perso je pencherais plutôt pour un code comme celui, plus de factorisation, moins d'erreur et plus simple à lire et maintenir
<?php
error_reporting(E_ALL);
include('include/bdd.inc.php');
function filter($in)
{
$search = array('@[éèêëÊË]@i', '@[àâäÂÄ]@i', '@[îïÎÏ]@i', '@[ûùüÛÜ]@i', '@[ôöÔÖ]@i', '@[ç]@i', '@[ ]@', '@[\']@');
$replace = array('e', 'a', 'i', 'u', 'o', 'c', '_', '');
return preg_replace($search, $replace, $in);
}
/**
* Format correctement le nom du fichier pour écriture sur le file système
* TODO : prendre en compte les espaces et les supprimer
**/
function fileNameFormat($fileName)
{
$fileName = strtr($fileName,
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
return preg_replace('/([^.a-z0-9]+)/i', '-', $fileName);
}
/**
* Traitement de l'upload du fichier générique afin de le réemployer au besoin.
* TODO : le paramètre $allowedExtension peux être modifié en tabeleau s'il y a besoin d'avoir plusieurs extension possible
* FIXME : prendre en compte le type mime fournit par le fichier (ou mieux le détecter si possible) parce que n'importe qui sais modifier une extension de fichier.
**/
function upload($files, $dossier, $allowedExtension)
{
$dirLen = strlen($dossier)-1;
if ((strrpos($dossier, '/') != $dirLen) || strrpos($dossier, '\\') != $dirLen) {
$dossier .= '/';
}
$fileName = basename($files['name']);
$taille_maxi = 10000000;
$taille = filesize($files['tmp_name']);
$extension = strrchr($files['name'], '.');
//Début des vérifications de sécurité...
$erreur = '';
// as tu pensé à la casse ? (pdf c'est pas la même chose que PDF même si wondows dit le contraire ;) )
if ($extension != $allowedExtension) {
$erreur .= '<br> Vous devez uploader un fichier de type '.$allowedExtension.'...';
}
if ($taille > $taille_maxi) {
$erreur .= '<br> Le fichier est trop gros...';
}
if (empty($erreur)) { //S'il n'y a pas d'erreur, on upload
//On formate le nom du fichier ici...
$fileName = fileNameFormat($fileName);
//Si la fonction renvoie TRUE, c'est que ça a fonctionné...
if (move_uploaded_file($files['tmp_name'], $dossier . $fileName)) {
echo '<br> Upload PDF a effectué avec succès !';
} else { //Sinon (la fonction renvoie FALSE).
$erreur .= '<br> Echec de l\'upload PDF!';
$erreur .= '<br> chemin de destination =>' . $dossier . $fileName;
}
}
$r = ['result' => true,'finalName' => $fileName];
if (!empty($erreur)) {
$r['error'] = $erreur;
$r['result'] = false;
}
return $r;
}
$dataInsert = [];
if (isset($_FILES['fichier_gp'])) {
$r = upload($_FILES['fichier_gp'], 'ressources/guides_pratiques/', '.pdf');
if ($r['result'] === true) {
echo '<br> Upload PDF a effectué avec succès !';
$dataInsert['fichier_gp'] = $r['finalName'];
} else {
echo $r['error'];
}
}
if (isset($_FILES['image_gp'])) {
$r = upload($_FILES['image_gp'], 'ressources/guides_pratiques/', '.png');
if ($r['result'] === true) {
echo '<br> Upload de l\'image a effectué avec succès !';
$dataInsert['image_gp'] = $r['finalName'];
} else {
echo $r['error'];
}
}
if (!empty($dataInsert['image_gp']) && !empty($dataInsert['fichier_gp'])) {
$req = $bdd->prepare('INSERT INTO guides_pratiques(nom, fichier_gp, image_gp, actif) VALUES (:nom, :fichier_gp, :image_gp, :actif)');
$nom = htmlspecialchars($_POST['nom']);
$req->bindValue(':nom', $nom);
$req->bindValue(':fichier_gp', $dataInsert['fichier_gp']);
$req->bindValue(':image_gp', $dataInsert['image_gp']);
$actif = !empty($_POST['actif'])?1:0;
$req->bindValue(':actif', $actif);
if (!$req->execute()) {
// FIXME : récupérer le message d'erreur $req->errorInfo() et l'afficher correctement
// penser que PDO, par défaut lève aussi une exception en cas d'erreur du coup il faut la "catcher"
echo 'erreur execution SQL. ';
}
}
quand au reste, il faut déboguer ton code, soit avec un IDE et mode "debug" soit en ajoutant des var_dump un peu partout.
dans ton cas un var_dump($_POST,$_FILES); au début devrait t'éclairer sur le contenu des variables et ce qui ce passe.
@+
salut,
tu as des petit soucis d'indentation et d'organisation du code, c'est le souk la dedans ;)
par exemple error_reporting(E_ALL); en fin de fichier ça sert à rien c'est au début qu'il faut le mettre ;)
en indentant correctement le code et en factorisant un peu on obtient ceci
[php]<?php
error_reporting(E_ALL);
include('include/bdd.inc.php');
function filter($in)
{
$search = array('@[éèêëÊË]@i', '@[àâäÂÄ]@i', '@[îïÎÏ]@i', '@[ûùüÛÜ]@i', '@[ôöÔÖ]@i', '@[ç]@i', '@[ ]@', '@[\']@');
$replace = array('e', 'a', 'i', 'u', 'o', 'c', '_', '');
return preg_replace($search, $replace, $in);
}
function fileNameFormat($fileName){
$fileName = strtr($fileName,
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
return preg_replace('/([^.a-z0-9]+)/i', '-', $fileName);
}
$nom = htmlspecialchars($_POST['nom']);
if (isset($_POST['actif'])) {
echo $actif=1 ;
} else {
echo $actif=0;
}
if (isset($_FILES['fichier_gp'])) {
echo '<br>' .$fichier_gp;
$dossier = 'ressources/guides_pratiques/';
echo '<br>' .$dossier;
$fichier_gp = basename($_FILES['fichier_gp']['name']);
$taille_maxi = 10000000;
$taille = filesize($_FILES['fichier_gp']['tmp_name']);
$extension = strrchr($_FILES['fichier_gp']['name'], '.');
//Début des vérifications de sécurité...
$erreur = '';
// as tu pensé à la casse ? (pdf c'est pas la même chose que PDF même si wondows dit le contraire ;) )
if ($extension != '.pdf') {
$erreur .= '<br> Vous devez uploader un fichier de type pdf...';
}
if ($taille>$taille_maxi) {
$erreur .= '<br> Le fichier est trop gros...';
}
if (empty($erreur)) { //S'il n'y a pas d'erreur, on upload
//On formate le nom du fichier ici...
$fichier_gp = fileNameFormat($fichier_gp);
//Si la fonction renvoie TRUE, c'est que ça a fonctionné...
if (move_uploaded_file($_FILES['fichier_gp']['tmp_name'], $dossier . $fichier_gp)) {
echo '<br> Upload PDF a effectué avec succès !';
} else { //Sinon (la fonction renvoie FALSE).
echo '<br> Echec de l\'upload PDF!';
echo '<br> chemin de destination =>' . $dossier . $fichier_gp;
}
} else {
echo $erreur;
}
}
if (isset($_FILES['image_gp'])) {
echo '<br>' .$image_gp;
$dossier = 'image/guides_pratiques/';
echo '<br>' .$dossier;
$image_gp = basename($_FILES['image_gp']['name']);
echo '<br>' . $_FILES['image_gp']['tmp_name'];
$taille_maxi = 100000;
$taille = filesize($_FILES['image_gp']['tmp_name']);
$extension = strrchr($_FILES['image_gp']['name'], '.');
$erreur = '';
//Si l'extension n'est pas dans le tableau
if ($extension != '.png') {
$erreur .= '<br> Vous devez uploader un fichier de type png...';
}
if ($taille>$taille_maxi) {
$erreur .= '<br> Le fichier est trop gros...';
}
if (empty($erreur)) { //S'il n'y a pas d'erreur, on upload
//On formate le nom du fichier ici...
$image_gp = fileNameFormat($image_gp);
if (move_uploaded_file($_FILES['image_gp']['tmp_name'], $dossier . $image_gp)) { //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
echo '<br> Upload a IMAGE effectué avec succès !';
} else { //Sinon (la fonction renvoie FALSE).
echo '<br> Echec de l\'upload IMAGE !';
echo '<br> chemin de destination =>' . $dossier . $image_gp;
}
} else {
echo $erreur;
}
}
// alors ça du coup y a de grande chance que ça foire si l'un des deux upload à merdé ;)
if (empty($erreur)) {
$req = $bdd->prepare('INSERT INTO guides_pratiques(nom, fichier_gp, image_gp, actif) VALUES (:nom, :fichier_gp, :image_gp, :actif)');
$req->execute(array(
'nom' => $nom,
'fichier_gp' => $fichier_gp,
'image_gp' => $image_gp,
'actif' => $actif
));
}
// header('location:guides_pratiques.php');[/php]
j'ai viré les tests sur l’existence des répertoire de destination, c'est a toi de les créer, l'utilisateur se fout de savoir comment c'est stocké ;)
Perso je pencherais plutôt pour un code comme celui, plus de factorisation, moins d'erreur et plus simple à lire et maintenir
[php]<?php
error_reporting(E_ALL);
include('include/bdd.inc.php');
function filter($in)
{
$search = array('@[éèêëÊË]@i', '@[àâäÂÄ]@i', '@[îïÎÏ]@i', '@[ûùüÛÜ]@i', '@[ôöÔÖ]@i', '@[ç]@i', '@[ ]@', '@[\']@');
$replace = array('e', 'a', 'i', 'u', 'o', 'c', '_', '');
return preg_replace($search, $replace, $in);
}
/**
* Format correctement le nom du fichier pour écriture sur le file système
* TODO : prendre en compte les espaces et les supprimer
**/
function fileNameFormat($fileName)
{
$fileName = strtr($fileName,
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
return preg_replace('/([^.a-z0-9]+)/i', '-', $fileName);
}
/**
* Traitement de l'upload du fichier générique afin de le réemployer au besoin.
* TODO : le paramètre $allowedExtension peux être modifié en tabeleau s'il y a besoin d'avoir plusieurs extension possible
* FIXME : prendre en compte le type mime fournit par le fichier (ou mieux le détecter si possible) parce que n'importe qui sais modifier une extension de fichier.
**/
function upload($files, $dossier, $allowedExtension)
{
$dirLen = strlen($dossier)-1;
if ((strrpos($dossier, '/') != $dirLen) || strrpos($dossier, '\\') != $dirLen) {
$dossier .= '/';
}
$fileName = basename($files['name']);
$taille_maxi = 10000000;
$taille = filesize($files['tmp_name']);
$extension = strrchr($files['name'], '.');
//Début des vérifications de sécurité...
$erreur = '';
// as tu pensé à la casse ? (pdf c'est pas la même chose que PDF même si wondows dit le contraire ;) )
if ($extension != $allowedExtension) {
$erreur .= '<br> Vous devez uploader un fichier de type '.$allowedExtension.'...';
}
if ($taille > $taille_maxi) {
$erreur .= '<br> Le fichier est trop gros...';
}
if (empty($erreur)) { //S'il n'y a pas d'erreur, on upload
//On formate le nom du fichier ici...
$fileName = fileNameFormat($fileName);
//Si la fonction renvoie TRUE, c'est que ça a fonctionné...
if (move_uploaded_file($files['tmp_name'], $dossier . $fileName)) {
echo '<br> Upload PDF a effectué avec succès !';
} else { //Sinon (la fonction renvoie FALSE).
$erreur .= '<br> Echec de l\'upload PDF!';
$erreur .= '<br> chemin de destination =>' . $dossier . $fileName;
}
}
$r = ['result' => true,'finalName' => $fileName];
if (!empty($erreur)) {
$r['error'] = $erreur;
$r['result'] = false;
}
return $r;
}
$dataInsert = [];
if (isset($_FILES['fichier_gp'])) {
$r = upload($_FILES['fichier_gp'], 'ressources/guides_pratiques/', '.pdf');
if ($r['result'] === true) {
echo '<br> Upload PDF a effectué avec succès !';
$dataInsert['fichier_gp'] = $r['finalName'];
} else {
echo $r['error'];
}
}
if (isset($_FILES['image_gp'])) {
$r = upload($_FILES['image_gp'], 'ressources/guides_pratiques/', '.png');
if ($r['result'] === true) {
echo '<br> Upload de l\'image a effectué avec succès !';
$dataInsert['image_gp'] = $r['finalName'];
} else {
echo $r['error'];
}
}
if (!empty($dataInsert['image_gp']) && !empty($dataInsert['fichier_gp'])) {
$req = $bdd->prepare('INSERT INTO guides_pratiques(nom, fichier_gp, image_gp, actif) VALUES (:nom, :fichier_gp, :image_gp, :actif)');
$nom = htmlspecialchars($_POST['nom']);
$req->bindValue(':nom', $nom);
$req->bindValue(':fichier_gp', $dataInsert['fichier_gp']);
$req->bindValue(':image_gp', $dataInsert['image_gp']);
$actif = !empty($_POST['actif'])?1:0;
$req->bindValue(':actif', $actif);
if (!$req->execute()) {
// FIXME : récupérer le message d'erreur $req->errorInfo() et l'afficher correctement
// penser que PDO, par défaut lève aussi une exception en cas d'erreur du coup il faut la "catcher"
echo 'erreur execution SQL. ';
}
}[/php]
quand au reste, il faut déboguer ton code, soit avec un IDE et mode "debug" soit en ajoutant des var_dump un peu partout.
dans ton cas un var_dump($_POST,$_FILES); au début devrait t'éclairer sur le contenu des variables et ce qui ce passe.
@+