OVH Cloud OVH Cloud

move_uploaded_file : marche pas !

3 réponses
Avatar
Pierre
Bonjour,

Je suis en train d'étudier le livre PHP/MySQL avec DreamMX et quelque chose
m'échappe !
Dans un formulaire de saisie, j'utilise un champ de fichier pour transférer
une photo dans un dossier.
Ce principe marche sous EasyPHP mais pas sur le serveur Free qui charge une
photo par défaut (logo.jpg) définie dans le script !

Voici la portion de sctip :

<?php
if ($ajoutPhoto=="ok")
{
//sélection de la base de données
mysql_select_db($database_id, $id);

//vérification si la reference existe déjà dans la base
$query_rsReference = "SELECT reference FROM photos WHERE reference =
'$reference' ";
$rsReference = mysql_query($query_rsReference, $id) or die(mysql_error());
$totalRows_rsReference = mysql_num_rows($rsReference);

//si la reference n'existe pas encore alors :
if ($totalRows_rsReference==0)
{
//test si un fichier photo est sélectionné sino photo par défaut
if ($photo['photo']['size']!=0)
$photo_name=$photo['photo']['name']; else $photo_name="logo.jpg";

//enregistrement dans la base du nouveau compte client
mysql_select_db($database_id, $id);
$insertPhoto = "INSERT INTO photos (reference, titre, description,
detouree, mode, poids, auteur, agent, date_saisie, rubriqueID1, rubriqueID2,
rubriqueID3, format, prix, photo, cle) VALUES ('$reference', '$titre',
'$description', '$detouree', '$mode', '$poids', '$auteur', '$agent',
'$date_saisie', '$rubriqueID1', '$rubriqueID2', '$rubriqueID3', '$format',
'$prix', '$photo_name', '$cle')";
mysql_query($insertPhoto, $id) or die(mysql_error());

//----Gestion de la photo de l'article si elle a était modifiée
if ($photo['photo']['size']!=0)
{
$repertoire="../photos/";

move_uploaded_file($photo['photo']['tmp_name'],$repertoire.$photo['photo']['
name']);

}
//redirection vers la page ArticlesGestion.php
header("Location: PhotosGestion.php");
}//fin du if
//si la reference existe déjà > message d'erreur
else
{
$erreur_reference=1;
}
}
?>

Quelqu'un peut-il m'aiguiller ??
J'ai essayé avec COPY à la place de move-upload_file, mais ça fait la meme
chose (ok sous EasyPHP, pas de transfert sous free).

Merci d'avance !
Pierre

3 réponses

Avatar
Guillaume Bouchard
Pierre wrote:
Bonjour,

Je suis en train d'étudier le livre PHP/MySQL avec DreamMX et quelque chose
m'échappe !


Ils ont osé faire un livre "Comment faire du php avec dreamweaver" ?
Il faudra que je pense à faire un copier coller de cette phrase, cela me
simplifierait la vie :

Le php est on tres bon outil permetant de generer du html, cependant le
html est un truc qui n'est pas a prendre à la legere et qui respect une
syntaxe certaine ainsi que des methodes de developpement. Bref, il FAUT
connaitre son html si l'on veut utiliser php (dans cette optique, phpGTK
c'est autre chose ;o))

Personellement, je ne conduis pas, mais le jour ou j'acheterais une
voiture, je pense que je passerais mon permis avant. Logique ?

Tout cela pour dire que l'utilisation de dreamMX pour realiser du html
et du php n'est AMHA pas une bonne idee. Mieux vaut utiliser un editeur
de texte simple qu'un editeur html qui fait le café le tout a un prix
sympatique.

Bon, passons.

Dans un formulaire de saisie, j'utilise un champ de fichier pour transférer
une photo dans un dossier.
Ce principe marche sous EasyPHP mais pas sur le serveur Free qui charge une
photo par défaut (logo.jpg) définie dans le script !


Php 4 ou 3 ? J'ai laché l'actualité de free depuis longtemps, mais il me
semble qu'ils ne supportaient pas l'upload en php4.

Voici la portion de sctip :

<?php
if ($ajoutPhoto=="ok")
{


On est bien d'acord que toutes tes valeurs ont été filtrer et nettoyer
avant et que $ajoutPhoto est definit à OK que dans le cas où tout est bon ?

//sélection de la base de données
mysql_select_db($database_id, $id);

//vérification si la reference existe déjà dans la base


Mauvais concept. Il faut faire l'insertion et dans le cas ou celle ci
echoue du fait des clefs primaire et uniques de la table, il faut dire
qu'elle existe deja. Pour tester sir l'erreur vient d'un problème
d'unicité ou d'autre chose, mysql_error() renvoie 1064 ou 1062 (je ne
sais jamais...) dans le cas d'un doublons.

if ($photo['photo']['size']!=0)


D'où provient $photo ?

//enregistrement dans la base du nouveau compte client
mysql_select_db($database_id, $id);


Pas besoin de reselection la base à chaques fois. Cependant il est
preferable de faire quand même la gestion d'erreur:

mysql_select_db(...) or die(...);

move_uploaded_file($photo['photo']['tmp_name'],$repertoire.$photo['photo']['
name']);


Donc ce serait cette ligne qui plante. Je ne vois pas où donc si tu
pouvais donner plus d'informations (warning, etat des variables à ce
moment...)

header("Location: PhotosGestion.php");


include('header.troll');
Dans les normes http, header prend comme parametre une url absolue. De
plus comme dirait JG, tu demandes au livreur de redescendre la machine à
lavé de 5 etages pour ensuite remonter de 6


--
Guillaume.
Souhaitez moi bonne chance, DS de math H - 2.

Avatar
dwojylac.nospam
Pierre wrote:

//test si un fichier photo est sélectionné sino photo par défaut
if ($photo['photo']['size']!=0)
$photo_name=$photo['photo']['name']; else $photo_name="logo.jpg"


Il me semble que le pb vient de la façon dont tu récupères les données
depuis ton formulaire d'upload :

1. Tu as un champ input de type "file" qui s'appelle "photo" apparemment
dans ton formulaire.

2. Il faut impérativement que ton formulaire utilise la méthode post et
encodage enctype="multipart/form-data" sinon la procédure ne fonctionne
pas.

3. les données provenant de ce champ :
$photo = $HTTP_POST_FILES['photo'];
// puisque le nom du champ de type "input" du formulaire se nomme "doc"
// $photo['name'] : nom du fichier
// $photo['type'] : type MIME du fichier
// $photo['size'] : taille du fichier en octets
// $photo['tmp_name'] : pointeur vers le fichier téléchargé

Ton script n'est pas très clair la-dessus.
$photo['photo']['size'] serait plutot $HTTP_POST_FILES['photo']['size']
D'autre part je ne ferais la mise à jour de ma table qu'après l'upload.
move_uploaded_file retrourne true ou false suivant le cas.

Suivant l'hébergeur voir les pb de droit sur le dossier où le fichier va
être mis. Chez free il n'y a rien a toucher et move_uploaded_file
fonctionne très bien en php4. (voir ci-dessous)


--
Dominique
http://wojylac.free.fr

Avatar
loufoque
Guillaume Bouchard a dit le 20/01/2005 12:18:

Php 4 ou 3 ? J'ai laché l'actualité de free depuis longtemps, mais il me
semble qu'ils ne supportaient pas l'upload en php4.


Ça fait des lustres que c'est corrigé, y'a même PHP5.0.3 sur Free
maintenant.