Comunidad de diseño web y desarrollo en internet online

Upload Cin Js y Php [Pregunta] Aiudenme plis

Citar            
MensajeEscrito el 20 Nov 2009 04:36 am
Bueno Como veran es mi primer Post y nose mucho de Php y nada de Javascript ayudenme plis

Bueno empezare a esplicarle tengo un upload de php con javascript y quiero que salga un link para borrar el archivo que se ha subido lo he consegido mediante la funcion unlink con este codigo:

Código PHP :

<?

/*
archivo.php?archivo=juaz.jpg
*/

@unlink($_GET['borrar']);


?>


Y luego este:


Código HTML :

<a href="index.php?borrar=files/'+file.name+'" >delete &raquo;</a>


Todo va bien pero el problema es el siguiente que se puede borrar cualquier archivo ejemplo si yo pongo:

Código HTML :

index.php?borrar=cualquierotroarchivo.jpg


Es un grave problema porque pueden borrrar el index e incluso archivos que hacen posible el upload

Bueno eso es todo me podrian ayudar plis Thnks desde ahora ;)

Por pepelecho

16 de clabLevel



 

firefox
Citar            
MensajeEscrito el 20 Nov 2009 09:01 pm
¡Hola buenas pepelecho! ¿Qué tal? Bueno, aquí me siento capacitado para dar una opinión a modod de ayuda. Para empezar te diré que no tengo ni idea de JavaScript más que para abrir ventanitas o ubicar DIVs por la ventana a la que nos referimos, así que el ejemplo irá expuesto como si lo hicieras en ActionScript 2.0 que es el lenguaje habitual en mi. Por lo que tengo leido, no se diferencia mucho del JavaScript, así que solo tendrás que encontrar una adaptación del lenguaje a JavaScript del método deseado.

Empiezo con la exposición de la creación del archivo SWF, el cual podrás crear en caso de querer probarlo simplemente copiando el siguiente código en el primer Frame de la película dejándolo todo en forma predeterminada (Es el único Frame que te aparece).

Querría decirte antes de leer ningún código, que viene totalmente explicado cada paso que he dado dentro del código como podrás ver, para que veas el funcionamiento y ayudarte mejor al conocimiento del método que quiero mostrarte.

El nombre del archivo, en caso de que quieras probarlo, puede ser cualquiera, da igual. El códico ActionScript es el siguiente:

Código ActionScript :

stop();

// Primero marco las variables necesarias para conseguir cargar las imágenes:
var direccion:String="./imagenes/";
var num:Number;
var max:Number=0;
var n:Number=0;
var MC:MovieClip;
var columnas:Number=3;
var linea:Number;

// Para asegurarnos de su funcionamiento, vamos a crear una caja de texto en un lateral que nos dirá donde falla en caso negativo de la carga:
n++;this.createTextField("comprobacion",n,330,10,200,380);
comprobacion.html=true;
comprobacion.multiline=true;

