Bonjour,
J'ai presque fini mon systèmes d'article et il me manque juste un truc à finir, l'upload d'image.
Je ne sais pas comment réaliser ceci, et comment autorisé un certain type de fichier.
J'aimerais stocker les fichiers dans un dossier et mettre juste le nom dans la base de donnée
Voici mon compte php
if(!empty($_POST)){
$errors = array();
if(empty($_POST['title'])){
$errors['title'] = "Impossible d'entrer un titre vide";
}
if(empty($_POST['image'])){
$errors['image'] = "Merci d'entrer l'url d'une image";
}
if(empty($_POST['slug']) || !preg_match('/^[a-zA-Z0-9_-]+$/', $_POST['slug'])){
$errors['slug'] = "Slug non valide";
}
if(empty($_POST['content'])){
$errors['content'] = "Merci d'entrer un contenu";
}
if(empty($errors)){
try {
$req = $pdo->prepare("UPDATE articles SET title = ?, slug = ?, image = ?, content = ?, modified_at = NOW(), modified_by = ?");
$pdo->exec("SET CHARACTER SET utf8");
$req->execute([
$_POST['title'],
$_POST['slug'],
$_POST['image'],
$_POST['content'],
$_SESSION['auth']->id
]);
session_start();
$_SESSION['flash']['green'] = 'Article modifié';
header('Location: ' . $site_url . '/article?id=' . $_GET['id'] . '&slug=' . $_POST['slug']);
}catch(PDOException $e){
echo $e;
}
}
}
Si vous pouvez me donner un petit coup de main, merci
tu peux verifier le type de fichier avec avec la la variable superglobale
$_FILES['monfichier']['type'].
Pareil pour le nom tu peux le recuperer a l'aide de
$_FILES['monfichier']['name'].
N'oublie pas d'ajouter l'attribut
enctype="multipart/form-data"
à ton formulaire. et pour l'input c'est tout simplement
<input type="file" name="monfichier" />
Edit : j'oubliais, tu peux deplacer les fichier a la l'aide de la fonction php suivante : move_uploaded_file
Avec ca, tu devrais pouvoir t'en sortir
// ETAPE 1 : Configuration
$validExt = array(
'png',
'jpg',
'...'
);
// ETAPE 2 : Vérification
$ext = EXTENTION;
if(!in_array($ext, $validExt)){
die() // Pas ok sur l'extension
} else {
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, -url-);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($curl);
curl_close($curl);
$fp = fopen('destination','a+');
fwrite($fp, $data);
fclose($fp);
}
// BDD
A mon avis, faut que tu suives cette architecture
Si tu as besoin d'un bout de code n'hésite pas ! :)
@Bowser65
Merci de ta réponse, oui si tu pourrais me fournir un bout de code, car la je suis perdu :')
C'est vraiment succinct, mais ca te donne les bases, penses également a verifier et limiter la taille des fichiers. Si vraiment tu n'arrives pas t'en sortir, n'hésites pas a redemander de l'aide
J'ai récupéré un script sur internet, comme je pourrais modifier le nom de l'image lorsqu'elle est sauvegardé et récupéré le nom par exemple:
Le fichier X.png a bien été uploadé
if( isset($_POST['upload']) ) // si formulaire soumis
{
$content_dir = 'upload/'; // dossier où sera déplacé le fichier
$tmp_file = $_FILES['fichier']['tmp_name'];
if( !is_uploaded_file($tmp_file) )
{
exit("Le fichier est introuvable");
}
// on vérifie maintenant l'extension
$type_file = $_FILES['fichier']['type'];
if( !strstr($type_file, 'jpg') && !strstr($type_file, 'jpeg') && !strstr($type_file, 'bmp') && !strstr($type_file, 'gif') )
{
exit("Le fichier n'est pas une image");
}
// on copie le fichier dans le dossier de destination
$name_file = $_FILES['fichier']['name'];
if( !move_uploaded_file($tmp_file, $content_dir . $name_file) )
{
exit("Impossible de copier le fichier dans $content_dir");
}
var_dump($_POST);
echo "Le fichier a bien été uploadé";
}
merci
Dans le script que tu as là, modifie la valeur de $name_file. Pour recuperer le nom du fichier, bah utilise aussi $name_file
Le script fonctionne bien sur une page vide mais lorsque que j'essaye de le mettre sur le reste de mon script $_FILES est vide
j'ai bien mis le form enctype="multipart/form-data"
<div class="input-field col s6 white-text"><input type="file" name="fichier" size="30"></div>
$content_dir = '../upload';
$tmp_file = $_FILES['fichier']['tmp_name'];
if( !is_uploaded_file($tmp_file) )
{
$errors['image'] = 'Merci de renseigner une image';
}
// on vérifie maintenant l'extension
$type_file = $_FILES['fichier']['type'];
if(!strstr($type_file, 'jpg') && !strstr($type_file, 'jpeg') && !strstr($type_file, 'png') && !strstr($type_file, 'gif')){
$errors['image'] = 'Le fichier envoyé n\'est pas une image';
}
$str = 'abc32EGG64fefrgFEe654ZFKJZDF';
$shuffled = str_shuffle($str);
$name_file = $shuffled . $_FILES['fichier']['name'];
if(!move_uploaded_file($tmp_file, $content_dir . $name_file)){
$errors['image'] = 'Impossible de copier le fichier dans ' . $content_dir;
}