Partage
  • Partager sur Facebook
  • Partager sur Twitter

Pb d'écriture de champ BLOB

En PHP, avec mySQL

Sujet résolu
22 novembre 2010 à 12:56:15

Bonjour,

A l'aide d'un formulaire, je veux insérer un fichier image dans un champ BLOB de la table files de la base de données facsys.
Mais, bien que je n'ai aucune erreur en retour, la table n'enregistre pas mon image

Voici ma table:

CREATE TABLE files(
fileid INT(11) NOT NULL auto_increment,
description VARCHAR(100) NOT NULL,
filename VARCHAR(50) NOT NULL,
filetype VARCHAR(50) NOT NULL,
filesize INT(11) NOT NULL,
filedata BLOB NOT NULL,
datecreation TIMESTAMP(14) NOT NULL,
PRIMARY KEY (fileid)
);


Voici mon code HTML (formulaire):
<HTML> <HEAD> </HEAD> <BODY>
<FORM enctype="multipart/form-data" action="insert.php" method="post">
<INPUT type="text" name="description" size="55" maxlength="50" value="Description du fichier"> <BR>
<INPUT type="file" name="fileobjet" size="40"> <BR>
<INPUT type="submit" value="Enregistrer le fichier" name="validation" >
</FORM> </BODY> </HTML>


Voici mon code PHP:
<?php
if(isset($_POST['validation'])) {
  //récupérer la description qui a été posée par la page index.html
  $description = addslashes($_POST['description']);
  print_r($_POST); //pour test
  echo "<br>";
  //récupérer le fichier qui a été posté par la page index.html
  $fileobjet = $_FILES['fileobjet'];
  //lire le nom du fichier posté
  $filename = $fileobjet['name']; //$_FILES['fileobjet']['name']
  //si le nom existe, un fichier a été posté
  if ($filename != "") {
    //lire le type Mime du fichier
    $filetypemime = $fileobjet["type"]; //$_FILES['fileobjet']['type'];
    //lire la taille du fichier
    $filesize = $fileobjet["size"]; //$_FILES['fileobjet']['size']
    //récupérer le chemin et le nom du fichier qui a été créé
    // temporairement sur le serveur Web
    // et qui représente le fichier posté
    $filetemp = $fileobjet["tmp_name"];  //$_FILES['fileobjet']['tmp_name']
    //lire le fichier temporaire
    //on doit utiliser addslashes (ou mysql_escape_string) car 
    // les données binaires contiennent des caractères spéciaux
    $filedata = addslashes(fread(fopen($filetemp, "rb"), filesize($filetemp)));
    //erreur récupérable 
    $erreur = $_FILES['fileobjet']['error'];
    //connexion au serveur mySQL
    $connexion = mysql_connect("localhost","root")
     or die ("Connexion au serveur mySQL impossible");
    //sélection de la base de données
    mysql_select_db('facsys')
     or die("Impossible de se connecter à la base de données facsys");
    //insérer des données dans la table files
    mysql_query("INSERT INTO files (description, filename, filetype, filesize, filedata)
    VALUES('.$description.','.$filename.','.$filetypemime.','.$filesize.','.$filedata.')
     or die('Erreur :'.mysql_error())");
    //on récupère le dernier indentifiant de l'enregistrement inséré
    $result = mysql_query("SELECT LAST_INSERT_ID()");
    echo "Le fichier est enregistré, son id est: ".mysql_result($result, 0);
  } else {
  echo "Aucun fichier à enregistrer";
  }
} else {
echo "\$_POST non validé";
}
?>


Where is THE Pb ?

Cordialement
Jacques F.
  • Partager sur Facebook
  • Partager sur Twitter
22 novembre 2010 à 13:58:08

Salut,

c'est drole mais la coloration syntaxique aurait pourtant du t'aider si tu avais regarder ton code.
Tous l'interet de travailler avec un editeur avec coloration syntaxique

<?php
mysql_query("INSERT INTO files (description, filename, filetype, filesize, filedata)
    VALUES('.$description.','.$filename.','.$filetypemime.','.$filesize.','.$filedata.')
     or die('Erreur :'.mysql_error())");
?>


Si tu ne vois pas le probleme.
si tu met ton or die dans une chaine de caracteres, ben la fonction s'execute pas, De l'autre cote, je sais aps ce que tu essaie de faire, mais concatener une chaine avec des double cote en mettant des simple cote, ca marche pas. Et d'ailleurs les arguments de VALUES doivent etre en simple cote, donc ej sais vraiment aps ce que tu voulais faire...

<?php
mysql_query("INSERT INTO files (description, filename, filetype, filesize, filedata)
    VALUES('".$description."','".$filename."','".$filetypemime."','".$filesize."','".$filedata."'))"
     or die('Erreur :'.mysql_error());
?>


Ca c'est corrigé, je n'ai pas regardé le code, mais sais tu que stocker des images dans ta base de données n'est pas bon du tout.

Pour conclure, relis le cours si tu ne l'as pas fait sur le php/mysql de mateo21, et utilise un editeur avec coloration !
  • Partager sur Facebook
  • Partager sur Twitter
22 novembre 2010 à 14:37:23

Salut,

Inutile de poster plusieurs fois ton problème, même dans des rubriques différentes du forum.
Je ferme celui-ci. :)
  • Partager sur Facebook
  • Partager sur Twitter