blob mysql et php

blob mysql et php - PHP - Programmation

Marsh Posté le 15-11-2004 à 13:31:07    

j ai creer une table de la forme suivante

Code :
  1. CREATE TABLE files (
  2.        fileID SMALLINT(4) NOT NULL AUTO_INCREMENT
  3.      , description VARCHAR(100) NOT NULL
  4.      , author VARCHAR(20) NOT NULL
  5.      , date DATE NOT NULL
  6.      , unitName VARCHAR(8) NOT NULL
  7.      , unitYear SMALLINT(4) NOT NULL
  8.      , unitSemester VARCHAR(2) NOT NULL
  9.      , file BLOB NOT NULL
  10.      , PRIMARY KEY (fileID)
  11. )


 
dans une page php jai ce formulaire

Code :
  1. form method="POST" action="<?echo $PHP_SELF;?>">
  2.   <table  width="300" border="0" cellspacing="0" cellpadding="0">
  3.   <tr valign="top" >
  4.    <td>description</td>
  5.    <td><input type="text" name="description" maxlength="100"></td>
  6.    </tr>
  7.     <tr valign="top" >
  8.    <td>author</td>
  9.    <td><input type="text" name="author" maxlength="20"></td>
  10.   </tr>
  11.    <tr valign="top" >
  12.    <td>unitName</td>
  13.    <td><input type="text" name="unitname" maxlength="8"></td>
  14.   </tr>
  15.   <tr valign="top" >
  16.    <td>unitYear</td>
  17.    <td><input type="text" name="unityear" maxlength="4"></td>
  18.   </tr>
  19.   <tr valign="top" >
  20.    <td>unitSemester</td>
  21.    <td><input type="text" name="unitsemester" maxlength="8"></td>
  22.   </tr>
  23.   <tr valign="top" >
  24.    <td>file</td>
  25.    <td><input type="file" name="file"></td>
  26.   </tr>
  27.   </table>
  28.   <input class="red" type="submit"  value="Ok">
  29.   <input type="hidden" name="action" value="upload">
  30. </form>


 
puis

Code :
  1. if (($_POST["action"]) == "upload" )
  2. {
  3. $host = "localhost";
  4. $user = "????";
  5. $pass = "????";
  6. $bdd = "coulix_db";
  7. $table = "files";
  8. @ mysql_connect($host, $user, $pass) or die("Impossible de se connecter à la base de données" ); // Le @ ordonne a php de ne pas afficher de message d'erreur
  9. @ mysql_select_db("$bdd" ) or die("Impossible de se connecter à la base de données" );
  10. /* stockage dans la bdd */
  11. $query = "insert into files values ($_POST[description],$_POST[author], now(),$_POST[unitname], $_POST[unityear], $_POST[unitsemester], $_POST[file])";
  12. $result = mysql_query($query);
  13.     mysql_close();
  14. }


 
et apperement rien ne se passe vu que la table reste vide.
 
- ou est le problem ?
- now() est il valide pour le champ date ?
- est il facile de recuperer les fichiers blobs de la bdd pour des sauvegarde reguliere ?
- comment savoir si $query c est deroule normalement?
 
merci  :jap:


Message édité par xiluoc le 15-11-2004 à 13:32:10
Reply

Marsh Posté le 15-11-2004 à 13:31:07   

Reply

Marsh Posté le 15-11-2004 à 13:55:13    

si tu commençais par "echo"-er ta query, tu verrais ptet le probleme [:kiki]

Reply

Marsh Posté le 15-11-2004 à 13:57:07    

Et carrément enlever les @ devant les appels de fonction mysql, ça aidera au debug [:kiki]


Message édité par Taiche le 15-11-2004 à 13:57:16
Reply

Marsh Posté le 15-11-2004 à 14:00:00    

les guillemets manquent, now() naffiche pas la date et file affiche le nom du fichier.
les deux premier je pense pouvoir arranger mais le fichier je fais comment ?

Reply

Marsh Posté le 15-11-2004 à 14:04:08    

tu lis la doc?

Reply

Marsh Posté le 15-11-2004 à 14:16:12    

Code :
  1. if (($_POST["action"]) == "upload" )
  2. {
  3. $date = date ("YYYY-MM-DD" );
  4. $host = "localhost";
  5. $user = "coulix";
  6. $pass = "ccoulixx";
  7. $bdd = "coulix_db";
  8. $table = "files";
  9. @ mysql_connect($host, $user, $pass) or die("Impossible de se connecter à la base de données" ); // Le @ ordonne a php de ne pas afficher de message d'erreur
  10. @ mysql_select_db("$bdd" ) or die("Impossible de se connecter à la base de données" );
  11. /* stockage dans la bdd */
  12. $query = "insert into files values ('$_POST[description]','$_POST[author]', '$date','$_POST[unitname]', '$_POST[unityear]', '$_POST[unitsemester]', '$_POST[file]')";
  13. $result = mysql_query($query);
  14. echo $query;
  15.     mysql_close();
  16. }


la date est donc au bon format MySQL displays DATE values in 'YYYY-MM-DD' http://dev.mysql.com/doc/mysql/en/ [...] rview.html
 
pour le fichier jai lu que ca se comportait comme un granf varchar donc il ne devrait y avoir de pb. mais ca ne marche pas.
 
echo $result ne maffiche rien :/
 
edit: hum non la date cest pas ca


Message édité par xiluoc le 15-11-2004 à 14:18:21
Reply

