Ver Mensaje Individual
  #4 (permalink)  
Antiguo 25/02/2011, 12:33
Avatar de Z3R0N3
Z3R0N3
 
Fecha de Ingreso: junio-2010
Ubicación: En algún lugar de la mancha de cuyo nombre no quiero acordarme...
Mensajes: 73
Antigüedad: 14 años, 5 meses
Puntos: 4
Respuesta: Eliminar Archivos con PHP y JS

Cita:
Iniciado por esjuanma Ver Mensaje
Hola.
Por lo que se entiende, lo que querés es eliminar archivos que están en el servidor, pidiendo antes una confirmación con Javascript.
Para eliminar esos archivos, la única forma de hacerlo es con PHP.
El código Javascript que tenés ahí, es para eliminar archivos de la PC del visitante.
Además ese método usa el ActiveXObject, de IE, por lo que estaría limitado exclusivamente a Internet Explorer (es el único navegador que puede eliminar archivos del pc del cliente).

En resumen, aunque la confirmación para eliminar requiera algo de Javascript, lo más importante es la función unlink() de PHP, que es la encargada de eliminar el archivo.
Te dejo el link con la documentación oficial de esa función:
http://www.php.net/manual/es/function.unlink.php

Saludos!


Hola esjuanma, gracias por contestar, lo que dices es totalmente correcto.

Veamos por partes:

1 - Me fijé en lo de ActiveXObject y lo eliminé.

2 - Igualmente me informaron igual que tu, que el codigo proporcionado era únicamente para eliminar archivos del lado del cliente, por ello he modificado el código por completo para que javascript unicamente se encargue de devolver si la confirmación ha sido aceptada o no a PHP, y unlink se encargue de eliminar el archivo como bien dices.


Dicho esto, el código quedaría así:



JS:

Código:
<SCRIPT>

var conexion;
function confirmar(archivoEliminar)
{
  if(confirm('¿Realmente desea eliminar el archivo por completo? \n\n NOTA :: El archivo dejará de existir para siempre.')) 
  {
    conexion=HttpRequest();
    conexion.onreadystatechange = dibujar;
    conexion.open('POST','?', true);
    conexion.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    conexion.send("dato="+archivoEliminar); 

  } else {
	conexion="";
	conexion.send("dato="); 
  }
}
function dibujar()
{
  if(conexion.readyState == 4)
    document.getElementById("proceso").innerHTML = 'Archivo eliminado';
  else
    document.getElementById("proceso").innerHTML = 'Eliminando';
}

//Funcion que evita problemas con navegadores y crea la peticion ajax
//Idea original de la funcion extraida de ajaxya.com.ar
function HttpRequest()
{
  var xmlHttp=null;
  if (window.ActiveXObject)
  {
    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
  }
  else
  {
    if (window.XMLHttpRequest)
    {
      xmlHttp = new XMLHttpRequest();
    }
  }
  return xmlHttp;
}
</SCRIPT>


PHP


Código:
$archivoURL = count(explode("-split-", $extraccionURL))-1; 

/* Aquí creamos un contador de archivos que extraemos todos ellos (con ruta completa) de la variable $extraccionURL y los separamos mediante el split*/


for ($i = 0; $i < $archivoURL; $i++) {

/* con el indice $i, podemos obtener la propiedad que desemos de cada archivo único y trabajar con él */


$urlSeparado = explode("-split-",$extraccionURL); 
/* Aquí asignamos a $urlSeparado cada uno de los archivos (con ruta completa) extraidos de la variable $extraccionURL */


$archivoSeparado = explode("<br>",$archivos); /* Aquí asignamos a $archivoSeparado en enlace <a href  de cada uno de los archivos extraidos de la variable $archivos */


$archivoMostrar = $archivoSeparado[$i];


$archivoEliminar = $urlSeparado[$i]; /* Gracias al recorrido de la variable $i, podemos asignar cada elemento a la variable $archivoEliminar para trabajar con ella refiriendonos a éstos archivos */


$_POST['dato'] = $archivoEliminar;


if (!empty($_POST['dato'])) {
  echo '<div id="proceso"></div>';
  echo '<a href="\''.unlink($archivoEliminar).'\'" onclick="return confirmar(this);"></a>'.$archivoMostrar.'<br /><br />';
}


Así queda todo, el problema está en que según recargo la página elimina los 2 archivos directamente, sin realizar la confirmación de JS ni nada.


Algo me da por pensar que el problema está en que el valor POST no nace limpio y debería en el HREF hacer referencia a eliminar la confirmación de JS.


Algo así pero con las comillas en condiciones... :P

Código:
echo '<a href="\''.unlink("javascript:return confirmar(\''.$archivoEliminar.'\');").'\'"></a>'.$archivoMostrar.'<br /><br />';

PD: ¿algo así?¿


Bueno ya me contareis... Gracias y Salu2