Problème AJAX pour un " formdata.append "

Ce sujet est résolu
Default
,

Bonjour tout le monde,

Je suis actuellement en train de créer une messagerie interne avec un système de pièces jointes. J'ai créé ma messagerie interne de toute pièce mais pour faire mon système de pièce jointe j'ai utilisé un script tout fait => http://net.tutsplus.com/tutorials/java ...] es-with-ajax/

J'ai réussi à le paramétrer pour mon site, et je l'ai amélioré pour mon site : dès qu'un fichier est envoyé par l'utilisateur , il est envoyé sur le serveur et enregistré dans ma BDD mysql. Pour chaque entrée j'ai un id, une clé, et le nom du fichier mais mon problème est d'enregistrer ma clé générée sur ma page.

Voilà mes codes pour mieux comprendre mon problème :

Une partie de mon formulaire que l'utilisateur utilise pour envoyer des pièces jointes.

<section id="piecess">
  <div id="jointes">
    <h1>Joindre une ou plusieurs pièces jointes :</h1>
    <form method="post" enctype="multipart/form-data" action="upload.php">
        <input type="file" name="images" id="images" multiple />
        <input type="hidden" name="keyy" id="keyy" value="<?php echo $idpass; ?>"/>
        <button type="submit" id="btn">Upload Files!</button>
        <a class="vali" id="valii">Valider les pièces jointes</a>
    </form>
    <div id="response"></div>
    <ul id="image-list">
    </ul>
  </div>    
</section>

Voici mon générateur de clé :

<?php 
  $idpass = sha1(microtime(NULL)*100000); 
?>

Le code de traitement en AJAX :

La partie la plus importe de mon fichier JAVASCRIPT :

if (formdata) {
    formdata.append("images]", file);
    formdata.append( ..... , .......); // C'est ici que je dois envoyer ma clé ... je le supppose !            
}

Mais mon problème est d'envoyer ma clé mais étant donné que je n'ai aucune connaissance en javascript et donc ajax je ne sais absolument pas comment trouver une solution à mon problème.

Voici également mon code PHP de traitement de données : (qui fonctionne parfaitement )

<?php
foreach ($_FILES"images"]"error"] as $key => $error) {
    if ($error == UPLOAD_ERR_OK) {
        $name = $_FILES"images"]"name"]$key];
        move_uploaded_file( $_FILES"images"]"tmp_name"]$key], "uploads/" . $_FILES'images']'name']$key]);
        mysql_connect(' ******', '*******', ' *********');
    mysql_select_db(' *********');
        mysql_query("INSERT INTO piecesjointes VALUES('','".$_POST'keyy']."','".$_FILES'images']'name']$key]."')");     
    }
}
echo "<h2>Fichier(s) téléchargés !</h2>";

MERCI D'AVANCE !!

42 Réponse

1 3
Default
,

Je n'avais pas du tout pensé à ça un grand merci !! Voilà mon code : [code]<?php $idpass = sha1(microtime(NULL)*100000);

Joindre une ou plusieurs pièces jointes :

Upload Files! Valider les pièces jointes

<?php echo '(function () { var input = document.getElementById(&quot;images&quot;), formdata = false; function showUploadedItem (source) { var list = document.getElementById(&quot;image-list&quot;), li = document.createElement(&quot;li&quot;), img = document.createElement(&quot;img&quot;); img.src = source; li.appendChild(img); list.appendChild(li); } if (window.FormData) { formdata = new FormData(); document.getElementById(&quot;btn&quot;).style.display = &quot;none&quot;; } input.addEventListener(&quot;change&quot;, function (evt) { document.getElementById(&quot;response&quot;).innerHTML = &quot;</p> <h2>Patientez . . .</h2> <p>&quot; var i = 0, len = this.files.length, img, reader, file; for ( ; i &#39;; ?&gt;[/code]</p>

Default
,

Donc du coup tout marche ... C'EST TOUT SIMPLEMENT PARFAIT !!

Default
,

j'ai trouver sa pour toi !

Default
,

Merci de m'aider ... je vais regarder ça de suite !! :D

Default
,

:) de rien :)

Default
,

En fait mon problème c'est que chaque message et chaque pièce jointe à une clé qui est identique et qui est ensuite enregistrer dans la BDD. Je m'explique : dans la page de l'utilisateur, je génère une clé. Lorsqu'il envoie un message, le message est enregistrer dans la BDD avec un champ "key" qui contient ma clé, pour le moment ça marche. Lorsque qu'il upload une image, la clé générée dans la page doit être envoyé vers le fichier de traitement php de fichiers uploadés, ce qui ne fonctionne pas. [code] mysql_query("INSERT INTO piecesjointes VALUES('','".$_POST['keyy']."','".$_FILES['images']['name'][$key]."')"); . [/code] Mais mon problème est de passé la clé de la page de l'utilisateur vers la page AJAX vers la page php et c'est seulement les quelques lignes suivantes qui effectue le transfère de l'image donc je suppose que ce sont également ces lignes qui peuvent envoyer la clé ! [code] if (formdata) { formdata.append("images[]", file); formdata.append( ..... , .......); // C'est ici que je dois envoyer ma clé ... je le supppose ! } [/code] Je vous envoie tout mon code javascript pour mieux comprendre le système !! code { document.getElementById("response").innerHTML = "

Patientez . . .

" var i = 0, len = this.files.length, img, reader, file; for ( ; i

Default
,

Heu.. arf sa je connais pas encore je suis justement en train de l’étudier pour faire mon jeux ^^

Default
,

Ben si tu comprend le principe rappelle toi de moi pour m'expliquer le truc !!

(j'ai juste cette ligne a corriger et ma messagerie interne est finie !!)

Default
,

ah messagerie interne regarde s'et api :) : ici

Default
,

Merci je vais regarder ça !!

Default
,

Bon je vais essayer de lire la documentation sur les " formdata.append " même je ne comprend rien au javascript !! :(

Default
,

A sa ses moche par contre :(

Default
,

Bon ... j'ai un peu compris le truc ... mais pas totalement !! :/

=> lorsque je fais

formdata.append("keyy", "text");

il m'affiche "text" dans le champ "key" de ma BDD !

Maintenant faut envoyer ma variable $idpass !!

Default
,

alors pour sa tu doit faire des $idpass essai d'enlever "text" est ajoute au lieu de "key" $idpass est dit moi se que sa fait

Default
,

ok je vais essayer ça !!

Default
,

ça me renvoie => "[object HTMLInputElement]" dans la BDD

Default
,

Ok donc ta plus que a faire une balise d'envoi de la clé :) ensuite sa t’enverra la clé

Default
,

c'est à dire ?? :D

Default
,

essai des requête genre $idpasse passe voir ton code entier que j'essai de te mettre une variable qui enverrais la key

Default
,

ok je te passe tout mes codes ... deux secondes ... (je sens que ça va marcher ^^)

1 3