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 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172
| <?php
error_reporting(E_ALL);
ini_set('display_errors', true); // les booléens en minuscules, on est plus en 2003
ini_set('display_startup_errors', true);
// on n'hésite pas à sauter des lignes
require '../components/connect.php'; // require plutôt qu'include quand c'est indispensable, voire require_once pour ne pas insérer 2 fois la même chose
/*
if (isset($_COOKIE['tutor_id'])) { // on met des espaces pour aérer
$tutor_id = $_COOKIE['tutor_id']; // on indente avec 4 espaces pas 3
} else {
$tutor_id = ''; // à quoi bon définir une variable avant une redirection ?
header('location:login.php');
}
*/ // autant l'écrire de cette manière
if (!isset($_COOKIE['tutor_id'])) {
header('location:login.php');
}
$tutor_id = $_COOKIE['tutor_id'];
/* à mettre aprés le test d'existence de $_POST['submit'] pas avant!
echo '<pre>', print_r($_FILES, true), '</pre>'; // Valorisé ?
echo '<pre>', print_r($_POST, true), '</pre>'; // Valorisé ?
*/
if (isset($_POST['submit'])) {
// à ce stade les variables $title et $description ne sont pas définies
// echo "[DEBUG] tutor_id=[{$tutor_id}], title=[{$title}], description=[{$description}]";
$id = create_unique_id(); /* où est définie cette fonction?
De plus mieux vaut laisser le soin à MySQL de créer un id unique en plaçant la colonne id de la table content en auto_increment.
Dans ce cas, il suffit de retirer l'id de la requête d'insertion, MySQL créera une valeur unique tout seul. */
$status = $_POST['status'];
$status = filter_var($status, FILTER_SANITIZE_STRING);
$title = $_POST['title'];
$title = filter_var($title, FILTER_SANITIZE_STRING);
$description = $_POST['description'];
$description = filter_var($description, FILTER_SANITIZE_STRING);
$playlist_id = $_POST['playlist'];
$playlist_id = filter_var($playlist_id, FILTER_SANITIZE_STRING);
$thumb = $_FILES['thumb']['name'];
$thumb = filter_var($thumb, FILTER_SANITIZE_STRING);
$thumb_ext = pathinfo($thumb, PATHINFO_EXTENSION);
$rename_thumb = create_unique_id() . '.' . $thumb_ext; // où est définie la fonction create_unique_id() ?
$thumb_size = $_FILES['thumb']['size'];
$thumb_tmp_name = $_FILES['thumb']['tmp_name'];
$thumb_folder = '../uploaded_files/' . $rename_thumb;
$video = $_FILES['video']['name'];
$video = filter_var($video, FILTER_SANITIZE_STRING);
$video_ext = pathinfo($video, PATHINFO_EXTENSION);
$rename_video = create_unique_id() . '.' . $video_ext;
$video_tmp_name = $_FILES['video']['tmp_name'];
$video_size = $_FILES['video']['size'];
$video_folder = '../uploaded_files/' . $rename_video;
/////////////////////////////////////////////////////////////////////////////////////////////
// dans cette partie on teste si un enregistrement existe déjà avant de l'insérer,
// mais il est possible de faire autrement: ajouter une contrainte d'unicité pour
// la table `content` pour l'ensemble des 3 colonnes tutor_id, title et description.
// Dans ce cas plus besoin de faire un test au préalable, on fait directement l'insertion.
/////////////////////////////////////////////////////////////////////////////////////////////
/*$sql = "select * from content where tutor_id = ? and title = ? and description = ?"; */
// pourquoi "select *"? On se fiche des colonnes renvoyées par la requête on veut juste voir s'il est déjà présent
$query = <<<'SQL'
SELECT 1
FROM content
WHERE tutor_id = ?
AND title = ?
AND description = ?
SQL;
// il faut choisir entre les placeholders nommés et les '?'
// $description = [':description' => $description];
$verify_content =$conn->prepare($query);
$verify_content->execute([$tutor_id, $title, $description]);
if ($verify_content->fetch_column()) {
$message[] = 'content already created!';
} else {
move_uploaded_file($thumb_tmp_name, $thumb_folder); // ces opérations peuvent échouer, il faut tester leur retour et aviser
move_uploaded_file($video_tmp_name, $video_folder);
$query = "INSERT INTO content(id, tutor_id, playlist_id, title, description, video, thumb, status) VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
$stmt = $conn->prepare($query);
$stmt->execute([$id, $tutor_id, $playlist_id, $title, $description, $rename_video, $rename_thumb, $status]);
$message[] = 'new course uploaded!';
}
////////////////////////////////////////////////////////////////////////////////////////////
}
?><!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Dashboard</title>
<!-- font awesome cdn link -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.2.0/css/all.min.css">
<!-- custom css file link -->
<link rel="stylesheet" href="../css/admin_style.css">
</head>
<body>
<?php include '../components/admin_header.php'; ?>
<section class="video-form">
<h1 class="heading">upload content</h1>
<form action="" method="post" enctype="multipart/form-data">
<label for="status">video status <span>*</span></label>
<select id="status" name="status" class="box" required>
<option value="" selected disabled>-- select status</option>
<option value="active">active</option>
<option value="desactive">desactive</option>
</select>
<label for="title">video title <span>*</span></label>
<input id="title" type="text" name="title" maxlength="100" required placeholder="enter video title" class="box"/>
<label for="description">video description <span>*</span></label>
<textarea id="description" name="description" class="box" required placeholder="write description" maxlength="1000" cols="30" rows="10"></textarea>
<label for="playlist">video playlist <span>*</span></label>
<select id="playlist" name="playlist" class="box" required>
<option value="" disabled selected>--select playlist</option>
<?php
$stmt_playlists = $conn->prepare('SELECT id, title FROM playlist WHERE tutor_id = ?');
$stmt_playlists->execute([$tutor_id]);
$playlists = $stmt_playlists->fetchAll(); ?>
<?php foreach ($playlists as $playlist): ?>
<option value="<?= $playlist['id'] ?>"><?= $playlist['title'] ?></option>
<?php endforeach; ?>
<?php if (empty($playlists)): ?>
<option value="" disabled>no playlist created yet!</option>
<?php endif; ?>
</select>
<label for="thumb">select thumbnail <span>*</span></label>
<input id="thumb" type="file" name="thumb" accept="image/*" required class="box"/>
<label for="video">select video <span>*</span></label>
<input id="video" type="file" name="video" accept="video/*" required class="box">
<input type="submit" value="upload video" name="submit" class="btn">
</form>
</section>
<?php include '../components/footer.php'; ?>
<script src="../js/admin_script.js"></script>
</body>
</html> |
Partager