Page 1 sur 2

upload

Posté : 22 août 2005, 17:25
par anonymousguest
Bonjour,
le code ci-dessous est le code de la page cible d'un formulaire qui envoie un fichier via un <input type="file" name="file"/>
Il y a une erreur qui s'affiche lorsque je l'ouvre et je ne la comprend donc je vous demande votre aide
<?php
//connection bdd
$link = mysql_connect('localhost', 'login', 'mdp');
if (!$link) {
die('Impossible de se connecter : ' . mysql_error());
}
mysql_select_db('BDD');

//recup derniere id
$row = mysql_fetch_array(mysql_query("SELECT id FROM kit ORDER BY id DESC LIMIT 0,1"));
$dest = $row["id"];
$dest++;

//vérif de l'ext+ valeur donnée à $format
$ext_fichier="jpg";  //substr(strrchr($file,'.'),1);

if($file_type=="image/jpeg"){$format="jpeg";}
elseif($file_type=="image/png"){$format="png";}
else{echo'mauvais format, l\'image doit être en jpeg ou en png';
mysql_close();
exit;}

$path='http://monsite.com/images/uploaded/designs/'.$dest.'.'.$ext_fichier;
//transfet de l'image dans le fichier+ ajout dans la bdd
copy("$file","$path");////////////////////////////////////ligne36
if(@copy("$file","$path"))
{
echo "Le fichier a bien été uploadé";
mysql_query("INSERT INTO kit ('id', 'path', 'format') VALUES('',$path,$format)");
}
else {echo "Erreur";}
unlink("$file");
mysql_close();
?>
l'erreur affichée est:
Warning: copy(http://monsite.com/images/uploaded/designs/5.jpg) [function.copy]: failed to open stream: HTTP wrapper does not support writeable connections. in /var/www/users/monsite/mapage.php on line 36
Erreur

Posté : 22 août 2005, 17:27
par sweetking
il semble que tu n'as pas autorisé le serveur en écriture pour ces fichiers.

Posté : 22 août 2005, 17:29
par Cyrano
Il est probable que ça vient du fait que tu lui done en chemin de destination une adresse absolue en http. Essaye de mettre un chemin relatif à la place du style:
$path='./images/uploaded/designs/'.$dest.'.'.$ext_fichier; 
Le chemin exemple que j,ai mis part du principe que cette page s'exécute à la hauteur de la racine du site.

Posté : 22 août 2005, 17:30
par anonymousguest
Comment je dois faire?
j'ai changé le CHMOD du dossier: designs
en 777 mais ca change rien

EDIT: CA MARCHE :D pourquoi il faut un point avant l'url?

Posté : 22 août 2005, 17:36
par Cyrano
le "." représente le répertoire courant, ".." représente le répertoire parent et "/" le répertoire racine.

Posté : 22 août 2005, 17:42
par anonymousguest
J'ai parlé trop vite, l'image est bien chargée mais elle n'est pas insérée dans la bdd :(

Posté : 22 août 2005, 17:46
par Cyrano
COmment ça "insérée dans la bdd" : tu veux faire quoi au juste ? Je te sens bien parti pour essayer d'enregistrer l'image en binaire dans ala base de données, source de nombreuses galères sur ce forum;

Suggestion: enregistre l'image dans un répertoire dédié sur ton site et n'enregsitre dans la base que les informations sur cette image, nom, extension, type de fichier, hauteur, largeur, etc... mais pas l'image elle-même.

Posté : 22 août 2005, 17:48
par anonymousguest
c'est ce que j'ai essayé de faire, je l'enregistre sur le serveur et je rentre son url et son format dans la base

Posté : 22 août 2005, 18:03
par Cyrano
Cette ligne:
mysql_query("INSERT INTO kit ('id', 'path', 'format') VALUES('',$path,$format)");
Transforme-la comme ça
$sql_1 = "INSERT INTO kit ('id', 'path', 'format') VALUES('',$path,$format)";
echo($sql_1);
mysql_query($sql_1);
Et regarde ce que ça donne: est-ce que les valeurs des variables sont là où elles devraient être ?

Posté : 22 août 2005, 20:46
par Xenon_54
Bonjour,
copy("$file","$path");////////////////////////////////////ligne36 
Utilise la fonction move_uploaded_file() à la place de copy() lorsqu'il s'agit d'upload:
http://www.php.net/manual/fr/function.m ... d-file.php

Et retire les double-quotes (") puisqu'elles ne sont pas nécessaires.

Posté : 22 août 2005, 21:46
par anonymousguest
Bon, excusez le temps mort, je mangeais
j'ai remplacé le copy par move_uploaded_file()
plus de probleme de ce coté là, je retrouve bien mon image sur le serveur après avoir chargé la page.
J'ai fait comme Cyrano a dit mais je vois pas oùest le problème, il n'affiche pas d'erreur , le nom de la table est bon, les noms des champs sont bon, l'ordre des value est bon, les valeurs sont bonnes... mais il n'ajoute pas l'entrée dans la table (*,)
voilà le code
$path='../../../images/uploaded/designs/'.$dest.'.'.$format;
//transfet de l'image dans le fichier+ ajout dans la bdd
if(@move_uploaded_file($file,$path))
{
echo "Le fichier a bien été uploadé";
$sql_1 = "INSERT INTO kit ('id', 'path', 'format') VALUES('', $path, $format)";
echo'<br/>'.$sql_1;
mysql_query($sql_1);
}
else {echo "Erreur";}
mysql_close();
qui affiche:
Le fichier a bien été uploadé
INSERT INTO kit ('id', 'path', 'format') VALUES('', ../../../images/uploaded/designs/5.jpeg, jpeg)
de plus, la connexion avec la bdd est faite et marche puisque ceci:
$row = mysql_fetch_array(mysql_query("SELECT id FROM kit ORDER BY id DESC LIMIT 0,1"));
$dest = $row["id"];
$dest++;
donne une valeur à $dest de 5 comme ça doit le faire puisqu'il y a 4 entrées pour le moment

Posté : 22 août 2005, 21:50
par Xenon_54
Bonjour,

Il manque des single-quotes autour de la valeur du chemin de l'image:
$sql_1 = "INSERT INTO kit ('id', 'path', 'format') VALUES('', '$path', '$format')";

Posté : 22 août 2005, 22:01
par anonymousguest
ouaaaaaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii... et ben non, c'est pas ça.
j'ai mis et ca donne la meme chose avec les guillemets simples en plus
toujours rien dans la table

Posté : 22 août 2005, 22:03
par Xenon_54
Bonjour,

Ajoute ceci après "mysql_query($sql_1);":
echo mysql_error();

Posté : 22 août 2005, 22:08
par anonymousguest
Erreur de syntaxe près de ''id', 'path', 'format') VALUES('', '../../../images/uploaded/des' à la ligne 1
J'ai trouvé, j'ai virer la parenthèse avec les noms des champs et j'ai rempli les valeurs pour tous les champs de la table et CA MARCHE, en tout cas, merci d'avoir été patient et de m'avoir aidé. Je reviendrais ne vous inquiétez pas et j'aurais d'autres problèmes, promis