Deprecated: str_replace(): Passing null to parameter #3 ($subject) of type array|string is deprecated in /var/www/mybb-es.com/html/inc/class_language.php on line 201
Upload de imágenes, con mas seguridad, js?
Páginas (2): 1 2   
HSSWebs   3 Sep, 2012, 6:09 pm
#1
Bueno me pille este código bastante simple para subir imágenes:

Código PHP:
<?php
$status
= "";
if (
$_POST["action"] == "upload")
{
// obtenemos los datos del archivo
$tamano = $_FILES["archivo"]['size'];
$tipo = $_FILES["archivo"]['type'];
$archivo = $_FILES["archivo"]['name'];
$prefijo = substr(md5(uniqid(rand())),0,6);
if (
$archivo != "")
{
if (
$tipo == "image/gif" || $tipo == "image/jpeg" || $tipo == "image/jpg")
{
$destino = "uploads/".$prefijo."_".$archivo;
if (
copy($_FILES['archivo']['tmp_name'],$destino))
{
$status = "Archivo subido: <b>".$archivo."</b>";
}
else
{
$status = "Error al subir el archivo";
}
}
else
{
$status = "Error: solo se permite GIF o JPG";
}
}
else
{
$status = "Error al subir archivo";
}
}
?>

Aquí el formulario de subida:

<form action="upload.php" method="post" enctype="multipart/form-data">
<td class="text">
<input name="archivo" type="file" class="casilla" id="archivo" size="35" />
<input name="enviar" type="submit" class="boton" id="enviar" value="Upload File" />
<input name="action" type="hidden" value="upload" />
</form>

Como puedo agregarlo mas seguridad e integración con JS (Ajax) ?

Puede parecer mucho, pero lo necesito >< Gracias de antemano.
Última modificación: 3 Sep, 2012, 7:20 pm por V1K1NGO.
Edson Ordaz   3 Sep, 2012, 8:47 pm
#2
bueno le faltan cosas en seguridad como por ejemplo
Código PHP:
<?php 
if(!is_uploaded_file($_FILES['archivo']['tmp_name']))
{
echo
'Error al subir la imagen';
return
false;
}

respecto a validar la extension seria mucho mejor hacerlo asi
Código PHP:
<?php 
if(!preg_match("#^(gif|jpg|jpeg|jpe|bmp|png)$#i", strtolower(mb_substr(strrchr($_FILES["archivo"]['name'];, "."), 1))))
{
echo
'error en la extension';
return
false;
}

en particular en ves de copiar la imagen yo haria esto
Código PHP:
<?php 
$mover
= @move_uploaded_file($_FILES['archivo']['tmp_name'], $destino."/".$prefijo."_".$archivo);
if(!
$mover)
{
echo
'no se a podidoca cargar la imagen';
return
false;
}

verificaria si la imagen tiene errores al cargarse de esta manera y si es asi eliminarla
Código PHP:
<?php 
if($_FILES["archivo"]['error'])
{
@
unlink($destino);
echo
'error';
return
false;
}

y bueno para subirlo por ajax seria mucho mas sencillo...
solo poner en tu cabezera esto:
Cita:<script language="javascript">
$(document).ready(function() {

$('#form, #fat, #miformulario').submit(function() {
$.ajax({
type: 'POST',
url: $(this).attr('action'),
data: $(this).serialize(),
success: function(data) {
$('#resultado').html(data);
}
})

return false;
});
})
</script>
No te olvides de poner al formulario name="miformulario" y id="miformulario"

y donde quieras que se muestre el resultado en ajax pon arriba del formulario o donde quieras
Cita:<div id="resultado"></div>
y al mandar el formulario se envia por ajax y actualiza eso.. otra cosa en upload.php en vez de regresar el dato como lo haces osea asi:
Código PHP:
<?php 
if(blablabla)
{
$status = XXXX
}

if(
blablabla)
{
$status = XXX
}
return
$status

haslo asi:
Código PHP:
<?php 
if(blablabla)
{
echo
'TU MENSAJE';
return
false;
}

if(
blablabla)
{
echo
'TU MENSAJE';
return
false;
}

con eso donde muestre algun error o algo parara y regresara por ajax el mensaje Wink espeor te sirva..
saludos!
Edson Ordaz   3 Sep, 2012, 8:49 pm
#3
PD: Otra cosa que olvide si quieres mostrar error con ajax aslo asi

error: function(data) {
$('#error').html(data);
}
HSSWebs   4 Sep, 2012, 4:18 am
#4
Última modificación: 4 Sep, 2012, 4:40 am por V1K1NGO.
Edson Ordaz   4 Sep, 2012, 8:04 am
#5
Última modificación: 4 Sep, 2012, 8:05 am por Pomelete.
HSSWebs   4 Sep, 2012, 8:12 am
#6
Queda igual, la imagen se sube, pero el Ajax no funciona..
Solo devuelve esto
Código PHP:
<?php 
echo "Archivo subido: <b>".$archivo."</b>";
Edson Ordaz   4 Sep, 2012, 8:54 am
#7
puedes ponerme el link porfavor.. quiero ver como funciona...
HSSWebs   4 Sep, 2012, 8:55 am
#8
Lo tengo solo en mi PC, si quieres después lo subo por hay, pero ya te digo lo del ajax no funciona, recarga la pagina completa.
Edson Ordaz   4 Sep, 2012, 9:08 am
#9
ok dame unos minutos lo hago en localhost :p
Edson Ordaz   4 Sep, 2012, 9:17 am
#10
listo ya detecte el error esta mal el script le faltaba cerrar el document ready.. remplaza tu script por este

Código:
<script language="javascript">
$(document).ready(function()
{
    $('#imgupl').submit(function() {
        $.ajax({
            type: 'POST',
            url: $(this).attr('action'),
            data: $(this).serialize(),
            success: function(data) {
                $('#resultado').html(data);
            }
        })
        
        return false;
    });
})
</script>

y dime si funciona
Última modificación: 4 Sep, 2012, 9:17 am por Pomelete.
Páginas (2): 1 2   
  
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.