Insertion d'un fichier dans une base sql.

fallisme Messages postés 19 Date d'inscription mardi 16 août 2011 Statut Membre Dernière intervention 12 août 2014 - 21 déc. 2011 à 13:53
alexflex25 Messages postés 106 Date d'inscription vendredi 29 septembre 2006 Statut Membre Dernière intervention 6 mars 2012 - 27 déc. 2011 à 14:52
Bonjour à tous.
Je travaille sur une application et j'ai rencontré quelques difficultés.
Description
En effet Pour chaque projet, j'inserre la date de demarrage, le coup, etc.A la fin il faut attribuer à chaque projet un pv sous format pdf. Pour se faire je dispose d'un input de type file qui me permet de rechercher le fichier mais par conséquent ne fait que le upload vers un autre dossier.comment avec php attribuer le pv au projet correspondant.Je travaille avec mysql.
Merci

Toujours apprendre...

7 réponses

alexflex25 Messages postés 106 Date d'inscription vendredi 29 septembre 2006 Statut Membre Dernière intervention 6 mars 2012
22 déc. 2011 à 16:01
Bonjour,
Je n'ai pas trop compris la question, mais je vais essayer de répondre
Il faut insérer ton fichier PDF dans la base de données en utilisant dans ta requête
INSERT INTO table (blobField) VALUES (LOAD_FILE(/path/to/your/file))


cf doc mysql: http://dev.mysql.com/doc/refman/5.0/fr/string-functions.html#function_load-file
0
fallisme Messages postés 19 Date d'inscription mardi 16 août 2011 Statut Membre Dernière intervention 12 août 2014
22 déc. 2011 à 18:16
Oui c'est bien ça alexflex25
J'ai donc inséré le contenu du champ dans la base dont l'attribut est de type bload. Maintenant j'aimerai afficher le contenu pdf.
Ceci est mon code d'essai.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans titre</title>
</head>




<?php
if (isset($_POST["enr"])){
$avatar=$_POST["avatar"];
$link=mysql_connect("localhost","root","") or die ("Connexion non disponible");
echo "Bravo !!! connexion reussie";

$bd=mysql_select_db("ard",$link) or die ("Aucune base n'a été sélectionné");

$sql="insert into fichier(chemin) values ('$avatar');";

$req=mysql_query($sql) or die ("Erreur SQL");
echo "SQL réussie";

echo "Voir le pdf";
}
else
echo "Information incomplete: un champ est vide";

?>


</html>

Si vous pouvez m'orienté un tout petit peu.
Désolé c'est que c'est la première fois que je manipule les fichiers avec les BD.
Merci d'avance


Toujours apprendre...
0
alexflex25 Messages postés 106 Date d'inscription vendredi 29 septembre 2006 Statut Membre Dernière intervention 6 mars 2012
22 déc. 2011 à 19:21
Ok, je te propose faire un nouveau fichier PHP displayPDF.php par exemple.

<?php
//displayPDF.php
$link=mysql_connect("localhost","root","") or die ("Connexion non disponible");
$bd=mysql_select_db("ard",$link) or die ("Aucune base n'a été sélectionné");
$sql="SELECT blobField FROM fichier WHERE id=$_GET['id']";
$req=mysql_query($sql) or die ("Erreur SQL");
$res=mysql_fetch_assoc($req);

header('Content-type: application/pdf');
echo $res['blobField'];
?>


Puis dans ta page ci-dessus tu fais un lien vers cette nouvelle page
echo '[displayPDF.php?id=1 Voir le pdf]';


Voilà!
0
fallisme Messages postés 19 Date d'inscription mardi 16 août 2011 Statut Membre Dernière intervention 12 août 2014
23 déc. 2011 à 12:36
Au fait alexflex25, je convaincu que vous détenez la réponse dont j'ai besoin; seulement j'aurai préféré si possible qu'on aille pas à pas. Je m'explique de nouveau:
j'ai créé une table dans ma base comme ceci:

CREATE TABLE `fichier` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`lefichier` LONGBLOB NOT NULL 
) ENGINE = innodb;

le champ "lefichier" doit accueillir un fichier de format pdf.

Par la suite j'ai créé une page parcourir comme ceci:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Parcourir</title>
</head>

<form action="test.php" method="post">
  
</form>

</html>

