Problème header location avec enctype

Voici mon petit problème pour lequel je vous sollicite.

Je développe actuellement une application à laquelle je souhaite attacher des pièces jointes (upload du fichier + insertion en base du nom du fichier).

Seulement, lorsque j’upload mon fichier (via une page HTML, la page en ‘action’ met “Impossible d’afficher la page” et le redemande d’actualiser.

  • Code HTML (qui envoie le fichier) :

*Code PHP (qui recoit le fichier) :
if (is_uploaded_file($_FILES[“monfichier”][“tmp_name”]))
{
$nomFichier = $_FILES[“monfichier”][“name”];
$extension = substr($nomFichier, strrpos($nomFichier, “.”));
if (eregi("^ph", $extension))
{
header(“location:index.php?resultatFichier=ErrorExtension”);
}
else
{
$cheminFichier=$repertoire.$nomFichier;
move_uploaded_file($_FILES[“monfichier”][“tmp_name”], $cheminFichier);

   $requeteInsertFichier="insert into FICHIERS_JOINTS (ID_FICHIER, ID_DOSSIER, NOM_FICHIER, DATE_INSERTION, CP_OPERATEUR) 

values (".$MaxIdFichier.",’$NumDoss’,’$nomFichier’,’$date_insertion’,’$cp_operateur’);";

    $resultatInsertFichier=mssql_query($requeteInsertFichier);
    if ($resultatInsertFichier) 
    {
header("location:afficheDossier.php?NumDoss=".$NumDoss."&resultatFichier=succes");
    }
    else
    {
          header("location:ajoutFichiers.php?NumDoss=".$NumDoss."&resultatFichier=echec");
     }

}


Mon fichier s’insère correctement dans le repertoire et l’insertion en base s’effectue.
Par contre, comme je l’ai dit, le navigateur reste “bloquer” sur ma setFiles.php

De plus, si je n’effectue pas mon upload file et que je retire des paramètres de mon le enctype, le “header location” agit correctement et revient comme je lui demande.

Dernières infos :

  • CHMOD du repertoires “documents_uploades” en 777
  • Upload Maximum Size : 8M

Par avance, merci à vous.
HK.

Euh… De vague mémoire, on peut pas mettre une URL de "type GET " dans un header-location.

Ben si car par exemple si le fichier n’est pas chargé, le code point sur le “else” et fait un header location et je récupère les infos passées dans l’URL pour pouvoir faire l’interaction avec l’utilisateur (“Echec” m’aidera à afficher “Votre fichier n’a pas été chargé”). Mais ce n’est qu’un exemple car cela fonctionne bien dans mes autres pages…

Mais pas avec un ENCTYPE du premier formulaire HTML
Edité le 31/12/2008 à 10:27

Ha, on m’aurait mentis alors!
Ce que je ne comprends pas, c’est à quel niveau tu as un problème, quel fichier affiche-t-il en dernier?
Celui-ci : ajoutFichiers.php?NumDoss=".$NumDoss."&resultatFichier=echec
ou celui-ci : setFiles.php

Ben il affiche le setFiles.php
Et il reste bloquer dessus (avec un IE qui me dit “Impossible d’afficher la page”)

Merci pour ton investissement.
H.

Je vois pas concrètement où à lieu le problème, car tu dis que le fichier est uploadé correctement ainsi que la requête envoyée, donc a priori il n’y a pas de problème dans ta page SetFile.php.
Tu es sûr qu’il ne vient pas de ton fichier afficheDossier.php ?
Est-ce que la variable $resultatInsertFichier est bien à true quand la requête est envoyée?

Oui car c’est elle qui permet l’exécution de la requete.
Si elle est OK, l’insertion en base de l’historique se fait…

Mais je commence à soupçonner l’encodage UTF-8 dans tout cela…
Il doit y avoir divergence entre
-l’encodage de mon serveur
-l’upload du fichier lui-même

  • et la page qui l’enregistre (SetFiles.php)…

Salut,

Je crois que l’upload de fichier définit déjà un header (donc tu peux plus le définir). (je ne suis vraiment pas sûr^^)
Par contre il y a d’autres façons d’appeler tes scripts! (require, ajax…). Si tu ne peux pas régler le problème, évites le!

Ce que je comprends pas c’est que la page setFiles.php fonctionne correctement vu quelle permet l’upload et le l’enregistrement en DB. Si tu passes la ligne “header(“location:afficheDossier.php?NumDoss=”.$NumDoss.”&resultatFichier=succes");" en commentaire et que tu mets un bête “echo ‘ok’;” ca te renvoie toujours une erreur d’affichage de la page?

Kiki :
Merci pour ta réponse Kiki.
Mais ce script jtavoue que jlutilise dans pas mal de pages et d’applications et sa fonctionne à peu près bien donc vraiment jcompren pô.
Pour le header, tu as peut-être raison. A ce jour je n’ai rien trouvé.

DarKCham :
Si je mets un echo, le traitement s’effectue (upload du fichier + insertion base). Et après, le comble, sa me met un “header already sent” qui me sous-entend qui ne peut pas faire la redirection car il y a le echo. QUEL BORDEL jtassure !!

Heu… si tu remplace la ligne header location par un echo tu as un “header already sent”?? ça veut dire que quelque chose essaye de modifier le header après ton echo?? tu nous a caché des choses non? lol

si tu réduit le script pour n’avoir qu’une ligne : header(“location:afficheDossier.php”); Ca donne quoi?