// Creo un LoadVars para cargar las imágenes con un for(), cargando el archivo PHP con la dirección que puse en la línea anterior,
// todo dentro de una misma función para tener acceso total a ella:
var actualizar=function(){
   
   comprobacion.htmlText+="Inicio de actualizar()<br>";
   
   var leer:LoadVars=new LoadVars();
   leer.direccion=direccion;
   leer.onLoad=function(si){
      
      comprobacion.htmlText+="Comienza el onLoad();";
      
// Aquí verifico que funciona la lectura del archivo PHP que luego, en el sendAndLoad() especifico:
      if(si){
         
         comprobacion.htmlText+="Funciona onLoad();<br>";
         
// Aquí creo un for() que me facilitará la carga y ordenanza de las imágenes que quiero cargar.
         num=leer.num;
// Busco el valor de MC creados más alto. El valor inicial es 0, y se irá aumentando o disminuyendo con respecto la cantidad de imágenes recogidas.
         if(num>max){
            
            comprobacion.htmlText+="max es aumentado<br>";
            
            max=num;
         }else{
            
            comprobacion.htmlText+="max es mayor<br>";
            
            max=max;
         };
// Limpio la pantalla de imágenes cargadas:

         comprobacion.htmlText+="Comienza el borrador(){};";
         
         for(var b:Number=0;b<max;b++){
            MC=_root["img"+b];
            unloadMovie(MC);
         };
         
         comprobacion.htmlText+="comienza el creador(){};";
         
         for(var i:Number=0;i<num;i++){
            n++;MC=_root.createEmptyMovieClip("img"+i,n);
            n++;MC.createEmptyMovieClip("imagen",n);MC.imagen._y=0;MC.imagen._x=0;
            n++;MC.imagen.createEmptyMovieClip("medidas",n);MC.imagen.medidas._y=0;MC.imagen.medidas._x=0;
            n++;MC.imagen.medidas.createEmptyMovieClip("contenedor",n);MC.imagen.medidas.contenedor._y=0;MC.imagen.medidas.contenedor._x=0;
// Creo 3 MC para lo siguiente: el primero es para meter la imagen; el segundo para redimensionar acorde a sus proporciones; y el tercero para cargar la imagen.
            n++;MC.createTextField("txt",n,0,100,100,18);
            n++;MC.createTextField("peso",n,0,112,100,18);
// Aquí cargo la imagen correspondiente con el MC que estoy creando en este momento con su respectiva dirección que se mostrará en el texto que acabo de crear,
// así como otro contenedor de texto que nos muestre el tamaño del archivo por si nos interesa eliminar un archivo pesado para liberar espacio.
            MC.imagen.medidas.contenedor.loadMovie(this["img"+(i+1)].substr(2,99999));
            MC.txt.text=this["img"+(i+1)];
            MC.peso.text=this["peso"+(i+1)];
// Ahora especifico tamaños:
            MC.onEnterFrame=function(){
               if(this.imagen.medidas._width/ancho<this.imagen.medidas._height/alto){
                  this.imagen._height=100;
                  this.imagen._width=(100*this.imagen.medidas._width)/this.imagen.medidas._height;
               }else{
                  this.imagen._width=100;
                  this.imagen._height=(100*this.imagen.medidas._height)/this.imagen.medidas._width;
               };
            };
            linea=Math.floor(i/columnas);
// Especifico posición dentro los rangos que quiero (En este caso quiero hacer 3 columnas ordenadas de izquierda a derecha y de arriba a abajo:
            MC._x=(i*(MC._width+10))-(columnas*(MC._width+10)*linea);
            MC._y=((130+10)*linea)+20;
// Especifico la función en efecto de cliquear sobre la imagen:
            MC.onRelease=function(){
               var borrar:LoadVars=new LoadVars();
               borrar.direccion=this.txt.text;
// Como podrás observar, en vez de usar el comunicador GET, estoy usando POST, que en el PHP se vería como $_POST[""];
// Esto me sirve para evitar que desde la barra de direcciones me modifiquen cuaquier información del archivo PHP y evitar futuros problemas,
// Pues con $_POST[""]; no se puede acceder desde la barra de direcciones como con el $_GET[""];
               borrar.sendAndLoad("borrar.php",borrar,"POST");
// Tras eliminar el archivo, actualizo la lista de imágenes y ahí comprobarás la existencia o inexistencia de la misma.
               actualizar();
               
               comprobacion.htmlText+="Has borrado el archivo:<br>"+this.txt.text+"<br><br><br>";
               
            };
         };
      }else{
         
         comprobacion.htmlText+="Error al cargar las imágenes<br><br><br>";
         
      };
      
      comprobacion.htmlText+="Terminó el onLoad()<br>Hay "+num+" imágenes<br><br><br>";
      
   };
   
   comprobacion.htmlText+="Comienza el sendAndLoad()<br>";
   
// Uso el mismo método que usé con la variable "borrar", usando el método POST para evitar malos usos por la barra de direcciones.
   leer.sendAndLoad("leer.php",leer,"POST");
   
   comprobacion.htmlText+="Finalizó la actualizar()<br><br><br>";
};

// Ejecutas la funcion dicha.
actualizar();


Ahora necesitamos el archivo PHP leer.php al que hacemos referencia en el código anterior:

Código PHP :

<?php

// Leo la variable que envié desde el ActionScript por el método $_POST[""]; para evitar malos usos por la barra de direcciones.
// Colocaré con él todas las variables necesarias para el funcionamiento posterior del foreach();.
   $direccion=$_POST["direccion"];
   $n=0;
   
// Cargo la dirección de las imágenes que envié del ActionScript y luego leo todas las direcciones de archivos existentes.
   $imagenes=glob("$direccion{*.jpg,*.gif,*.png}", GLOB_BRACE);
   foreach($imagenes as $imagen){
// Cargo las especificaciones de cada imagen y las añado a las variables de lectura de ActionScript en modo texto con un echo "".
      $n++;
      $peso=filesize($imagen);
      $img=$imagen;
      echo "&img$n=$img&peso$n=$peso&<br>";
   };
   
// Cargo el número de imágenes totales en la carpeta.
   echo "&num=$n&";
   
?>


Como podrás ver, usé el método$_POST[""];, que sustituiría en tu código al $_GET[""];. De esta manera evitas que la gente que quiera husmear en tu web, acceda de forma fácil desde la barra de direcciones a las variables que se encuentran dentro de tu archivo PHP.

El siguiente código es el que realmente te interesa, es donde aparece reflejado lo que quieres hacer, pero tendrás que adaptarlos si lo quieres hacer en JavaScript. El código es el sguiente:

Código PHP :

<?php

// Con este archivo lo que pretendemos es borrar el archivo que especificamos en el SWF por el método que tú,
// pepelecho, propusiste, pero esta vez cambiamos el modo $_GET[""]; por el método $_POST[""]; de la siguiente manera:

// Cargamos la dirección del archivo en cuestión leyéndolo por el método $_POST[""];
   $direccion=$_POST["direccion"];
   
// Y usamos tu método, el cual se supone que garantiza el borrado del archivo en cuestion:
   @unlink($direccion);
   
?>


Ésto fue probado en un servidor Lycos, otro IEspana y en el WAMP Server y funcionó perfectamente. Espero que te haya servido de ayuda. Un saludo y perdona no podértelo poner directamente en JavaScript.

¡Un saludo!

Por miglug

Claber

113 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 21 Nov 2009 10:56 am
Thnks x contestar ta bn util ese code pero no es lo que buscaba :shock: io lo que digo es para que cuando el usuario suba un archivo,al usuario le salga un link que para que pueda borrar directamente el archivo

Por pepelecho

16 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.