begin process at 2013 05 23 11:55:23
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Base de données

 > 

MySQL

 > 

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


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

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

mardi 26 février 2013 à 13:00:17 | Faire apparaître une liste d'enregistrement de type blob en fonction d' utilisateurs

sfavreau

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`
--

CREATE TABLE IF NOT EXISTS `resultats` (
`resultatid` smallint(5) unsigned NOT NULL,
`dossier` varchar(20) NOT NULL,
`fichier` longblob NOT NULL,
`extension` varchar(50) NOT NULL,
`userid` varchar(20) NOT NULL,
`password` varchar(50) NOT NULL,
PRIMARY KEY (`resultatid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

et -- Structure de la table `consultations`
--

CREATE TABLE IF NOT EXISTS `consultations` (
`ipconsult` varchar(50) NOT NULL,
`dateconsult` datetime NOT NULL,
`resultatid` smallint(6) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`resultatid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=19 ;

mon code est le suivant, un formulaire permet à l'utilisateur de s'authentifier :

<table border="0.5" width="500" id="table1" bgcolor="#DDDDDD">
<tr>
<td style="text-align:center;">
<form action="cible.php" method="post">
<p>
<b>Veuillez entrer votre login utilisateur : </b>
<br>
<input type="text" name="login" /> <img src="help.gif" />
<br><br><b>Veuillez entrer votre mot de passe : </b>
<br>
<input type="password" name="password" size="7" maxlength="5"> <img src="help.gif" />
<br>
<input type="submit">
</p>
</form>
</td>
</tr>
</table>

Ce formulaire est traité par ce script :

<?php
$ip=$_SERVER['REMOTE_ADDR'];
$date=gmdate("Y-m-d H:i:s", strtotime("+01:00"));
if (isset($_POST['login']) AND isset($_POST['password']))
{
echo 'DEBUG: ' . strip_tags($_POST['login']) . '-' . strip_tags($_POST['password']) . '<br>';
try
{
$bdd = new PDO('mysql:host=localhost;dbname=resultats', 'user', 'password');

$req = $bdd->prepare('SELECT dossier, fichier, extension, resultatid FROM resultats WHERE userid = ? AND password = ?');
$req->execute(array($_POST['login'], $_POST['password']));

$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
echo 'try';
}
catch (Exception $e)
{
echo 'catch';
die('Erreur : ' . $e->getMessage());
$req2 = $bdd->prepare("INSERT INTO consultations (ipconsult,dateconsult, resultatid) values(?,?, ?)");
$req2->execute(array($ip,$date, 0));
echo '<p>Une erreur s\'est produite, veuillez retourner sur <a href="/">la page d\'accueil.</a></p>';
}
$donnees = $req->fetch();
if ($donnees)
{
$req2 = $bdd->prepare("INSERT INTO consultations (ipconsult,dateconsult, resultatid) values(?,?, ?)");
$req2->execute(array($ip,$date, $donnees['resultatid']));

// ouvre le fichier pdf

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'];
}
else
{
echo '<p>Identifiants inconnus, veuillez retourner sur <a href="/">la page d\'accueil.</a></p>';
$req2 = $bdd->prepare("INSERT INTO consultations (ipconsult,dateconsult, resultatid) values(?,?, ?)");
$req2->execute(array($ip,$date, 0));
}
// echo '<p><a href="/">Cliquer ici</a> pour revenir à l\'accueil.php</p>';
$req->closeCursor();
}
else
{
echo '<p>Une erreur s\'est produite, veuillez retourner sur <a href="/">la page d\'accueil.</a></p>';
$req2 = $bdd->prepare("INSERT INTO consultations (ipconsult,dateconsult, resultatid) values(?,?, ?)");
$req2->execute(array($ip,$date, 0));
}
?>

Par ce biais, j'arrive à ouvrir le pdf en fonction de l'utilisateur mais je souhaiterais arriver sur une page ou un lien apparaitrait vers le pdf.

Avez - vous idée sur la façon de procéder ?


mardi 26 février 2013 à 14:56:16 | Re : Faire apparaître une liste d'enregistrement de type blob en fonction d' utilisateurs

stay


Salut, quand tu parles de fichier blob, tu parles d'un fichier à l&#8217;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
mardi 26 février 2013 à 15:35:27 | Re : Faire apparaître une liste d'enregistrement de type blob en fonction d' utilisateurs

sfavreau

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 "<a href=\"apercu.php?id=".$col[1]."\">".$col[0]."</a><br />\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
mardi 26 février 2013 à 15:46:33 | Re : Faire apparaître une liste d'enregistrement de type blob en fonction d' utilisateurs

stay


Pourquoi ne fais-tu pas un copié/collé de ce qui fonctionne ?
Code PHP :
<?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
mardi 26 février 2013 à 16:17:04 | Re : Faire apparaître une liste d'enregistrement de type blob en fonction d' utilisateurs

sfavreau

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 "<a href=\"apercu.php?id=".$col[1]."\">".$col[0]."</a><br />\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 ?
mardi 26 février 2013 à 16:36:02 | Re : Faire apparaître une liste d'enregistrement de type blob en fonction d' utilisateurs

stay


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.
Code PHP :
<?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('<a href="apercu.php?id=%d">%s</a><br />', $row['resultatid'], $row['fichier']);
}


stéph
mercredi 27 février 2013 à 08:48:04 | Re : Faire apparaître une liste d'enregistrement de type blob en fonction d' utilisateurs

sfavreau

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('<a href="apercu.php?id=%d">%s</a><br />', $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 ?
mercredi 27 février 2013 à 10:03:04 | Re : Faire apparaître une liste d'enregistrement de type blob en fonction d' utilisateurs

stay


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&#8217;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


Cette discussion est classée dans : donnees, bdd, not, req2, resultatid


Répondre à ce message

Sujets en rapport avec ce message

Remplir une ligne de BDD en fonction des éléments déjà dans la BDD [ par Dioul2 ] Bonjour,Je débute en PHP et aimerais faire le code suivant:J'ai dans ma BDD des timestamps. Je souhaiterai que mon script inscrive certains commentair recuperer un lien d'une Bdd [ par geof2810 ] bonjour a tous, voila j'aimerais recuperer un lien vers une image qui est stocké dans ma bdd. je suis un veritable novice et donc je me demandais si Récupérer des donnees [ par Minette26 ] Bonjour,Je suis bloquée sur un problème pouvez-vous me dépanner ?Pour chaque adhérent j'entre un dépôt qui peut avoir 20 entrées de refDEP1 à refDEP20 Inclusion de php en javascript [ par billut ] Bonjour à tous, voila j'ai un petit problème, je sais que certains posts on déjà été traités à ce sujet, mais là je bloque...J'essais de créer un tcha Imbriquer des requetes [ par Minette26 ] Bonsoir,Pouvez-vous me dire si j'ai une solution à mon problème ou s'il faut que je reprenne mes variables ?J'ai enregistré dans ma table "depot_livre XML & BDD : Réferencement [ par Orange73 ] Hello,juste 2 ptites question :> Est-ce que les moteurs de recherche référencent les xml loader dans du flash ?> Est-ce que les moteurs de recherche r php question [ par Redsnake03 ] Alors bonjour j'ai une question concernant phpje veux savoir si c'est posible de faire example $pseudo = adresseemail@hotmail.com$selection = mysql_qu Comment afficher données issues de la bdd (et les conserver selon critères utilisateur) [ par lolymeupy ] Bonjour, j'essaye de créer un site mais j'ai une question en suspend que je n'arrive pas à résoudre (malgré de nombreuses recherches en tutos et aut transmission de la donnée sélectionnée dans bdd [ par kannusy ] bonjour voici un bout du select                 Quelle Course ?               <option  selected="select Problème avec liste déroulante [ par romainbisson ] Bonsoir,ma liste déroulante fonctionne, je récupère bien les noms de mes enseignants.maintenant, je souhaite quand un enseignant est sélectionné dans


Nos sponsors


Appels d'offres

Sondage...

Comparez les prix

CalendriCode

Mai 2013
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,310 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales