Foros del Web » Programando para Internet » PHP »

Problemas con validar upload de imagen

Estas en el tema de Problemas con validar upload de imagen en el foro de PHP en Foros del Web. Tengo un problemita al validar el archivo a subir.. necesito una ayudita Estoy usando el sistema para guardar las imagenes en la base de datos ...
  #1 (permalink)  
Antiguo 16/12/2008, 11:33
Avatar de softmaster  
Fecha de Ingreso: diciembre-2008
Mensajes: 230
Antigüedad: 15 años, 4 meses
Puntos: 12
Pregunta Problemas con validar upload de imagen

Tengo un problemita al validar el archivo a subir.. necesito una ayudita

Estoy usando el sistema para guardar las imagenes en la base de datos que nos enseño cluster :

http://www.forosdelweb.com/f18/tutorial-ejemplo-subir-archivos-bd-guardando-bd-binario-127775/

Yo en particular tengo un formulario para saber otros datos ademas de la imagen a subir.. me funciona todo.. solo que no logro validar el tipo de archivo y tamaño a subir del archivo, yo solo necesito que se suban fotos a la base de datos por ejemplo .jpg, .gif, .png y un tamaño maximo de 300 kb.



Este es el formulario:

Código PHP:
<FORM name="add" enctype="multipart/form-data" method="post" action="insertar.php">
<table width="613" border="0" align="center">
  <tr>
    <td width="123" valign="top"><div align="left">Titulo*</div></td>
    <td width="480"><INPUT name="titulo" type="text" id="titulo" value="" size="80" />
      </div></td>
  </tr>
  <tr>
    <td valign="top"><div align="left">Descripcion*</div></td>
    <td><textarea name="descripcion" cols="61" rows="10" id="descripcion"></textarea></td>
  </tr>
  <tr>
    <td valign="top"><div align="left">Tags*</div></td>
    <td><INPUT name="tag" type="text" id="tag" value="" size="80" /></td>
  </tr>
  <tr>
    <td valign="top"><div align="left">Categoria*</div></td>
    <td><label>
        <select name="categoria" id="categoria">
        <?php do { ?>
          <option value="<?php echo $row_categorias['categoria']; ?>"><?php echo ucfirst($row_categorias['categoria']); ?></option>
          <?php } while ($row_categorias mysql_fetch_assoc($categorias)); ?>
            </select>
    </label></td>
  </tr>
  <tr>
    <td valign="top"><div align="left">Formas de contacto</div></td>
    <td><textarea name="forma_contacto" cols="61" rows="3"></textarea></td>
  </tr>
  <tr>
    <td valign="top"><div align="left">Url</div></td>
    <td><INPUT type="text" name="url" value="" size="50" /></td>
  </tr>
  <tr>
    <td valign="top"><div align="left">Pais*</div></td>
    <td>
    <?php generaPaises(); ?>
    </td>
  </tr>
  <tr>
    <td valign="top"><div align="left">Estado*</div></td>
    <td><select disabled="disabled" name="estados" id="estados">
                        <option value="0">Selecciona opci&oacute;n...</option>
                    </select></td>
  </tr>
  <tr>
    <td valign="top"><div align="left">Ciudad</div></td>
    <td><INPUT name="ciudad" type="text" id="ciudad" size="32"></td>
  </tr>
  <tr>
    <td valign="top"><div align="left">Foto</div></td>
    <td><INPUT type="file" name="archivo" size="50"></td>
  </tr>
  
  <tr>
    <td valign="top"><div align="left">Email</div></td>
    <td><INPUT name="email" type="text" id="email" value="" size="50" /></td>
  </tr>
  <tr>
    <td valign="top"><div align="left">ok</div></td>
    <td><INPUT type="button" name="button" value="Anunciar" onclick="valida_envia()"></td>
  </tr>
</table>
</FORM>

insertar.php
(Con este se logra saber los datos del archivo a subir para guardar el archivo en la base de datos)

Código PHP:
<?php
//establece una conexión con la base de datos.
$conexion mysql_connect("localhost","admin","1234") or die("No se pudo realizar la conexion con el servidor.");
mysql_select_db("anuncio",$conexion) or die("No se puede seleccionar BD"); // tu_bd es el nombre de la Base de datos .. por siaca.

// archivo temporal (ruta y nombre).
$binario_nombre_temporal=$_FILES['archivo']['tmp_name'] ;

// leer del archvio temporal .. el binario subido.
// "rb" para Windows .. Linux parece q con "r" sobra ...
$binario_contenido addslashes(fread(fopen($binario_nombre_temporal"rb"), filesize($binario_nombre_temporal)));

// Obtener del array FILES (superglobal) los datos del binario .. nombre, tabamo y tipo.
$binario_nombre=$_FILES['archivo']['name'];
$binario_peso=$_FILES['archivo']['size'];
$binario_tipo=$_FILES['archivo']['type'];

//insertamos los datos en la BD.
$consulta_insertar "INSERT INTO archivos (id, archivo_binario, archivo_nombre, archivo_peso, archivo_tipo, titulo, descripcion, tag, categoria, email, forma_contacto, url, pais, estado, ciudad) VALUES ('', '$binario_contenido', '$binario_nombre', '$binario_peso', '$binario_tipo', '{$_POST['titulo']}', '{$_POST['descripcion']}', '{$_POST['tag']}', '{$_POST['categoria']}', '{$_POST['email']}', '{$_POST['forma_contacto']}', '{$_POST['url']}', '{$_POST['pais']}', '{$_POST['estados']}', '{$_POST['ciudad']}')";
mysql_query($consulta_insertar,$conexion) or die("No se pudo insertar los datos en la base de datos.");
header("location: formulario.php");  // si ha ido todo bien
exit;
?>

