Ver Mensaje Individual
  #4 (permalink)  
Antiguo 30/12/2007, 11:13
Avatar de El_Metallick
El_Metallick
 
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago, Chile
Mensajes: 1.718
Antigüedad: 22 años
Puntos: 16
Re: Problerma al tratar de hacer adjuntos al estilo gmail

Primero que todo gracias por la respuesta estimado caricatos, pero creo que no me explique bien. En el primer post que hice trataba de anidar dos forms, esto porque originalmente mi form es el siguiente:

Código:
   <form action="new_add.php" method="post" enctype="multipart/form-data">
    Titulo:<br />
    <input name="title" type="text" class="adminNewAddInput" /><br /><br />
    Adjuntos:<br />
    <div id="inputFile"></div><input type="hidden" id="nInputs" name="nInputs" value="0" /><a href="#" onClick="addInputFile()">Adjuntar Archivo</a><br /><br />
    <p align="center"><input type="submit" name="submit" value="Agregar" /></p>
  </form>
y la función addInputFile()

Código:
function addInputFile() {    
    var nInputs = document.getElementById('nInputs').value
    
    // Obtener la instancia del objeto XMLHttpRequest
    if (window.XMLHttpRequest) { // Mozilla, Safari, ...
        ajax = new XMLHttpRequest();
    }
    else if (window.ActiveXObject) { // Internet Explorer
        ajax = new ActiveXObject("Microsoft.XMLHTTP");
    }

    ajax.open("GET", "includes/addInputFile.php?id="+nInputs,true);
    ajax.onreadystatechange = function() {
        if (ajax.readyState == 4) {
            document.getElementById('inputFile').innerHTML = document.getElementById('inputFile').innerHTML + ajax.responseText
        }
    }
    
    ajax.send(null)
    
    document.getElementById('nInputs').value = ++nInputs;
}
y finalmente addInputFile.php

Código:
<?php
    if(isset($_GET["id"]))
    {
        $id = $_GET["id"];
?>
<div id="formUpload<?= $id ?>">
  <form method="post" enctype="multipart/form-data" action="new_add_attachment.php" target="iframeUpload<?= $id ?>">
    <input type="hidden" name="id" value="<?= $id ?>" /><input name="file<?= $id ?>" type="file" id="file<?= $id ?>" size="50" class="adminNewAddFile" onChange="javascript: submit();" /><br />
    <iframe name="iframeUpload<?= $id ?>" style="display:none"></iframe>
  </form>
</div>    
<?php
    } 
?>
Luego al hacer click en agregar adjunto trataria de insertar el form del addInputFile.php en el form original algo asi:

Código:
   <form action="new_add.php" method="post" enctype="multipart/form-data">
    Titulo:<br />
    <input name="title" type="text" class="adminNewAddInput" /><br /><br />
    Adjuntos:<br />
    <div id="inputFile">
      <div id="formUpload<?= $id ?>">
        <form method="post" enctype="multipart/form-data" action="new_add_attachment.php" target="iframeUpload<?= $id ?>">
          <input type="hidden" name="id" value="<?= $id ?>" /><input name="file<?= $id ?>" type="file" id="file<?= $id ?>" size="50" class="adminNewAddFile" onChange="javascript: submit();" /><br />
          <iframe name="iframeUpload<?= $id ?>" style="display:none"></iframe>
        </form>
      </div>  
    </div>
    <input type="hidden" id="nInputs" name="nInputs" value="0" /><a href="#" onClick="addInputFile()">Adjuntar Archivo</a><br /><br />
    <p align="center"><input type="submit" name="submit" value="Agregar" /></p>
  </form>
Y ahi es donde se produce el problema de forms anidados.

Ahora en el segundo post se me habia ocurrido modificar un poco el codigo de addInputFile.php

Código:
<?php
    if(isset($_GET["id"]))
    {
        $id = $_GET["id"];
?>
<div id="formUpload<?= $id ?>">
    <input type="hidden" name="id" value="<?= $id ?>" /><input name="file<?= $id ?>" type="file" id="file<?= $id ?>" size="50" class="adminNewAddFile" onChange="javascript: sendFile(this,<?= $id ?>);" /><br />
    <iframe name="iframeUpload<?= $id ?>" style="display:none"></iframe>
</div>    
<?php
    } 
?>
y en vez de enviar el form que contenia al input file hacer una llamada ajax para que subiera el archivo por detras, es por esto que se me ocurrio el codigo del segundo post

Código:
function sendFile(file,id) {
    // Obtener la instancia del objeto XMLHttpRequest
    if (window.XMLHttpRequest) { // Mozilla, Safari, ...
        ajax = new XMLHttpRequest();
    }
    else if (window.ActiveXObject) { // Internet Explorer
        ajax = new ActiveXObject("Microsoft.XMLHTTP");
    }

    ajax.open('POST','new_add_attachment.php',true);
    
    var query = 'id=' + id + '&file=' + file.value;
    
    ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    ajax.send(query);
}

Pero el problema de esto es que a new_add_attachment.php llega el nombre del archivo pero con \\ en vez de \ (C:\\Carpeta\\archivo.jpg) y no se como solucionar eso pues trato de hacerle un str_replace con php pero cuando hago str_replace("\\","\", $file) me tira conflictos con \" asique ya no se como hacerlo.

Pero bueno seguire probando aver si me funciona. En todo caso la forma de agregar inputs que sale en la pagina de javierB es mejor. adoptare esa forma.

Saludos
__________________
Haz la guerra en la cama y el amor donde se te de la gana...
El tiempo es el mejor maestro, lo único malo es que te mata...¡¡Aprovecha tu tiempo!!