A l'aide du bouton "parcourir" je parcours mon disque pour rechercher le fichier PDF souhaité.
Ma question est de savoir quelle doit être le contenu de test.php pour m'insérer le fichier dont le chemin est spécifié dans le input dans ma base. Je rappelle que je souhaite insérer le fichier et non son chemin.
Désolé encore une fois comprenez moi juste à travers ma signature.
Merci
Toujours apprendre...
0

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

Posez votre question
alexflex25 Messages postés 106 Date d'inscription vendredi 29 septembre 2006 Statut Membre Dernière intervention 6 mars 2012
27 déc. 2011 à 09:49
Question précise... Réponse précise...

<?php
if ($_FILES['fic']['error']) {               
  switch ($_FILES['fic']['error']){               
  case 1: // UPLOAD_ERR_INI_SIZE
    echo"Le fichier dépasse la limite autorisée par le serveur";                        
    break;    
  case 2: // UPLOAD_ERR_FORM_SIZE    
    echo "Le fichier dépasse la limite autorisée dans le formulaire HTML";
    break;    
  case 3: // UPLOAD_ERR_PARTIAL    
    echo "L'envoi du fichier a été interrompu pendant le transfert";      
    break;
  case 4: // UPLOAD_ERR_NO_FILE    
    echo "Le fichier que vous avez envoyé a une taille nulle";
    break;    
  }    
}else{    
  // $_FILES['nom_du_fichier']['error'] vaut 0 soit UPLOAD_ERR_OK
  // Insertion des données dans la table MYSQL
  $link=mysql_connect("localhost","root","") or die ("Connexion non disponible");
  $bd=mysql_select_db("ard",$link) or die ("Aucune base n'a été sélectionné");
  $sql='INSERT INTO fichier (lefichier) VALUES (LOAD_FILE("'.$_FILES['fic']['tmp_name'].'"))';
  $req=mysql_query($sql) or die ("Erreur SQL");
  if( $req === FALSE ){
    echo 'L\'insertion dans la base de données a échoué';
  }else{
    echo 'Fichier sauvegardé avec succès';
  } 
}
?>


Je te conseille également de modifier ta table mysql comme ceci, pour être en mesure de sauvegarder la taille et le type du fichier.
(Très utile pour l'affichage des données si tu veux étendre ensuite ton upload à d'autre type de fichier)

Voila la nouvelle table:

DROP TABLE IF EXISTS `fichier`;
CREATE TABLE `fichier` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`lefichier` LONGBLOB NOT NULL ,
`letype` VARCHAR(50) NOT NULL ,
`lataille` INT(20) NOT NULL  
) ENGINE = innodb;


Et voilà l'insert correspondant
<?php
//... a remplacer dans le code ci-dessus
$sql='INSERT INTO fichier (lefichier,lataille,letype) VALUES (LOAD_FILE("'.$_FILES['fic']['tmp_name'].'"),'.$_FILES['fic']['size'].',"'.$_FILES['fic']['type'].'")';
//...
?>
0
fallisme Messages postés 19 Date d'inscription mardi 16 août 2011 Statut Membre Dernière intervention 12 août 2014
27 déc. 2011 à 13:30
Oké j'ai suivi la démarche tout est nickel mais l'insertion ne s'est pas réalisée d'où l'affichage du message "erreur Sql".
Je suis entrain de vérifier qu'à même la syntaxe. Merci encore...................

Toujours apprendre...
0
alexflex25 Messages postés 106 Date d'inscription vendredi 29 septembre 2006 Statut Membre Dernière intervention 6 mars 2012
27 déc. 2011 à 14:52
Garde à l'esprit que d'après mon ami doc:

LOAD_FILE(file_name)

Lit le fichier file_name et retourne son contenu sous la forme d'une chaîne de caractères. Le fichier doit se trouver sur le serveur qui exécute MySQL, vous devez spécifier le chemin absolu du fichier et vous devez avoir les droits en lecture sur celui-ci. Le fichier doit pouvoir être lisible par tous et doit être plus petit que max_allowed_packet.

Si ce fichier n'existe pas ou ne peut pas être lu pour différentes raisons, la fonction retourne NULL :

mysql> UPDATE tbl_name
SET blob_column=LOAD_FILE("/tmp/picture")
WHERE id=1;

Si vous n'utilisez pas la version 3.23 de MySQL, vous devez lire le fichier depuis votre application et créer ainsi votre requête INSERT vous-même, pour mettre à jour la base de données avec le contenu de ce fichier. Une des possibilités pour réaliser ceci, si vous utilisez la bibliothèque MySQL++, peut être trouvée à http://www.mysql.com/documentation/mysql++/mysql++-examples.html.
0