8791 sujets

Développement web côté serveur, CMS

Bonsoir,
J'ai une table mysql nommée cours dans laquelle je stock mes cours en divers formats,
chaque fichier a une adresse de genre fiche_cours/7e51990b91cb3f949c17d62815a6b15a.doc,
pour garantir que jamais deux fichiers auront le même nom dans le même dossier fiche_cours

Le problème que lorsque un candidat veut télécharger un cours il sera téléchargé par un nom bizarre non significatif, Alors y-il une solution pour que les fichiers seront télécharger avec un logique ?

Merci Smiley biggrin
Ajouter la date d'upload en début de fichier + par exemple le nom du cours ?. C'est signifiant, ça peut certainement garantir l'unicité.
La documentation PHP donne l'exemple suivant :
http://php.net/manual/fr/function.header.php

// Vous voulez afficher un pdf
header('Content-type: application/pdf');

// Il sera nommé downloaded.pdf
header('Content-Disposition: attachment; filename="downloaded.pdf"');

// Le source du PDF original.pdf
readfile('original.pdf');

Modifié par moust (25 May 2011 - 10:37)
Merci j-e-r-o-m, et moust
Mais comment je peux intégrer le nom du cours ?

Voila mon code:
 <?php  
      $sql11="select * from cours where active='1'";
      $res=mysql_query($sql11);
      while($ligne=mysql_fetch_array($res)){ ?>
      <tr><td >Titre: <strong><?php echo $ligne['titre_cours']; ?></strong></td>
      <td > De spécialité:<strong><?php echo $ligne['specialite_cours']; ?></strong></td>
      <td > Proposé par: <strong><?php echo $ligne['auteur_cours']; ?></strong></td>
      <td >Le:<strong><?php echo $ligne['date_cours']; ?></strong></td>
      <td ><a href="<?php echo  $ligne['fiche_cours']; ?>"><img src="images/download.png" width="25px" /></a></td>
      <td >&nbsp;</td>
      <?php } ?>
       

Modifié par kbma (25 May 2011 - 16:22)
Il te faut passer par un fichier php intermédiaire pour le téléchargement.

Lien de téléchargement dans lequel tu fais passer l'id du cours à télécharger.
<a href="download.php?id_cours=1">Télécharger le cours</a>


Script PHP qui récupère le fichier et lance le téléchargement

if( !isset($_GET['id_cours']) || empty($_GET['id_cours']) ) {
	exit('Cours non défini');
}

// récupération de l'id du cours
$id_cours = mysql_real_escape_string($_GET['id_cours']);

// récupération du cours dans la bdd
$query = mysql_query("SELECT * FROM cours WHERE id=$id_cours"); 

if( mysql_num_rows($query) == 0 ) {
	exit('Cours introuvable');
}

$cours = mysql_fetch_assoc($query);

// définition de l'entête
// à adapter en fonction du type de fichier
header('Content-type: application/pdf'); 
// nom du fichier
header('Content-Disposition: attachment; filename="'.$cours['titre_cours'].'.pdf"'); 

// affichage du fichier
readfile($cours['fiche_cours']);


(Je n'ai pas testé mon code car c'est à titre indicatif. À toi de tester et adapter...)
merci infiniment moust ça marche bien,
et voila ma code finale:
<?php
 session_start();
if(!isset($_SESSION['acces']))
{
	header('index.php');
}
include('admin/config.php');
connexion();
mysql_query("SET NAMES 'utf8'");


if( !isset($_GET['id_cours']) || empty($_GET['id_cours']) ) { 
    exit('Cours non défini'); 
} 
 
// récupération de l'id du cours 
$id_cours = mysql_real_escape_string($_GET['id_cours']); 
 
// récupération du cours dans la bdd 
$query = mysql_query("SELECT * FROM cours WHERE id_cours=$id_cours");  
 
if( mysql_num_rows($query) == 0 ) { 
    exit('Cours introuvable'); 
} 
 
$cours = mysql_fetch_assoc($query); 
$extension = substr( strrchr($cours['fiche_cours'], '.')  ,1);
echo $extension;
 
// définition de l'entête 
// à adapter en fonction du type de fichier 
header('Content-type: application/'.$extension.'');  
// nom du fichier 
header('Content-Disposition: attachment; filename="'.$cours['titre_cours'].'.'.$extension.'"');  
  
// affichage du fichier 
readfile($cours['fiche_cours']); 
?>