Faire apparaître une liste d'enregistrement de type blob en fonction d' utilisat

sfavreau - 26 févr. 2013 à 13:00
cs_stay Messages postés 493 Date d'inscription jeudi 7 juillet 2005 Statut Membre Dernière intervention 24 mai 2017 - 27 févr. 2013 à 10:03
Bonjour,

Je souhaites développer une application qui affiche une liste de fichiers de type blob en fonction d'utilisateurs. Cependant mon code ouvre le fichier au lieu de proposer une page de lien.

J'ai crée 2 tables dans une bdd appelé resultats

-- Structure de la table `resultats`
A voir également:

7 réponses

cs_stay Messages postés 493 Date d'inscription jeudi 7 juillet 2005 Statut Membre Dernière intervention 24 mai 2017 4
26 févr. 2013 à 14:56
Salut, quand tu parles de fichier blob, tu parles d'un fichier à l’extension blob ?
Par contre, si tu parles d'un champ longblob d'une table dans une base de données.
Alors, tu ne parles pas d'un fichier.

J'imagine que tu as créé ce script.
Donc, il te suffit de lancer le processus à un autre moment.
Rien de plus simple

stéph
0
Merci pour ton aide. J'ai crée une table qui possèdent un champ de type longblob, binary afin de pouvoir y stocker des fichiers pdf. C'est ma contrainte, les pdf doivent être stockés dans la base.

J'arrive à ouvrir les pdf via le script ci dessus. Cependant je souhaiterais avant d'ouvrir le fichier faire apparaitre une page listant les fichiers pdf d'un utilisateur donné.

Cependant je bute sur ce point, j'essaie de mettre une ligne de type

echo "".$col[0]."
\n";

mais cela ne marche pas.

le fichier apercu est de cette forme

<?php
if(isset($_GET['id'])) {
$id = intval($_GET['id']);

header('Content-type: application/pdf');
header('Content-Disposition: inline; filename=doc.pdf');
header('Last-Modified: '.gmdate('D, d M Y H:i:s') . ' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: pre-check=0, post-check=0, max-age=0');
header('Pragma: anytextexeptno-cache', true);
header('Cache-control: private');
header('Expires: 0');

include("connexion.php");
$req = "SELECT resultatid, dossier, fichier ".
"FROM resultats WHERE resultatid = ".$id;

$ret = mysql_query($req)
or die(mysql_error());

$col = mysql_fetch_row($ret);

if(!$col[0]) {
echo "Le format est inconnu";
}
else {


echo $col[2];
}
}
else {
echo "Le format n'est pas reconnu";
}
?>


As tu une idée ? Merci de toute façon
0
cs_stay Messages postés 493 Date d'inscription jeudi 7 juillet 2005 Statut Membre Dernière intervention 24 mai 2017 4
26 févr. 2013 à 15:46
Pourquoi ne fais-tu pas un copié/collé de ce qui fonctionne ?
<?php
$bdd = new PDO('mysql:host=localhost;dbname=resultats', 'user', 'password');
$req $bdd->prepare('SELECT dossier, fichier, extension, resultatid FROM resultats WHERE resultatid ?');
$req->execute(array($_GET['id']));
$donnees = $req->fetch(); 
header( "Content-type: application/".$donnees['extension']);
header( "Content-length: ".strlen($donnees['fichier']).".".$donnees['extension']);
header( "Content-Disposition: attachment; filename=".$donnees['dossier'].".".$donnees['extension']);
echo $donnees['fichier'];


stéph
0
J'ai mis le bout de code indiqué dans un fichier apercu.php.

sur le premier script php, j'ai fais ceci : mis en commentaire les header et j'appelé le fichier apercu.php afin d'afficher les noms des dossiers.

// header( "Content-type: application/".$donnees['extension']);
// header( "Content-length: ".strlen($donnees['fichier']).".".$donnees['extension']);
// header( "Content-Disposition: attachment; filename=".$donnees['dossier'].".".$donnees['extension']);
// echo $donnees['fichier'];
echo "".$col[0]."
\n";

J'obtiens ce message d'erreur :

DEBUG: 20132602007-1234
try

Comme si je ne pouvais plus me connecter, je pense que mon appel au fichier apercu.php n'est pas correct mais je ne vois pas comment l'appeler autrement. Mon id=".$col[1]." ne doit pas être correct.

As tu une idée sur la façon dont il faudrait l'appeler ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_stay Messages postés 493 Date d'inscription jeudi 7 juillet 2005 Statut Membre Dernière intervention 24 mai 2017 4
26 févr. 2013 à 16:36
Donc, si je comprend bien, tu n'as aucun problème avec ton script qui affiche le pdf.
Si c'est uniquement pour lister une table, pourquoi tu me parles de ce pdf qui est hors sujet.
De plus, pourquoi tu passes de PDO à une méthode archaïque avec l'api mysql_ ?

Tu compliques la vie de ton interlocuteur avec tes explications et la tienne avec l'api mysql_.
Voici ce qui à mon sens devrait fonctionner.
<?php
$bdd = new PDO('mysql:host=localhost;dbname=resultats', 'user', 'password');
$req = $bdd->prepare('SELECT fichier, resultatid FROM resultats');
$req->execute();
while ($row = $req->fetch(PDO::FETCH_ASSOC)) {
    printf('[apercu.php?id=%d %s]
', $row['resultatid'], $row['fichier']);
}


stéph
0
je te remercie, je vais essayer ce point. Je débute en php et notamment sur PDO mais j'essaie de m'y mettre. Je veux réussir à faire une liste d'éléments contenus dans des champs de type blob. Ce champ stocke un fichier pdf. Cés éléments doivent apparaitre en lien. Le premier script permet d'ouvrir le fichier pdf mais ne le fait pas apparaitre au préalable sous la forme de lien. Le fichier s'ouvre tout seul.

tu me conseilles d'ajouter cette ligne while ($row = $req->fetch(PDO::FETCH_ASSOC)) {
printf('[apercu.php?id=%d %s]
', $row['resultatid'], $row['fichier']);


Par contre, je dois améliorer le script apercu.php afin d'utiliser pdo. Avez - vous des conseils sur ce point ?
0
cs_stay Messages postés 493 Date d'inscription jeudi 7 juillet 2005 Statut Membre Dernière intervention 24 mai 2017 4
27 févr. 2013 à 10:03
Salut, tu dois repartir de zéro.
Donc, si l'utilité n'est plus d'afficher le seul PDF que le membre détenait.
Mais tout les PDF listés.
Et bien, tu fais une sauvegarde du fichier apercu.php et tu supprimes le fichier de l'application.
Tu crées un nouveaux fichier qui se nommera list-pdf.php (comme ça, tu démarres avec un script tout neuf).
Ce fichier listera la table contenant les PDF et chaque lien pointera vers le fichier apercu-pdf.php?id=xxx.
Par la suite, tu crées le fichier apercu-pdf.php.
Et voila, il ne faut pas avoir peur de ce remettre en question et de modifier la structure de l'application.
Pour PDO, n’hésites pas à lire la documentation et de faire toute ton application avec l'api PDO.
Tu seras protégé contre les injections et c'est beaucoup plus simple pour éviter les bogues.
Voici un tuto pour PDO.

stéph
0
Rejoignez-nous