Ver Mensaje Individual
  #1 (permalink)  
Antiguo 27/06/2010, 10:24
Arcana
 
Fecha de Ingreso: mayo-2010
Mensajes: 185
Antigüedad: 14 años
Puntos: 2
Problema comprobar extension de upload

Hola, tengo este codigo de upload que se usa para subir fotos y ponerlas en una categoria en la mysql, pero el problema es que no funciona el comprobador de extension, funciona pero si lo pongo en otra parte, miren asi no funciona:

Código PHP:
<!-- Esto reemplaza a tu simple etiqueta <script> -->
<script type="text/javascript" language="javascript"> 
<!--  

function comprueba_extension(formulario, archivo) { 

//alerts para que vea lo que te muestra y lo analices
alert(formulario);
alert(archivo);

   extensiones_permitidas = new Array(".gif", ".jpg", ".png", ".bmp"); 
   mierror = ""; 
   if (!archivo) { 
      //Si no tengo archivo, es que no se ha seleccionado un archivo en el formulario 
       mierror = "No has seleccionado ningún archivo"; 
   }else{ 
      //recupero la extensión de este nombre de archivo 
      extension = (archivo.substring(archivo.lastIndexOf("."))).toLowerCase(); 
      //alert (extension); 
      //compruebo si la extensión está entre las permitidas 
      permitida = false; 
      for (var i = 0; i < extensiones_permitidas.length; i++) { 
         if (extensiones_permitidas[i] == extension) { 
         permitida = true; 
         break; 
         } 
      } 
      if (!permitida) { 
         mierror = "Comprueba la extensión de los archivos a subir. \nSólo se pueden subir archivos con extensiones: " + extensiones_permitidas.join(); 
       }else{ 
          //submito! 
         alert ("Todo correcto. Voy a submitir el formulario."); 
         //a esta linea le faltaba "document"
         document.formulario.submit(); 
         return 1; 
       } 
   } 
   //si estoy aqui es que no se ha podido submitir 
   alert (mierror); 
   return 0; 


--> 
</script> 
<!--
"this.form.name" contiene el nombre del formulario
"this.form[0].value" contiene la ruta del archivo a subir
-->


<?php 

//coloca la coneccion correcta a mysql aqui 
$conexion mysql_connect("sql201.byethost15.com""user""pass");  
//selecciona la base de datos en la que quieres trabajar 
//y si esa es la unica base de datos que tienes, no vuelvas a abrir coneccion con mysql 
//ni a seleccionar otra vez la db 
mysql_select_db("b15_5229524_graffiti"$conexion);  


$queEmp "SELECT * FROM fotos ORDER BY id DESC";   
$resEmp mysql_query($queEmp$conexion) or die(mysql_error());  
$totEmp mysql_num_rows($resEmp);  
 if (
$totEmp0) {  
    while (
$rowEmp mysql_fetch_assoc($resEmp)) {  
     
    
//while vacio... 
   
    
}  
}  


 
//si esta coneccion es la misma que la de arriba, no hace falta incluirla 
 //y menos incluirla 3 o 4 veces  
//include('config.php'); //incluimos el config.php que contiene los datos de la conexión a la db  
//include('config');  



$state false;  

if (
$_POST['action'] == "add" && $_FILES['archivo']['name'] != "") {   

//La subida de archivo dentro del condicional 
$ruta "./imagenes/" $_FILES['archivo']['name'];  
copy($_FILES['archivo']['tmp_name'], $ruta);  
echo 
"La imagen subio correctamente"
     
     
    
//VERIFICA A QUI: 
     
     
    //aqui conectas, denuevo pero al parecer a otra base de datos 
    
$conexion mysql_connect("sql201.byethost15.com""user""pass");  
    
//pero a una tabla del mismo nombre 
    
mysql_select_db("b15_5229524_graffiti"$conexion);  
     
    
//A $postear PUEDES DARLE UN VALOR MANUALMENTE PARA PROBAR Y QUE NO FALLE LA CONSULTA 
    
$postear $_SESSION[usuario];  

    
//session_start() debe estar precedido de la @ a esta altura del script 
    
@session_start();  
      
    
$que "INSERT INTO fotos (ruta, usuario, idusuario, categoria) ";  
    
$que.= "VALUES ('".$ruta."', '".$_SESSION[usuario]."', '".$_SESSION[idusuario]."', '".$_POST['categoria']."')";  
    
$res mysql_query($que$conexion) or die(mysql_error());  
    
$state true;  
     
     


  



}  


 
//SI INCLUDE() ES LA MISMA CONECCION A MYSQL QUE YA HICISTE NO ES NECESARIO 
//include('config.php'); //incluimos el config.php que contiene los datos de la conexión a la db y la sesión  

/* 
if($_SESSION[level] == 1 or $_SESSION[level] == 3){  
echo '';  
}else{  
Header("Location: index.php");  

*/  

?>  
<?
include('config.php'); //incluimos el config.php que contiene los datos de la conexión a la db y la sesión

if($_SESSION[level] == 2)
{
echo 
'';

}else{
Header("Location: index.php");
}
?>
<form name="formulario" form id="insertar" enctype="multipart/form-data" method="POST" action="">  
  <p align="left" class="Estilo1">Añadir discos</p>
  <p align="left"><br />  
    Imagen</p>
  <p align="left">
    <input type="file" name="archivo" id="archivo"/>
  </p>
  <p align="left">
    <label>
    <select name="categoria" id="categoria">
      <option value="1">Bocetos</option>
      <option value="2">Muros</option>
      <option value="3">Trenes</option>
      <option value="4">Otros</option>
    </select>
    </label>
  </p>
  <p align="left"><br />  
    <input type="submit" name="Submit" value="Subir imagen" onchange="comprueba_extension(this.form.name,this.form[0].value)">
      <br />  
      <input type="hidden" name="action" value="add" />
      <br />  
  </p>
</form>  

<?php  


if ($state) {  
echo 
"<p /><em>Foto agregada</em></p>";  



?>

Y asi si funciona:

Código PHP:
<form name="formulario" form id="insertar" enctype="multipart/form-data" method="POST" action="">  
  <
p align="left" class="Estilo1">A&#241;adir discos</p>
  
<p align="left"><br />  
    
Imagen</p>
  <
p align="left">
    <
input type="file" name="archivo" id="archivo" onchange="comprueba_extension(this.form.name,this.form[0].value)">
  </
p>
  <
p align="left">
    <
label>
    <
select name="categoria" id="categoria">
      <
option value="1">Bocetos</option>
      <
option value="2">Muros</option>
      <
option value="3">Trenes</option>
      <
option value="4">Otros</option>
    </
select>
    </
label>
  </
p>
  <
p align="left"><br />  
    <
input type="submit" name="Submit" value="Subir imagen" />
      <
br />  
      <
input type="hidden" name="action" value="add" />
      <
br />  
  </
p>
</
form



Simplemente cambio el
Código:
onchange="comprueba_extension(this.form.name,this.form[0].value)"
a el formulario archivo, pero no te deja elegir la opcion de categoria, cuando pones la foto luego luego se pone fomulario, y das aceptar, despues, imagen.jpg, y dice todo correcto voy a sumbitir el formulario.

Pero yo quiero que aparesca eso hasta que le den en el boton enviar.