Mettre à disposition sur mon site des fichiers au format PDF

papyclic Messages postés 451 Statut Membre -  
papyclic Messages postés 451 Statut Membre -
Bonjour,
je souhaite mettre à disposition pour les membres des fichiers au format PDF. J'ai déjà ma BDD avec une table et cinq champs.
Je n'arrive pas à construire mon lien pour le téléchargement des fichier, page NOT FOUND.
J'ai mes fichiers PDF qui sont dans le répertoire "partitions" qui lui est à la racine du site.
Pouvez-vous m'aider s'ils vous plait, je vous remercie.
Voici la requète
	$requete = "SELECT *"
	         . " FROM cdc_oeuvres,cdc_partitions,cdc_pupitres"
                 . " WHERE cdc_oeuvres.idoeu = cdc_partitions.idoeu"
                 . " AND cdc_pupitres.idpup = cdc_partitions.idpup"
	         . " ORDER BY oeuvre";
	$resultat = ExecRequete($requete,$connexion);

	echo "<h2>Oeuvres</h2>";
	echo "<ul>";
	while($r=mysql_fetch_object($resultat)) {
                $lien = "/'partitions/$r->fichier' target='_blank'";
		echo "<li> <a href=\"$lien\">$r->oeuvre $r->fichier</a></li>";
	}
	echo "</ul>";


