Mammouth du PHP |
19672 Messages
24 mai 2007, 19:31
Je crois que dans un premier temps, il y a un problème avec l'attribut action de ta balise <form>
Voici ta page refaite de fond en comble. Je l'ai largement commentée, lis chaque détail et teste là quand tu auras complété le gros manque....
<?php
/**
* D'abord on récupère l'adresse de la page en cours,
* Comme ça, on se fout du nom du fichier, ce sera toujours le bon.
*/
$url_action = $_SERVER['PHP_SELF'];
/**
* On crée le code du formulaire dont on aura ou non besoin selon le cas
* ATTENTION : ici, on utilise la syntaxe HEREDOC : le contenu de la
* variable se trouve entre "<<<HTML" et "HTML;" et ce dernier doit
* impérativement se trouver au début de la ligne.
* Un avantage de cette méthode, c'est qu'on supprime les conflits
* d'apostrophes ou de guillemets du code HTML et du code PHP et les
* variables PHP sont correctement interprétées.
*/
$code_formulaire = <<<HTML
<form enctype="multipart/form-data" action="{$url_action}" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="250000" />
<input type="file" name="fic" size=50 />
<input type="submit" name="envoi" value="Envoyer" />
</form>
HTML;
/**
* Fonction de traitement de l'envoi de fichier
*
* Cette fonction va vérifier que l'envoi est valide et renverra au choix :
* - TRUE indiquant que le code s'est correctement exécuté
* - Un message approprié en cas d'erreur.
* @return Booléen
*/
function transfert ()
{
$ret = false;
$img_blob = '';
$img_taille = 0;
$img_type = '';
$img_nom = '';
$taille_max = 250000;
$msg_erreur = true;
$ret = is_uploaded_file ($_FILES['fic']['tmp_name']);
if ( !$ret )
{
$msg_erreur = "Problème de transfert";
}
else
{
// Le fichier a bien été reçu
$img_taille = $_FILES['fic']['size'];
if ( $img_taille > $taille_max )
{
$msg_erreur = "Trop gros !";
}
$img_type = $_FILES['fic']['type'];
$img_nom = $_FILES['fic']['name'];
/**
* ... Bon ok, et la suite ?? Il faudrait peut-être déplacer le
* fichier temporaire vers sa derstination finale, tu ne crois pas ?
* .............................?????????
*/
}
return $msg_erreur;
}
?>
<html>
<head>
<title>Stock d'images</title>
</head>
<body>
<h3>Envoi d'une image</h3>
<?php
/**
* On vérifie si c'est le premier affichage ou non.
* Si la variable $_POST est détectée, c'est que le
* formulaire a déjà été affiché et on doit traiter l'envoi.
*/
if(isset($_POST['envoi']))
{
/* On appelle la fonction de traitement de l'envoi */
$upload = transfert();
/**
* Si la fonction ne renvoie pas true
* (attention, stricte égalité !== et non juste !=, voir la doc)
*/
if(true !== ($upload))
{
/* On affiche le message renvoyé */
echo("<p>". $upload ."</p>");
/* On affiche à nouveau le formulaire */
echo($code_formulaire);
}
/* Sinon, la fonction a renvoyé TRUE : */
else
{
/* On affiche le message de succès de l'opération */
echo("<p>Envoi réussi.</p>");
echo('<p><a href="'. $url_action .'">Envoyer un autre fichier ?.</a></p>');
}
}
/* Sinon, on fait un premier affichage. */
else
{
echo($code_formulaire);
}
?>
</body>
</html>
Je n'ai pas corrigé le code HTML, j'ai juste découpé ça de façon logique. Il resterait quand même de la correction et des ajouts à faire pour que ce code soit conforme et valide. Mais dans l'immédiat, fais fonctionner ça et éventuellement tu verras après comment ajuster ce point.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse 