upload

Eléphanteau du PHP | 43 Messages

22 août 2005, 17:25

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

Eléphanteau du PHP | 29 Messages

22 août 2005, 17:27

il semble que tu n'as pas autorisé le serveur en écriture pour ces fichiers.

Mammouth du PHP | 19672 Messages

22 août 2005, 17:29

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 43 Messages

22 août 2005, 17:30

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?

Mammouth du PHP | 19672 Messages

22 août 2005, 17:36

le "." représente le répertoire courant, ".." représente le répertoire parent et "/" le répertoire racine.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 43 Messages

22 août 2005, 17:42

J'ai parlé trop vite, l'image est bien chargée mais elle n'est pas insérée dans la bdd :(

Mammouth du PHP | 19672 Messages

22 août 2005, 17:46

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 43 Messages

22 août 2005, 17:48

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

Mammouth du PHP | 19672 Messages

22 août 2005, 18:03

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 ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 1885 Messages

22 août 2005, 20:46

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.
La programmation est l'expression de la poésie d'un programmeur
Génération PHP

Eléphanteau du PHP | 43 Messages

22 août 2005, 21:46

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

Mammouth du PHP | 1885 Messages

22 août 2005, 21:50

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')";
La programmation est l'expression de la poésie d'un programmeur
Génération PHP

Eléphanteau du PHP | 43 Messages

22 août 2005, 22:01

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

Mammouth du PHP | 1885 Messages

22 août 2005, 22:03

Bonjour,

Ajoute ceci après "mysql_query($sql_1);":
echo mysql_error();
La programmation est l'expression de la poésie d'un programmeur
Génération PHP

Eléphanteau du PHP | 43 Messages

22 août 2005, 22:08

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
Modifié en dernier par anonymousguest le 22 août 2005, 22:17, modifié 1 fois.