Bonjour a tous,
j ai note un comportement relativement etrange sur le champ upload.
Je travail en PHP avec une base MySQL, server Apache 2, PHP 5 et
MySQL 5 (le tout en local bien sur), et le fameux XP SP2.
J ai creer une page dediée a l upload, avec entre autre un champ upload
nommé FICHIERSOURCE et un bouton Validation qui me sert a envoyer
le fichier et à inscrire le path dans la base (le code du bouton est à la
fin).
Apres bien une journée d essai, tout marche bien dans le meilleur des mondes.
J ai voulu aller plus loin en attribuant a ma jolie page PHP un modèle de
page (puisqu apparement les framsets ne sont pas dispo en php).
C est la que le probleme intervient : des que je mets a jour la page d upload
avec le modele, le champ FICHIERSOURCE ne fonctionne plus correctement.
En effet le code PHP qui execute l upload me dit que l index FICHIERSOURCE
n existe pas, il semble donc carrement ne pas trouver mon champ. Apres
recompliation, sauvegarde, le resultat est le meme (j evite de faire reparer
mon projet... je n aime pas). Seul moyen de resoudre ce probleme : je renomme
FICHIERSOURCE en FICHIERSO par ex, je compile et sauvegarde le projet, puis
je remets le nom correcte (FICHIERSOURCE). Et la tout remarche bien...
A noter que ma page d upload PHP est cree sans contexte (avec contexte ca ne
marche carrement pas). J ai peut etre creer la page qui me sert de modele
avec contexte justement. Meme si je la sauvegarde en modele de page, il reste
peut etre un "fond" de contexte qui me ferait une erreur, je teste ca
actuellement. De plus cette "perte" du champ upload arrive peut etre dans d
autres cas, je teste egalement.
Si vous aviez une idee sur la source de l erreur, ca m eviterai bien des
problemes. Merci ...
Damien.
(je prefere demander ici avant d envoyer au support...)
Protocole de reproduction (non non
rien de cochon)
Une belle page PHP (sans contexte PHP) avec un champ upload nommé
FICHIERSOURCE, un bouton Valide (avec opérations sur les champs : 1ere
valeur, et action : aucune).
Aucun code n est associé à FICHIERSOURCE (mais vous pouver tjrs un
photo=FICHIERSOURCE..Valeur).
Voici le code du bouton Valide (WL) :
sSql est une chaîne
sPathImage est une chaîne=""
sPathImage=UploadPHP()
IF Gauche(sPathImage,
<>"/Erreur/" THEN
sSql="INSERT INTO PRODUIT (Image) VALUES (sPathImage) ;"
SQLExecute(ssql,"Req")
ELSE
Info(spathimage)
END
En gros j execute la fonction PHP UploadPHP qui me renvoye le path serveur de
l image ou l erreur si il y a. A Noter que la fonction (perso) SQLExecute
lance une connexion a la base MySql puis la fonction SQLExec, puis une
deconnexion.
Voici maintenant le code de la fonction en PHP (recopée a partir des
WTablettes) :
function UploadPHP()
{
$extensions_ok = array('png', 'gif', 'jpg', 'jpeg');
unset($erreur);
unset($extension);
if(!empty($_FILES["FICHIERSOURCE"]['tmp_name']) AND
is_uploaded_file($_FILES["FICHIERSOURCE"]['tmp_name'])) { // params
$extension = substr(strrchr($_FILES["FICHIERSOURCE"]['name'], '.'), 1);
$taille_max = 300000;
$dest_dossier = 'C:/PHP/Serveur/';
//utilisez également des slashes sous windows : $dest_dossier =
'd:/damien/photos/'
//vérifications des extensions et taille du fichier
if( (!in_array( $extension, $extensions_ok )) or $extension="" )
{ $erreur = 'Veuillez sélectionner un fichier de type png, gif ou jpg
!'; } else if( file_exists($_FILES["FICHIERSOURCE"]['tmp_name']) and
filesize($_FILES["FICHIERSOURCE"]['tmp_name']) > $taille_max) { $erreur
= 'Votre fichier doit faire moins de 500Ko !'; }
//copie du fichier
if(!isset($erreur))
{
$dest_fichier = basename($_FILES["FICHIERSOURCE"]['name']);
// formatage nom fichier
// enlever les accents
$dest_fichier = strtr($dest_fichier,
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ','AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
// remplacer les caracteres autres que lettres, chiffres et point par _
$dest_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier);
// copie du fichier
//Test : le fichier existe t il sur le serveur ?
if (file_exists($dest_dossier. $dest_fichier))
{ $erreur='Le fichier : '.$dest_fichier.' existe déja, changer de nom,
merci'; } else if
(move_uploaded_file($_FILES["FICHIERSOURCE"]['tmp_name'], $dest_dossier.
$dest_fichier)) { return $dest_dossier. $dest_fichier; } }
}
else //nécessaire car si c'est un fichier bmp il n'est pas présent sur le
serveur ! { $extension = substr(strrchr($_FILES["FICHIERSOURCE"]['name'],
'.'), 1); if ( !isset($extension))
{ $erreur = 'Erreur de FichierSource'; }
else if( (!in_array( $extension, $extensions_ok )) or $extension="" )
{ $erreur = 'Veuillez sélectionner un fichier de type gif ou jpg !';
} }
return "/Erreur/"." ".$erreur;
}