7 réponses

  1. Pitet Messages postés 2845 Statut Membre 530
     
    Salut,

    Si tu regardes le html généré par ton code (en affichant le code source de la page de ton navigateur par exemple), tu devrais remarquer que les guillemets autour des attributs ne sont pas corrects.

    Exemple de correction :
    $lien = "/partitions/$r->fichier";
    echo "<li><a href=\"$lien\" target=\"_blank\">$r->oeuvre $r->fichier</a></li>";
    


    Bonne journée,
    0
  2. papyclic Messages postés 451 Statut Membre 3
     
    bonjour,
    hélas j'ai toujours un retour de ma page
    Not Found
    	$requete = "SELECT *"
    	         . " FROM cdc_oeuvres,cdc_partitions,cdc_pupitres"
                     . " WHERE cdc_oeuvres.idoeu = cdc_partitions.idoeu"
                     . " AND cdc_pupitres.idpup = cdc_partitions.idpup"
    	         . " ORDER BY oeuvre";
    	$resultat = ExecRequete($requete,$connexion);
    	$letter   = "";  // Initialiser les lettres
    
    	echo "<h2>Oeuvres</h2>";
    	echo "<ul>";
    	while($r=mysql_fetch_object($resultat)) {
                $lien = "/partitions/$r->fichier";
                echo "<li><a href=\"$lien\" target=\"_blank\">$r->fichier</a></li>";
    	}
    	echo "</ul>";
    
    0
    1. sebs
       
      Tu as peut etre tout simplement entrer un mauvais chemin.
      Le plus simple à mes yeux serait de rentrer tout directement en BDD ainsi tu affiches qu'un apercu=id? etc
      Ce qui te permettrais de un de gagner du temps lors du changement de pdf, tu reupload juste le nouveau directement dans ta bdd
      et de deux tu ne touches plus au code sources de ton site
      Voila pour la page apercu le code a mettre

      <?php
          
          if ( isset($_GET['id']) ){
              $id = intval ($_GET['id']);
              include ("config.php");
              $req = "SELECT img_id, img_type, img_blob,img_desc " . 
                     "FROM images WHERE img_id = " . $id;
              $ret = mysql_query ($req) or die (mysql_error ());
              $col = mysql_fetch_row ($ret);
              
              if ( !$col[0] ){
                  echo "Id d'image inconnu";
              } else {
                  header ("Content-type: " . $col[1]);
                  echo $col[2];
              }
      
          } else {
              echo "Mauvais id d'image";
          }
      
      ?>


      Ce n'est qu'un exemple faut remplacer les noms. Mais le pdf doit etre inserer en blob
      Et pour l'afficher c'est facile :)
      tu tapes juste exemple <a href="apercu=id?35> Cliquez ici pour voir le pdf </a>
      a oui le type du fichier pdf quand tu le rentres doit etre ABSOLUMENT application/pdf
      0
  3. papyclic Messages postés 451 Statut Membre 3
     
    Bonjour
    Merci pour votre réponse.
    En fait je suis un peu perdu, j'aimerai pourtant pouvoir mettre à disposition mes partitions de musique pour les membres.
    J'ai refait mes tables parce que je me suis aperçu qu'elle n'était pas conforme à ce que je voulais.

    J'ai d'abords la saisie des oeuvres avec une table de 4 champs
    idoeu
    oeuvre (nom de l'oeuvre)
    idaut (nom de l'auteur issu d'une liste déroulante)
    idorch (nom de l'orchestrtion de l'oeuvre issu d'une liste déroulante)
    

    Pour la saisie de l'oeuvre c'est ok
    Ensuite j'ai une table avec 5 champs pour la saisie des partitions car chaque oeuvre à plusieurs partitions
    idpart
    fichier (fichier de la partition en PDF)
    idoeu (relation de la table oeuvre)
    

    Pour la saisie des partitions ç'est OK également

    Par contre l'arborescence de mes répertoires est quelque peu complexe pour pouvoir aller chercher les fichiers PDFs.
    A la racine de mon site j'ai un répertoire partitions
    J'ai un sous dossier qui coresponds à une oeuvre et 2 sous dossiers ou il y a les fichiers PDFs.
    Si quelqu'un à une idée car comme je le disais je suis un peu beaucoup perdu.
    Merci de votre aide.
    Cordialement.
    0
    1. Pitet Messages postés 2845 Statut Membre 530
       
      Le champ fichier en bdd contient uniquement le nom du fichier pdf ou également le chemin vers ce fichier ?
      Comment sont nommés les sous-dossiers pour chaque oeuvre dans le dossier partitions ?
      Comment sont nommés 2 sous-dossiers en le dossier de chaque oeuvre ?
      0
  4. papyclic Messages postés 451 Statut Membre 3
     
    Bonjour
    Dans la BDD la champ fichier contient uniquement le nom du fichier PDF
    exemple Trompette UT.pdf
    ci-joint une capture de L'arborescence des dossiers pour les partitions
    https://www.cjoint.com/c/FJrmAukTT0u
    comme sous dossiers il y a les répertoires des oeuvres et dans chaque répertoire des oeuvres il y a 2 sous dossier qui sont "grand format" & "Petit format" et ensuite on a acces au fichier PDF.
    C'est peut-être un peu compliqué mais je voulais avoir chaque oeuvre dans l'orchestration qui lui est propre.
    Merci en tout cas si vous pouvez m'aiguiller.
    Cordialement
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Pitet Messages postés 2845 Statut Membre 530
     
    Un début de solution possible :
    $requete = 'SELECT o.idoeu, o.oeuvre, p.fichier FROM oeuvres o LEFT JOIN partitions p ON o.idoeu = p.idoeu';
    //$resultat = ExecRequete($requete,$connexion);
    $resultat = array(
        array('idoeu' => 1, 'oeuvre' => 'Nom 1', 'fichier' => 'fichier1.pdf'),
        array('idoeu' => 2, 'oeuvre' => 'Nom 2', 'fichier' => 'fichier2.pdf'),
        array('idoeu' => 3, 'oeuvre' => 'Nom 3', 'fichier' => 'fichier3.pdf')
    );
    
    //while($oeuvre = mysql_fetch_object($resultat)) {
    while($oeuvre = array_pop($resultat)) {
        $partitionGrandFormat = '/partitions/' . urlencode($oeuvre['oeuvre']) . '/grand format/' . urlencode($oeuvre['fichier']);
        $partitionPetitFormat = '/partitions/' . urlencode($oeuvre['oeuvre']) . '/petit format/' . urlencode($oeuvre['fichier']);
        
        echo 'Nom : ' . $oeuvre['oeuvre'] . '<br>';
        echo 'Partitions :<br>';
        echo '<a href="' . $partitionGrandFormat . '" rel="nofollow noopener noreferrer" target="_blank">Grand format</a><br>';
        echo '<a href="' . $partitionPetitFormat . '" rel="nofollow noopener noreferrer" target="_blank">Petit format</a><br>';
    }
    


    Plusieurs remarques :
    - N'ayant pas accès à ta bdd, j'ai commenté l'exécution de la requête et créer un tableau de résultat en dur afin de simuler un retour de bdd.
    Il faudra évidemment supprimer ce tableau en dur et décommenter l'exécution de la requête pour tester avec les vrais données.
    Même chose pour mon while qui parcourt le tableau à remplacer par ton while qui parcourt le résultat de la requête sql.
    - On commence par faire une jointure sql pour récupérer la liste des œuvres avec le fichier pdf associé
    - Pour chaque œuvre, on construit le lien vers les partitions petite et grand format : pour cela il est nécessaire que le nom du sous-dossier dans le dossier partitions soit identique au nom de l’œuvre (attention aux majuscule/minuscule et espaces)
    Les sous-dossiers dans le dossier de l’œuvre doit aussi être exactement nommé "petit format" et "grand format" (encore attention aux les majuscules/minuscules et espaces).

    Si deux œuvres ont le mêmes noms, ce système ne pourra pas fonctionner car deux sous-dossiers du dossier partitions ne pourront pas avoir le même nom. Pour pallier à ce problème, on pourra alors utiliser l'identifiant de l’œuvre (qui lui est unique) pour nommer les sous-dossiers de chaque œuvre et pour construire les liens vers les partitions.
    0
  7. papyclic Messages postés 451 Statut Membre 3
     
    Bonjour
    Je te remercie je vais essayer de mettre ça en place et je te redis ce qu'il en ai.
    Bonne soirée
    0
  8. papyclic Messages postés 451 Statut Membre 3
     
    Bonjour,
    Voilà j'y vois déjà un peu plus clair sur l'organisation de mes partitions, j'ai encore quelques zones d'ombre.
    Sur ce que as fait j'ai rajouté uniquement l'orchestration de l'oeuvre.
    Voilà ce que ça donne à l'affichage. J'ai uniquement saisie une oeuvre
    BF - Clairon
    Vive la classe
    Grand format
    Petit format
    

    Je me pose une question...elle est surement nul d'ailleurs.
    En fait en intégrant tous en BDD, l'oeuvre, l'orchestration, fichier PDF et je peux rajouter dans la table oeuvre un champ format et de ce fait je n'ai plus besoin d'avoir mes partitions en dur sur mon serveur puisque tous ai en BDD non?? Actuellement toutes mes partitions sont sur mon PC bien sur, j'ai du mal à intégrer certaines choses.
    Par contre j'ai les liens sur Grand format et Petit format qui me renvoie à une url NOT FOUND. En principe cela devrait ouvrir tous mes fichiers PDFs qui sont dans ces 2 sous dossiers. Car dans les deux sous dossires il y a plusieurs fichiers PDFs en fait.
    Excuse moi si je suis brouillon dans mes expliacations. Serai tu d'accord pour que je te donne l'URL de l'acces privé pour voir exactement ce que ça donne.
    Je te remercie.
    Bonne soirée.
    0