IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Erreur formulaire avec XMLHttpRequest


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 6
    Par défaut Erreur formulaire avec XMLHttpRequest
    Bonjour,

    j'ai un problème avec un formulaire et notamment un champ de type "file". Ce formulaire est traité par une fonction javascript qui se charge de faire une XMLHttpRequest et qui envoit les données vers une page PHP. Sur ma page PHP, je n'ai pas de problème pour récupérer les données de type "text". En revanche, j'ai une erreur pour ma donnée de type "file". J'obtiens une erreur de type "Undefined index...".
    Voici des extraits de mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    // My form
    <form action="" method="" enctype="multipart/form-data">
    	<input type="hidden" name="max_file_size" value="1000000" />
      File : <input type="file" name="image" />
      Title : <input type="text" name="title" />
      <input type="submit" value="Add" onClick="sendRequest(this.form)" />
    </form>
     
    // sendRequest function
    function sendRequest(f) {
      var xmlRequest = null; 
      var url = null;
      var data = null
     
      if(window.XMLHttpRequest) // Firefox 
        xmlRequest = new XMLHttpRequest(); 
      else if(window.ActiveXObject) // Internet Explorer 
        xmlRequest = new ActiveXObject("Microsoft.XMLHTTP");  
     
    	var url = "doAddImage.php"
    	var image = f.elements["image"].value;
    	var title = f.elements["title"].value;
      data = "image="+image+"&title="+title;
     
    	document.getElementById("display").innerHTML = '<div>Loading...</div>';
     
      xmlRequest.open("POST", url , true); 
     
      xmlRequest.onreadystatechange = function() { 
        if (xmlRequest.readyState == 4) {
          var content = document.getElementById("display");
          content.innerHTML = xmlRequest.responseText;
        }
      }
      xmlRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      xmlRequest.send(data);
    }
     
    // doAddImage.php
    <?
      header('Content-type: text/html; charset=iso-8859-1');
     
      $title      = utf8_decode($_POST["title"]);
      $image      = $_FILES["image"]["tmp_name"];
      $image_name = $_FILES["image"]["name"];
    ?>
    L'erreur apparait pour les lignes suivantes
    $image = $_FILES["image"]["tmp_name"];
    $image_name = $_FILES["image"]["name"];

  2. #2
    Membre éclairé Avatar de MANU_2
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    417
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 417
    Par défaut
    Dans ta balise form :
    methode="POST"
    action enlève le


    Pour connaitre les :
    $image = $_FILES["image"]["tmp_name"];
    $image_name = $_FILES["image"]["name"];
    il faut tu ai déjà envoyé ton formulaire

    DONC

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (isset($_FILES["image"]["name"]))
    {
      $title      = utf8_decode($_POST["title"]);
      $image      = $_FILES["image"]["tmp_name"];
      $image_name = $_FILES["image"]["name"]; 
    }

  3. #3
    Membre à l'essai
    Inscrit en
    Septembre 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 6
    Par défaut
    J'ai essayé de mettre "POST" dans la méthode mais ça ne marche pas non plus.

    De plus, au moment où doAddImage.php est appelée, mon formulaire a été envoyé. D'ailleurs je récupère la variable $title sans aucun problème, preuve que le formulaire a été posté.

  4. #4
    Membre éclairé Avatar de MANU_2
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    417
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 417
    Par défaut
    <?
    header('Content-type: text/html; charset=iso-8859-1');

    $title = utf8_decode($_POST["title"]);
    $image = $_FILES["image"]["tmp_name"];
    $image_name = $_FILES["image"]["name"];
    ?>

    Ceci se trouve dans un fichier différent de ta form ?

  5. #5
    Membre à l'essai
    Inscrit en
    Septembre 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 6
    Par défaut
    Oui. Mon formulaire se trouve dans un fichier addImage.php. J'appelle ensuite la fonction sendRequest qui se trouve dans un fichier request.js et je traite le résultat dans un fichier doAddImage.php.

  6. #6
    Membre éclairé Avatar de MANU_2
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    417
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 417
    Par défaut
    Et avec ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <form action="doAddImage.php" method="POST" enctype="multipart/form-data">

  7. #7
    Membre à l'essai
    Inscrit en
    Septembre 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 6
    Par défaut
    Non ça ne marche pas non plus. Le fait de spécifier à la fois une action et un appel à une fonction qui crée une XMLHttpRequest provoque des problèmes (puisque l'action et la méthode d'envoi sont spécifier dans cette requête).

  8. #8
    Membre éclairé Avatar de MANU_2
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    417
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 417
    Par défaut
    Mais si tu ne précise pas où vont les données de ton formulaires ... normal que ça marche pas.

    Ton sendRequest(this.form) est censé faire quoi ?

  9. #9
    Membre à l'essai
    Inscrit en
    Septembre 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 6
    Par défaut
    Justement je précise où j'envoie mon formulaire dans ma fonction sendRequest(). C'est le principe des XMLHttpRequest. Ca correspond à ma variable url dans ma fonction javascript.

  10. #10
    Membre éclairé Avatar de MANU_2
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    417
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 417
    Par défaut
    Oui mais ton input est de type submit.

    Tu valide 2 fois ton formulaire :
    - par le submit
    - par ton sendRequest()

    Essaie de remplacer ton input submit par <a onclick=...>

Discussions similaires

  1. Problème d'envoi d'un formulaire avec xmlhttprequest
    Par lecra dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 12/10/2006, 18h35
  2. Réponses: 1
    Dernier message: 20/08/2006, 18h34
  3. Test sur formulaire avec liste des erreurs
    Par Nicos77 dans le forum Langage
    Réponses: 37
    Dernier message: 17/11/2005, 11h22
  4. Erreur sur l'ouverture d'un formulaire avec condition
    Par Virgile59 dans le forum Access
    Réponses: 4
    Dernier message: 08/11/2005, 15h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo