summaryrefslogtreecommitdiff
path: root/articles/ajoutarticle.php
blob: 56f63a10c06b404cfe5772cdf89b3b1e29abe2a1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
<?php
// PAGE SÉCURISÉE ! impossible de la voir si la variable $_SESSION['mdpvalide'] ne vaut pas 1

session_start();
if (isset ($_SESSION["mdpvalide"]))
{
    if($_SESSION["mdpvalide"]) // booléen, test si ça vaut 1
    {} // dans ce cas on fait rien et on laisse php lire la suite
    else
    {
        header('Location: ../connexion.php');
        exit ();
        // exit() sert à interrompre php qui n'a alors surtout pas besoin d'aller jusqu'en bas de la page
    }
}
else
{
    header('Location: ../connexion.php');
    exit ();
}


// connexion à la base de données
include("../connexionbase.php");


// récupérer les POST, complèter la base et uploader des photos
if (isset ($_FILES['photo']) AND $_FILES['photo']['error'] == 1) // fichier trop lourd
{
    header('Location: ../administration.php?nouvarticle=2');
    exit ();
}
elseif ($_FILES['photo']['error'] == 0 AND $_POST['titre'] != '') // présence d'un titre
{
    // extension du fichier
    $infophoto = pathinfo ($_FILES['photo']['name']); // pathinfo renvoie un tableau, qui contient notamment l'extension du fichier
    $extautorisées = array ('jpg', 'jpeg', 'png', 'gif', 'JPG', 'JPEG', 'PNG', 'GIF');
    if (in_array ($infophoto['extension'], $extautorisées)) // on compare l'extension dans le tableau avec les extensions qu'on a choisi
    {
        // on récupère la variable $nom
        $nom = basename ($_FILES['photo']['name']);
        
        // vérification et formatage du nom du fichier
        // supprimer les accents, problème: la méthode avec la fonction strstr marche mal avec l'UTF-8,
        // on préfèrera celle-ci qui utilise str_replace et qui marche mieux (mais pas avec les majuscules accentuées):
        $nom = str_replace(
            array('à','â','ä','á','ã','å','î','ï','ì','í','ô','ö','ò','ó','õ','ø','ù','û','ü','ú','é','è','ê','ë','ç','ÿ','ñ'),
            array('a','a','a','a','a','a','i','i','i','i','o','o','o','o','o','o','u','u','u','u','e','e','e','e','c','y','n'),
            $nom);
        // minuscules
        $nom = mb_strtolower($nom, 'UTF-8');    
        $infophoto['extension'] = mb_strtolower($infophoto['extension'], 'UTF-8');
        // ce qui n'est pas une lettre ou un chiffre est remplacé par un tiret, y compris les espaces
        $nom = preg_replace('/([^.a-z0-9]+)/i', '-', $nom);
        
        // ajout article avec photo
        if (move_uploaded_file ($_FILES['photo']['tmp_name'], '/var/www/lelionetlecolibri.ordipolo.fr/articles/' . $nom))
        // on doit pouvoir écrire dans le dossier d'arrivée (mettre le chemin absolu) et dans /tmp
        // pour permettre à PHP l'écriture et la traversée du dossier, taper: sudo chmod 733 /var/www/dossier/qu'on/veut
        {
			// nom de la miniature
			$mini_nom = "mini_" . $nom;
			
            $requête = $base->prepare('INSERT INTO articles (nomarticle, contenu, nomphoto, miniature) VALUES (?, ?, ?, ?)');
            $requête->execute(array(
                $_POST['titre'],
                $_POST['article'],
                $nom,
                $mini_nom));
            
            // création de la miniature
            include("miniatures.php");
			
            header('Location: ../administration.php?nouvarticle=5'); // succès, move_uploaded_file renvoie la valeur TRUE
            exit ();
        }
        else // echec à l'enregistrement, la fonction renvoie FALSE
        {
            header('Location: ../administration.php?nouvarticle=4');
            exit ();
        }
    }
    else // mauvais format
    {
        header('Location: ../administration.php?nouvarticle=3');
        exit ();
    }
}
elseif ($_POST['titre'] != '') // article sans photo
{
    $requête = $base->prepare('INSERT INTO articles (nomarticle, contenu) VALUES (?, ?)');
    $requête->execute(array(
        $_POST['titre'],
        $_POST['article']));
    
    header('Location: ../administration.php?nouvarticle=5');
    exit ();
}
else // pas de titre
{
    header('Location: ../administration.php?nouvarticle=1');
}
?>