Marsh Posté le 15-11-2004 à 14:19:18    

echo $query on te dit et met un or die(mysql_error()) apres ta query

Reply

Marsh Posté le 15-11-2004 à 14:24:56    

J'ai vu 3 (au moins) erreurs à ton script :  
* il faut ça dans la balise form : enctype="multipart/form-data"
* le contenu binaire du fichier uploadé se retrouve en faisant un file_get_contents($_FILES['file']['tmp_name'])
* si tu n'est pas configuré en magic_quotes_gpc à On, tu seras sujet éventuellement à des injections SQL
 
Pour la gestion de l'upload : http://fr2.php.net/manual/en/features.file-upload.php

Reply

Marsh Posté le 15-11-2004 à 14:39:16    

Code :
  1. if (($_POST["action"]) == "upload" )
  2. {
  3. $date = date ("Y-m-d" );
  4. $host = "localhost";
  5. $user = "coulix";
  6. $pass = "ccoulixx";
  7. $bdd = "coulix_db";
  8. $table = "files";
  9.  mysql_connect($host, $user, $pass) or die("Impossible de se connecter à la base de données" ); // Le @ ordonne a php de ne pas afficher de message d'erreur
  10.  mysql_select_db("$bdd" ) or die("Impossible de se connecter à la base de données" );
  11. /* stockage dans la bdd */
  12. $query = "insert into files values ('$_POST[description]','$_POST[author]', '$date','$_POST[unitname]', '$_POST[unityear]', '$_POST[unitsemester]',  $_FILES['file']['tmp_name'])";
  13. $result = mysql_query($query)  or die(mysql_error());;
  14. echo $query;
  15.     mysql_close();
  16. }


 
 $_FILES['file']['tmp_name']
 ne passe pas a cause des guillemets, comment arranger ca?

Reply

Marsh Posté le 15-11-2004 à 14:39:43    

'".."'

Reply

Marsh Posté le 15-11-2004 à 14:39:43   

Reply

Marsh Posté le 15-11-2004 à 14:40:30    

putain mais [:mlc]

Reply

Marsh Posté le 15-11-2004 à 14:40:41    

tu veux pas un mars et 100 balles aussi?

Reply

Marsh Posté le 15-11-2004 à 14:41:46    

the real moins moins a écrit :

tu veux pas un mars et 100 balles aussi?

moi jveut bien [:klem3i1]

Reply

Marsh Posté le 15-11-2004 à 22:56:48    

on as pas le droit de debuter ?

Reply

Marsh Posté le 15-11-2004 à 23:03:36    

si, et on a aussi le droit de chercher, de lire un peu les docs.


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 15-11-2004 à 23:07:11    

jo bitiens toujours une erreur :/
 
Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in
 
 
$query = "insert into files values ('$_POST[description]','$_POST[author]', '$date','$_POST[unitname]', '$_POST[unityear]', '$_POST[unitsemester]',  '''$_FILES['file']['tmp_name']''')";
 
avec ou sans les .

Reply

Marsh Posté le 16-11-2004 à 01:03:48    

$query = "insert into files values ('".$_POST["description"]."','".$_POST["author"]."', '$date','".$_POST["unitname"]."', '".$_POST["unityear"]."', '".$_POST["unitsemester"]."', '".$_FILES["file"]["tmp_name"]."')";
 
mais fait attention car $_FILES["file"] fait référence à un fichier temporaire, $_FILES["file"]["tmp_name"] ne te permettant que d'y acceder pour le stocker à son emplacement définitif.
ceci grace à la fonction move_uploaded_file
bool move_uploaded_file ( string filename, string destination)


Message édité par stb le 16-11-2004 à 01:07:42
Reply

Marsh Posté le 16-11-2004 à 01:22:47    

merci, sa marche apres avoir ajoute '', au debut pour lauto increment.
le brwose d ephpmyadmin me montre un blob de 14 byte ce qeu i nest pas la taille du fichier :/
 '".$_FILES["file"]["tmp_name"]." indique le chemin du fchier temporaire .
la fonction move_upoaded_file est utile pour le transfert d efichiers dun dossier a un autre masi pour un blob en mysql je fait comment?

Reply

Marsh Posté le 16-11-2004 à 01:28:47    

ce st bon  

Code :
  1. if (($_POST["action"]) == "upload" )
  2. {
  3. $date = date ("Y-m-d" );
  4. $host = "localhost";
  5. $user = "coulix";
  6. $pass = "ccoulixx";
  7. $bdd = "coulix_db";
  8. $table = "files";
  9. $file = fopen($_FILES['file']['tmp_name'],"rb" );
  10. $contents = fread($file,$_FILES['file']['size']);
  11. $eflag = mysql_escape_string($contents);
  12.  mysql_connect($host, $user, $pass) or die("Impossible de se connecter à la base de données" ); // Le @ ordonne a php de ne pas afficher de message d'erreur
  13.  mysql_select_db("$bdd" ) or die("Impossible de se connecter à la base de données" );
  14. /* stockage dans la bdd */
  15. //do not forget th e single ' for the autoincrement id  
  16. $query = "insert into files values ('','".$_POST["description"]."','".$_POST["author"]."'," .
  17.   " '$date','".$_POST["unitname"]."', '".$_POST["unityear"]."', '".$_POST["unitsemester"]."', '".$eflag."')";
  18. $result = mysql_query($query);
  19.     mysql_close();
  20. }


 


Message édité par xiluoc le 16-11-2004 à 01:38:13
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed