Foros del Web » Programando para Internet » PHP »

problemas con multipart/form-data

Estas en el tema de problemas con multipart/form-data en el foro de PHP en Foros del Web. hola muy buenas Me estoy encontrando con un error al subir una imagen a mi base de datos. El problema viene que si le digo ...
  #1 (permalink)  
Antiguo 23/02/2012, 06:23
 
Fecha de Ingreso: agosto-2011
Ubicación: barcelona
Mensajes: 237
Antigüedad: 12 años, 8 meses
Puntos: 1
problemas con multipart/form-data

hola muy buenas

Me estoy encontrando con un error al subir una imagen a mi base de datos.

El problema viene que si le digo al formulario que sea multipart/form-data el nombre de la imagen no se me pasa a la base de datos, pero la imagen sube a la carpeta y si quito del formulario el multipart/form-data la imagen no sube a la carpeta pero si se guarda el nombre en la base de datos que puedo hacer es por culpa del script lo pongo aquí abajo para ver si alguien me puede guiar un poco si tiene algún error.

gracias

Código PHP:
Ver original
  1. <?php
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8. // Primero comprobamos que ningún campo esté vacío y que todos los campos existan.
  9. if(isset($_POST['logo']) && !empty($_POST['logo']) &&
  10. isset($_POST['tienda']) && !empty($_POST['tienda'])) {
  11.    
  12.    
  13.  
  14.  
  15. $fondo = $_POST['logo'];   
  16. $tienda=$_POST['tienda'];
  17.  
  18.  
  19.  
  20.  
  21.  
  22. // Si entramos es que todo se ha realizado correctamente
  23.  
  24. $link = mysql_connect("localhost","root","");
  25. mysql_select_db("blueberryswebtiendas",$link);
  26.  
  27. // Con esta sentencia SQL insertaremos los datos en la tabla diseny para los fondo
  28. $sql = mysql_query("select count(*) as total from diseny where tienda = '$tienda'");
  29. $row = @mysql_fetch_array($sql);
  30. if ($row['total'] > 0){ // el usuario ya existe
  31. // SENTENCIA DE ACTUALIZACIÓN para actualizar los campos
  32. mysql_query ("UPDATE diseny SET logo='{$_POST['logo']}',tienda='{$_POST['tienda']}' WHERE  tienda='$tienda'",$link);
  33. } else { // el usuario no existe
  34. // SENTENCIA DE INSERCIÓN si es un campo nuevo lo insertamos
  35. mysql_query("INSERT INTO diseny (logo,tienda)
  36. VALUES ('{$_POST['logo']}','{$_POST['tienda']}')",$link);
  37. }
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44. // Ahora comprobaremos que todo ha ido correctamente
  45. $my_error = mysql_error($link);
  46.  
  47. if(!empty($my_error)) {
  48.  
  49. echo "Ha habido un error al insertar los valores. $my_error";
  50.  
  51. } else {
  52.  
  53. echo "Los datos han sido introducidos satisfactoriamente";
  54.  
  55. }
  56.  
  57. } else {
  58.  
  59. echo "Error, no ha introducido todos los datos";
  60.  
  61. }
  62.  
  63. //guardar imagen en carpeta
  64.  
  65. if (isset ($_FILES['logo']['name'])){
  66.     $nombre_archivo=$_FILES['logo']['name'];
  67.     echo $nombre_archivo;
  68.     $tamano=$_FILES['logo']['size'];
  69.     if($tamano > 100000000){
  70.     echo " OCUPA DEMASIADO.";
  71.     }else{
  72.         if(move_uploaded_file($_FILES['logo']['tmp_name'],"imglogo/" . $nombre_archivo)){
  73.             echo " HA SIDO SUBIDO.";
  74.         }else{
  75.             echo " NO HA SIDO SUBIDO.";
  76.  
  77.         }
  78. }
  79. }
  80.     ?>
  #2 (permalink)  
Antiguo 23/02/2012, 08:04
 
Fecha de Ingreso: agosto-2010
Ubicación: Tenerife
Mensajes: 893
Antigüedad: 13 años, 8 meses
Puntos: 202
Respuesta: problemas con multipart/form-data

Revísalo porque lo acabo de hacer sobre la marcha. Si te sirve cambia las cosas según tu forma de programar.
Básicamente cambie la estructura de los ifs porque según entendí la imagen tiene que subirse si entra en el insert o el update y tal y como estaba no era el caso.
Abusé de las llaves {} para que se viera mejor la estructura.

Código PHP:
<?php

    
// Pon esto en un include para no escribir la conexión en cada script p.e: include ('conexion.php');
       
$link mysql_connect("localhost","root","");
    
mysql_select_db("blueberryswebtiendas",$link);
    
////////////////////////////////////////////////
    
    // Comprobamos los datos:
    
if(isset($_POST['logo']) and !empty($_POST['logo']) and
    isset(
$_POST['tienda']) and !empty($_POST['tienda']) and isset ($_FILES['logo']['name']))
    {
        
//Pon seguridad en tus variables post para evitar inyecciones, usa expresiones regulares y mysql_real_escape_string()
        
$fondo  $_POST['logo'];   
        
$tienda $_POST['tienda'];
    
        
//Cuando subas el script a tu web elimina los mysql_error para evitar dar información de tu BD
        //Eliminé los $links de la conexión que no hacen falta en la consulta. Ya la tienes abierta.
        
if($sql mysql_query("select count(*) as total from diseny where tienda ="$tienda)
        or die(
"Ha habido un error al insertar los valores. Error: ".mysql_error() ) ) 
        {
            
            
$flag false// boolean para comprobar que entro en el update o el insert
            
$row mysql_fetch_array($sql);

            if (
$row['total'] > 0// el usuario ya existe
            
{             
                
// SENTENCIA DE ACTUALIZACIÓN para actualizar los campos
                
if (mysql_query ("UPDATE diseny SET logo='".$_POST['logo']."',tienda='".$_POST['tienda']."' WHERE tienda = ".$tienda) or die( mysql_error() ) )
                {
                    
$flag = !$flag;
                }
            } 
            else 
// el usuario no existe
            

                
// SENTENCIA DE INSERCIÓN si es un campo nuevo lo insertamos
                
if (mysql_query("INSERT INTO diseny (logo,tienda) VALUES ('".$_POST['logo']."','".$_POST['tienda']."')") or die( mysql_error() ) )
                {
                    
$flag = !$flag;
                }
            }
            
            
//Si se actualizó o insertó procedemos a subir la imagen:
            
if($flag == true)
            {
                echo 
'entró';    
                
                
//guardar imagen en carpeta 
                
$nombre_archivo=$_FILES['logo']['name'];
                echo 
$nombre_archivo;
                
$tamano $_FILES['logo']['size'];
                    
                if(
$tamano 100000000)
                {
                    echo 
" OCUPA DEMASIADO.";    
                }
                else
                {
                    if(
move_uploaded_file($_FILES['logo']['tmp_name'],"imglogo/" $nombre_archivo))
                        echo 
" HA SIDO SUBIDO.";
                    else
                        echo 
" NO HA SIDO SUBIDO.";
                }                    
            }
            else
            {
                echo 
'No se ha podido proceder';    
            }
     
        }
        else 
//Comprobamos tbn que entró en la consulta y si no, lo mostramos en pantalla.
        
{
            echo 
'No se encuentra ese elemento en la BD';
        }
    }
    else
    {
        echo 
'datos del $_POST incorrectos';    
    }

?>
__________________
Pensaba que internet era una gran biblioteca de sabiduría, hasta que comprendí que un libro no puede tener mil páginas llenas de faltas de ortografía... :(
  #3 (permalink)  
Antiguo 23/02/2012, 11:30
 
Fecha de Ingreso: agosto-2011
Ubicación: barcelona
Mensajes: 237
Antigüedad: 12 años, 8 meses
Puntos: 1
Respuesta: problemas con multipart/form-data

IEKK muchas gracias por contestar ya pensaba que nadie me diría nada voy a probar a ver que tal gracias
  #4 (permalink)  
Antiguo 23/02/2012, 17:01
 
Fecha de Ingreso: agosto-2011
Ubicación: barcelona
Mensajes: 237
Antigüedad: 12 años, 8 meses
Puntos: 1
Respuesta: problemas con multipart/form-data

no me funciona ahora es peor no hace nada
  #5 (permalink)  
Antiguo 24/02/2012, 05:29
 
Fecha de Ingreso: agosto-2010
Ubicación: Tenerife
Mensajes: 893
Antigüedad: 13 años, 8 meses
Puntos: 202
Respuesta: problemas con multipart/form-data

pon un echo después del primer if.
Si no te escribe nada entonces es un problema con los datos del formulario.

Si te escribe entonces iremos viendo donde se para el código.
__________________
Pensaba que internet era una gran biblioteca de sabiduría, hasta que comprendí que un libro no puede tener mil páginas llenas de faltas de ortografía... :(
  #6 (permalink)  
Antiguo 24/02/2012, 06:59
 
Fecha de Ingreso: agosto-2011
Ubicación: barcelona
Mensajes: 237
Antigüedad: 12 años, 8 meses
Puntos: 1
Respuesta: problemas con multipart/form-data

buff IEKK gracias por tu ayuda pero me dice datos del $_POST incorrectos mira este es el form

Código HTML:
Ver original
  1. <div id="insertarlogo"   >
  2.  
  3.   <form action="logo.php" method="post" enctype="multipart/form-data" name="form2" id="form2">
  4.     <br />
  5.     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Inserta el logo de tu empresa <br />
  6.     <table align="center">
  7.       <tr valign="baseline">
  8.         <td nowrap="nowrap" align="right">Tienda:</td>
  9.         <td><input type="text" name="tienda" value="<?php echo $_SESSION['MM_Username']; ?>" size="32" /></td>
  10.         </tr>
  11.       <tr valign="baseline">
  12.         <td nowrap="nowrap" align="right">Logo:</td>
  13.         <td><input type="file" name="logo" id="logo" /></td>
  14.         </tr>
  15.       <tr valign="baseline">
  16.         <td nowrap="nowrap" align="right">&nbsp;</td>
  17.         <td><input type="submit" value="Insertar imagen" /></td>
  18.         </tr>
  19.     </table>
  20.     <input type="hidden" name="MM_insert" value="form2" />
  21.   </form><a href="javascript:cerrar2();"><br />
  22.   <br />
  23.   <br />
  24.   <br />
  25.   <br />
  26.   <br />
  27.   <br />
  28.  
  29.   presiona aquí para cerrar </a>
  30. </div>

bueno esto para cerrar el div
Código Javascript:
Ver original
  1. <script>function mostrardiv2() {
  2. div = document.getElementById('insertarlogo');
  3. div.style.display = '';
  4. }
  5. function cerrar2() {
  6. div = document.getElementById('insertarlogo');
  7. div.style.display='none';
  8. }
  9. </script>

no se por si sirve para ver el error, este form hace una llamada a logo.php que iría el código que me pasaste gracias chico.
  #7 (permalink)  
Antiguo 25/02/2012, 06:36
 
Fecha de Ingreso: agosto-2010
Ubicación: Tenerife
Mensajes: 893
Antigüedad: 13 años, 8 meses
Puntos: 202
Respuesta: problemas con multipart/form-data

Disculpa la demora en responder. Basta mirar mi procedencia para entender que por estas fechas estamos con demasiadas fiestas

Bueno al tema. Lo que hay que cambiar es una tontería.
Por copiar tú código sin analizar bien los $_POST cometí el mismo fallo que tú.
El código html del form siempre ayuda
$_POST['logo'] no existe luego no va a entrar en el if. Es $_FILES['logo']

Es decir, sólo tienes que cambiar el primer if a esto:

Código PHP:
    if( isset($_POST['tienda']) and !empty($_POST['tienda']) and isset ($_FILES['logo']) )
    { 
A partir de ahí entrará en el resto de código. Cualquier otro problema coméntanos.

Te recomiendo que valides que el archivo que subes sea una imagen y de paso compruebes que tipo de imagen, es decir, su extensión.
__________________
Pensaba que internet era una gran biblioteca de sabiduría, hasta que comprendí que un libro no puede tener mil páginas llenas de faltas de ortografía... :(

Etiquetas: formulario, mysql, sql, tabla, usuarios
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




La zona horaria es GMT -6. Ahora son las 12:28.