El tema es que yo estoy validando todos los otros datos del formulario del lado del cliente no del servidor y la verdad estoy bastante confundida.. por que busque por todos lados hace ya varios dias y no encuentro nada que me sirva..

Se puede llegar a validar el tipo de formato y peso de la imagen a subir a la base de datos.. pero del lado del usuario utilizando este sistema ???

Es que no se mucho de php.. estoy empezando.

Bueno saludos y gracias por tenerme paciencia jeje
  #2 (permalink)  
Antiguo 16/12/2008, 12:04
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 8 meses
Puntos: 102
Respuesta: Problemas con validar upload de imagen

Cita:
Iniciado por softmaster Ver Mensaje
Se puede llegar a validar el tipo de formato y peso de la imagen a subir a la base de datos.. pero del lado del usuario utilizando este sistema ???

Es que no se mucho de php.. estoy empezando.
Pero sabrás PHP es un lenguaje del lado del servidor ...

Hay una etiqueta HTML que indicaría el tamaño máximo permitido del archivo (¿alguien la usa?).
Por lo que sé con JavaScript no es posible saber el tamaño del archivo y a lo más podrías conocer la extensión (nada confiable) ... es probable con Flash se pueda, pero no estoy muy enterado del tema y a saber si quisieras meter flash solo para eso.

Como sea, siempre es mejor la validación en el servidor. En dicho código ya estás tomando los valores de su peso y del tipo de archivo, solo es hacer tu validación. En las FAQ hay una sobre la subida de archivos (creo es la 12) donde igual explica cómo sería la validación si te animaras. De otra manera, lo mejor sería que para temas del cliente, preguntes en el foro cuyo lenguaje de programación sea del cliente.

Un saludo
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #3 (permalink)  
Antiguo 16/12/2008, 12:18
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Problemas con validar upload de imagen

Lamentablemente no se puede validar esos datos del lado del cliente, es forzoso hacerlo del lado del servidor y solamente es hacer simples ifs() para comparar tus variables de $binario_tipo y $binario_peso.

Saludos.
  #4 (permalink)  
Antiguo 16/12/2008, 12:19
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: Problemas con validar upload de imagen

Hola:

Tal vez te sirva este artículo: Revisar las imágenes antes de subirlas

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #5 (permalink)  
Antiguo 16/12/2008, 12:26
 
Fecha de Ingreso: agosto-2008
Mensajes: 21
Antigüedad: 15 años, 7 meses
Puntos: 0
De acuerdo Respuesta: Problemas con validar upload de imagen

Hola softmaster, bueno te cuento que el tipo de archivo JPG, GIF lo puedes validar del lado del cliente, pero el tamaño de la imagen si se tiene que validar del lado del servidor.

Aqui te dejo el script para validar el tipo de archivo, es javascript:

Código:
-->Funcion que comprueba si la imagen es JPG
<script language="javascript" type="text/javascript">
function pre_comprobar(f){
var length = document.form1.elements.length;
validado=true;
fotos=0;
for (var i=0; i<length; i++) {
	if (document.form1.elements[i].type=="file" && document.form1.elements[i].value!=""){
		fotos++;
		foto=document.form1.elements[i].value;
		foto=(foto.substring(foto.lastIndexOf("."))).toLowerCase();
		if (foto!=".jpg") validado=false;
	}
}
if (validado==true && fotos>0) f.submit();
else if (validado==false) alert("Solo se admiten fotos en formato jpg,\ny al menos una foto tiene otro formato.");
else if (fotos==0) alert("Debe agregar al menos una foto.");
}
</script>

-->Boton que llama a la funcion es HTML
<input name="g_y" type="button" id="g_y" onclick="pre_comprobar(this.form)" value="Subir y Continuar" />
Del lado del servidor puedes validar tambien el tipo y tamaño con este script, lo puedes adaptar a tu necesidad:

Código PHP:
<?php
if (isset($_FILES["fotos"])){
    
$n_fot count($_FILES["fotos"]["name"]);
    for(
$i=0;$i<$n_fot;$i++){
        if (
is_uploaded_file($_FILES['fotos']['tmp_name'][$i])) {
            if ((
$_FILES['fotos']['type'][$i]=="image/jpeg") || ($_FILES['fotos']['type'][$i]=="image/pjpeg")) {
                if(
$_FILES['fotos']['size'][$i] < 716800) {            
            if(@
move_uploaded_file($_FILES['fotos']['tmp_name'][$i],'../fotos_inmuebles/'.$_REQUEST["codigo"].'_'.$j.'.jpg')){
                
$j++;
            }
                }else 
$mensaje='Archivo mayor a 700 KB.';
            }else 
$mensaje.='<br />Solo se admite formato jpeg para las im&aacute;genes.';
        }
    }
}
?>
Espero que te sea de ayuda, ese codigo yo lo utilizo en una aplicacion que desarrolle y funciona bien.

Saludos
  #6 (permalink)  
Antiguo 16/12/2008, 12:42
Avatar de softmaster  
Fecha de Ingreso: diciembre-2008
Mensajes: 230
Antigüedad: 15 años, 4 meses
Puntos: 12
Respuesta: Problemas con validar upload de imagen

Bueno muchas gracias chicos.. voy a mirar todo lo que me pasaron.. besotes
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 07:41.