Foros del Web » Programando para Internet » PHP »

Error enviando noticias con o sin imágenes a base de datos desde formulario admin

Estas en el tema de Error enviando noticias con o sin imágenes a base de datos desde formulario admin en el foro de PHP en Foros del Web. Hola. Estoy creando un administrador de contenidos con un formulario en html5 y probando la opción de enviar noticias con la opción de imágenes o ...
  #1 (permalink)  
Antiguo 23/02/2013, 18:02
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años
Puntos: 65
Error enviando noticias con o sin imágenes a base de datos desde formulario admin

Hola.

Estoy creando un administrador de contenidos con un formulario en html5 y probando la opción de enviar noticias con la opción de imágenes o sin imágenes. Por ahora estoy haciendo pruebas para ir comprobando lo siguiente:

- Si existe una imágen a enviar que haga un aviso de que sí hay imagen.
- Si existe dicha imágen que revise si su formato es correcto (jpg, gif, png)
- Si no lo es que avise que no es correcto dicho formato.
- Si no existe imágen que avíse diciendo no hay imagen (para luego hacer el envío)

Por ahora lo estoy preparando asi:

Código HTML:
Ver original
  1. <form action="" id="enviar-noticia" name"enviar-noticia" method="post" enctype="multipart/form-data" >
  2.                     <label for="titulo">Título:</label><br />
  3.                     <input type="text" id="titulo" name="titulo" size="80" required /><br />
  4.                     <label for="noticia">Noticia:</label><br />
  5.                     <textarea id="noticia" name="noticia" cols="70" rows="10"></textarea><br />
  6.                     <label for="imagen">Imagen: </label>                               
  7.                     <input type="file" id="imagen1" name="imagen1" title="Enviar imagen" />        
  8.                     <input type="submit" id="enviar" name="enviar" value="Enviar">
  9.                 </form>

Código PHP:
Ver original
  1. <?php
  2.                 if (isset($_POST["enviar"]))
  3.                 {                  
  4.                     /*Primero compruebo si se ha elegido una imagen*/
  5.                     if($_FILES["imagen1"]['tmp_name']!="")
  6.                     {
  7.                         echo "Hay imagen ";
  8.                         /*--------------------------- Aquí preparo la imagen, imagen1*/
  9.                         //Ruta para subir el archivo
  10.                         $destino = '../img';                   
  11.                         //Nombre de la imagen
  12.                         $imagen1=$_FILES["imagen1"]["name"];       
  13.                         //Nombre Imagen temporal
  14.                         $imagen1_tmp=$_FILES["imagen1"]["tmp_name"];       
  15.                         //Tamaño
  16.                         $imagen1_tamano=$_FILES["imagen1"]["size"];
  17.                         $kilobytes=$imagen1_tamano/1024;//Tamaño de la imagen en Kylobytes;
  18.                         $maximo = 102400; //100Kb
  19.                         $max=1500000; //(1.5Mb)    
  20.                         //Tipo de archivo  
  21.                         $imagen1_tipo=$_FILES["imagen1"]["type"];
  22.                         //Compruebo si el tipo de archivo es correcto
  23.                         if($imagen1_tipo == "image/jpeg" or $imagen1_tipo == "image/gif" or $imagen1_tipo == "image/png" or $imagen1_tipo == "image/x-png")
  24.                         {
  25.                             echo "La imagen es correcta<br />";                        
  26.                         }                      
  27.                         else{
  28.                             echo "Error, formato de imagen no válida.";
  29.                         }          
  30.                     }
  31.                     /*Si no se ha elegido ninguna imagen*/
  32.                     else
  33.                     {                              
  34.                         echo "No lleva imágenes y preparo el envío.";
  35.                     }                      
  36.                 }
  37.                 ?>

Todo sale bien sin embargo si meto un archivo .pdf o .avi o .mp3 directamente pasa a no hay imagen y entonces el usuario si podría hacer el envio, cuando lo que debería de aparecer es: "Error, formato de imagen no válida." y así no poder enviarse para que el usuario meta una imagen correcta.

¿Qué debo de cambiar en ese código?. Saludos.
  #2 (permalink)  
Antiguo 23/02/2013, 18:49
Avatar de skiper0125  
Fecha de Ingreso: octubre-2010
Ubicación: $this->Mexico('Toluca');
Mensajes: 1.127
Antigüedad: 13 años, 5 meses
Puntos: 511
Respuesta: Error enviando noticias con o sin imágenes a base de datos desde formulari

Hola que tal.

observando el código se me viene a la mente que cambies la validación del tipo de documento por:

Código PHP:

if( ($imagen1_tipo == "image/jpeg") || ($imagen1_tipo == "image/gif") || ($imagen1_tipo == "image/png") || ($imagen1_tipo == "image/x-png") )

prueba y comentas
__________________
Recuerda que estamos aquí para orientarte, y no para hacer tu trabajo.
Si mi aporte fue de ayuda, recuerda que agradecer no cuesta nada +1

Skiper0125
  #3 (permalink)  
Antiguo 23/02/2013, 19:54
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años
Puntos: 65
Respuesta: Error enviando noticias con o sin imágenes a base de datos desde formulari

Hola skiper0125.

He cambiado a tu ejemplo y parecía que iba bien pero veo que me sigue dando problemas:

1 - Al entrar si pongo un .jpg grande de más de 2mb no lo reconoce y me devuelve "No lleva imágenes y preparo el envío."
2 - Sin pongo un avi o mp3 no lo reconoce y dice "No lleva imagenes y preparo el envío"

Si pongo un pdf o un rtf por ejemplo si me dice archivo no válido pero los otros me siguen dando problemas, solo una vez de pronto aparece el error de tamaño máximo no permitido, no se si será por la caché o que el formulario siempre carga en la misma web.

Los cambios son estos:

Código PHP:
Ver original
  1. <?php
  2.                 if (isset($_POST["enviar"]))
  3.                 {                  
  4.                     /*Primero compruebo si se ha elegido una imagen*/
  5.                     if($_FILES["imagen1"]['tmp_name']!="")
  6.                     {
  7.                         echo "Hay imagen ";
  8.                         /*--------------------------- Aquí preparo la imagen, imagen1*/
  9.                         //Ruta para subir el archivo
  10.                         $destino = '../img';                   
  11.                         //Nombre de la imagen
  12.                         $imagen1=$_FILES["imagen1"]["name"];       
  13.                         //Nombre Imagen temporal
  14.                         $imagen1_tmp=$_FILES["imagen1"]["tmp_name"];       
  15.                         //Tamaño
  16.                         $imagen1_tamano=$_FILES["imagen1"]["size"];
  17.                         $kilobytes=$imagen1_tamano/1024;//Tamaño de la imagen en Kylobytes;
  18.                         $maximo = 102400; //100Kb
  19.                         $max=1500000; //(1.5Mb)    
  20.                         //Tipo de archivo  
  21.                         $imagen1_tipo=$_FILES["imagen1"]["type"];
  22.                         //Compruebo si el tipo de archivo es correcto
  23.                         /*if($imagen1_tipo == "image/jpeg" or $imagen1_tipo == "image/gif" or $imagen1_tipo == "image/png" or $imagen1_tipo == "image/x-png")*/
  24.                         if( ($imagen1_tipo == "image/jpeg") || ($imagen1_tipo == "image/gif") || ($imagen1_tipo == "image/png") || ($imagen1_tipo == "image/x-png") )  
  25.                         {
  26.                             echo "Formato de imagen correcto<br />";
  27.                             //Preparo la extensión para el nombre de la imagen.
  28.                             switch($imagen1_tipo)
  29.                             {
  30.                                 case'image/jpeg';
  31.                                 $ext=".jpg";
  32.                                 break;
  33.                                 case'image/gif';
  34.                                 $ext=".gif";
  35.                                 break;
  36.                                 case'image/png';
  37.                                 $ext=".png";
  38.                                 break;
  39.                                 case'image/x-png';
  40.                                 $ext=".png";
  41.                                 break;
  42.                             }
  43.                             //Si es correcto compruebo si no pasa del el tamaño máximo
  44.                             if($imagen1_tamano <1500000)
  45.                             {                              
  46.                                 echo "Tamaño permitido, se puede hacer el envío";
  47.                             }
  48.                             //Si supera el tamaño máximo.
  49.                             else
  50.                             {
  51.                                 echo "Error: El tamaño máximo de la imagen es 1.5Mb";
  52.                             }                          
  53.                         }                      
  54.                         else
  55.                         {
  56.                             echo "Error, formato de imagen no válida.";
  57.                         }          
  58.                     }
  59.                     /*Si no se ha elegido ninguna imagen*/
  60.                     else
  61.                     {                              
  62.                         echo "No lleva imágenes y preparo el envío.";
  63.                     }                      
  64.                 }
  65.                 ?>

¿Sería bueno enviar el formulario a otro archivo de respuesta o ya con ese debería de ir todo bien?

Gracias por la ayuda, saludos.
  #4 (permalink)  
Antiguo 24/02/2013, 05:12
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años
Puntos: 65
Respuesta: Error enviando noticias con o sin imágenes a base de datos desde formulari

Hola de nuevo.

Sigo haciendo pruebas y me sigue dando error, cuando subo un archivo.avi , mp3 o incluso un jpg que es mayor de 1.5mb no los reconoce y me lleva a la opción de no lleva imágenes y si se puede enviar, es decir no los reconoce.

¿Debo de cambiar algo más en el código anterior?
  #5 (permalink)  
Antiguo 24/02/2013, 06:16
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: Error enviando noticias con o sin imágenes a base de datos desde formulari

Que tal, tu problema es porque por defecto PHP tiene un limite de 2mb por archivo a subir, mas a parte, también existe un limite de 30 segundos para tener en ejecución un archivo PHP (el archivo se mantiene ejecutando mientras se sube el archivo), si se sobre pasa cualquiera de las limitaciones se cancela la subida de archivos, puedes ampliar esta limitación desde el mismo archivo usando la función ini_set() y las variables "upload_max_filesize", "post_max_size" y "max_execution_time" o desde el archivo php.ini...

Por otro lado, te hago unas recomendaciones, es mejor usar isset() o empty() para verificar si una variable existe, ya que si haces una comprobación directamente con if este generará un error a nivel "notice" o como mucho "alert", pero sea cual sea el nivel de error al final... es un error >.<

Con referencia al anterior, es mejor comprobar si hay un archivo a subir usando is_uploaded_file() que con cualquier otra función, ya que los archivos pueden ser "inyectados" (no recuerdo en este momento el nombre correcto), por lo tanto la función verifica que el archivo sea subido realmente por un formulario con metodo POST y que no provenga desde otra fuente...

Si vas a subir imagenes te recomiendo encarecidamente que uses otro metodo para saber si es una imagen REAL, ya que la variable $_FILES['archivo']['type'] es proporcionada por el navegador, y este se basa sobre la extención del archivo y no sobre el mime-type real, por otro lado, esta variable es manipulable de manera muy facil, si son imagenes puedes usar la función getimagesize() la cual retornará información del archivo, como su alto, su ancho, si tipo (real) y otros 4 elementos mas "específicos"

Y por ultimo, no veo que "guardes" el archivo en ningún lugar de tu código, recuerda que PHP sube el archivo a una carpeta temporal, de hay tu tienes que moverla a su destino final para que pueda ser manipulable y accesible, para eso es necesario usar move_uploded_file()
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #6 (permalink)  
Antiguo 24/02/2013, 12:42
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años
Puntos: 65
Respuesta: Error enviando noticias con o sin imágenes a base de datos desde formulari

Hola Nemutagk.

He probado varias opciones con isset o empty pero no me lo reconocía:

Código PHP:
if(empty($_FILES["imagen1"]['tmp_name'])) 
if(isset(
$_FILES["imagen1"]['tmp_name'])) 
En cuanto al resto de explicacioes tendría que ir paso a paso de nuevo ya que muchas de estas son nuevas para mi, incluso lo del tiempo del navegador y el máximo de 2mb, de todas formas he probado y a veces lo reconoce y otras no.

El ejemplo que estaba siguiendo es sobre una aportación del foro, en concreto esta:

http://www.forosdelweb.com/f18/aport...on-php-568511/
http://www.forosdelweb.com/f18/aport...1/#post2333342

Y bueno no había puesto antes todo lo de subir el archivo para no llenar de códigos mi error. Lo que tengo ahora al completo sería algo así:

Código PHP:
<?php
                
if (isset($_POST["enviar"]))
                {                    
                    
/*Primero compruebo si se ha elegido una imagen*/                    
                    
if($_FILES["imagen1"]['tmp_name']!="")
                    {                    
                        
/*echo "Hay imagen ";*/
                        /*--------------------------- Aquí preparo la imagen, imagen1*/
                        //Ruta para subir el archivo
                        
$destino '../img';                    
                        
//Nombre de la imagen
                        
$imagen1=$_FILES["imagen1"]["name"];        
                        
//Nombre Imagen temporal
                        
$imagen1_tmp=$_FILES["imagen1"]["tmp_name"];        
                        
//Tamaño
                        
$imagen1_tamano=$_FILES["imagen1"]["size"];
                        
$kilobytes=$imagen1_tamano/1024;//Tamaño de la imagen en Kylobytes;
                        
$maximo 102400//100Kb
                        
$max=1500000//(1.5Mb)        
                        //Tipo de archivo     
                        
$imagen1_tipo=$_FILES["imagen1"]["type"];
                        
//Compruebo si el tipo de archivo es correcto                        
                        
if( ($imagen1_tipo == "image/jpeg") || ($imagen1_tipo == "image/gif") || ($imagen1_tipo == "image/png") || ($imagen1_tipo == "image/x-png") )  
                        {
                            
/*echo "Formato de imagen correcto<br />";*/
                            //Preparo la extensión para el nombre de la imagen.
                            
switch($imagen1_tipo)
                            {
                                case
'image/jpeg';
                                
$ext=".jpg";
                                break;
                                case
'image/gif';
                                
$ext=".gif";
                                break;
                                case
'image/png';
                                
$ext=".png";
                                break;
                                case
'image/x-png';
                                
$ext=".png";
                                break;
                            }                            
                            
//Si es correcto compruebo el tamaño máximo
                            
if($imagen1_tamano <1500000)
                            {                                 
                                
/*echo "Tamaño permitido, se puede hacer el envío"; */                                
                                // Creamos la cadena aletoria
                                
$str "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";
                                
$cad1 "";
                                for(
$i=0;$i<12;$i++)
                                {
                                    
$cad1 .= substr($str,rand(0,62),1);
                                }
                                
// Fin de la creacion de la cadena aletoria 
                                
$nombre_imagen1=$cad1;
                                
//En caso de que tenga espacios los sustituyo por un guión bajo
                                
$nombre_imagen1=str_replace(" ","_"$nombre_imagen1);
                                
//Le añado la extensión 
                                
$nombre_imagen1=$nombre_imagen1.$ext;
                                
//La subo al servidor
                                
move_uploaded_file $_FILES 'imagen1' ][ 'tmp_name' ], $destino '/' .$nombre_imagen1);                                             
                                
/*--Preparo el envío----------*/
                                
$enviar="Insert into noticias (titulo, noticia, imagen, fecha) values ('".$_POST["titulo"]."','".$_POST["noticia"]."','".$nombre_imagen1."', now())";
                                if(
$ejecutar_enviar=mysql_query($enviar))
                                {
                                    echo 
"Noticia enviada correctamente";
                                }
                                else
                                {
                                    echo 
"Error: " .mysql_error();
                                }                                                        
                            }
                            
/*Si el tamaño es mayor que 1.5mb da error*/                    
                            
else
                            {                                
                                echo 
'<p class="">Error: El tamaño máximo es 1.5 Mb</p>';
                            }
                        }                                
                        
/*Si el el formato de imagen no es correcto da error*/
                        
else
                        {
                            echo 
"Error, formato de imagen no válida.";
                        }
                        
/*Fin del envío con imágenes -----------*/                         
                    
}
                    
/*Si no se ha elegido ninguna imagen preparo el envio*/
                    
else
                    {                                
                        
/*echo "No lleva imágenes y preparo el envío sin imagen.";*/
                        
$enviar="Insert into noticias (titulo, noticia, fecha) values ('".$_POST["titulo"]."','".$_POST["noticia"]."', now())";                                                        
                                if(
$ejecutar_enviar=mysql_query($enviar))
                                {
                                    echo 
"Noticia enviada correctamente";
                                }
                                else
                                {
                                    echo 
"Error: " .mysql_error();
                                }                        
                    }
                    
/*Fin del envío sin imágenes -----------*/                         
                
}
                
?>
Por ahora me sigue fallando lo mismo, voy a ver si busco otro ejemplo o alguna otra manera de arreglarlo con tus explicaciones.

Gracias por tu ayuda, saludos.
  #7 (permalink)  
Antiguo 24/02/2013, 13:11
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: Error enviando noticias con o sin imágenes a base de datos desde formulari

Te dejo un ejemplo basico, de hay creo que es sumamente facil adaptarlo...
Código PHP:
Ver original
  1. <!DOCTYPE HTML>
  2. <html lang="en-US">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <title>Subir archivo</title>
  6. </head>
  7. <body>
  8.     <?php
  9.     if (isset($_FILES['archivo'])) {
  10.         if (is_uploaded_file($_FILES['archivo']['tmp_name'])) {
  11.             $fileSize = 512000; //500kb
  12.             if ($_FILES['archivo']['size'] <= $fileSize) {
  13.                 $info = getimagesize($_FILES['archivo']['tmp_name']);
  14.  
  15.                 $validTypes = array(
  16.                         'image/jpg',
  17.                         'image/jpeg',
  18.                         'image/gif',
  19.                         'image/png'
  20.                     );
  21.  
  22.                 $mimeTypeValid = in_array($info['mime'], $validTypes) ? true : false;
  23.  
  24.                 if ($mimeTypeValid) {
  25.                     if (!is_dir('imagenes')) {
  26.                         mkdir('imagenes',0777);
  27.                     }
  28.  
  29.                     if (move_uploaded_file($_FILES['archivo']['tmp_name'], 'imagenes/'.$_FILES['archivo']['name'])) {
  30.                         echo '<p>archivo subido correctamente!</p>';
  31.                     }else {
  32.                         echo '<p>No se pudo subir el archivo, '.$_FILES['archivos']['error'].'</p>';
  33.                     }
  34.                 }else {
  35.                     echo '<p>tipo de archivo invalido!</p>';
  36.                 }
  37.             }else {
  38.                 echo '<p>Peso superado!</p>';
  39.             }
  40.         }else {
  41.             echo '<p>Archivo de dudoso origen</p>';
  42.         }
  43.     }
  44.     ?>
  45.  
  46.     <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
  47.         <p><input type="file" name="archivo" id="archivo" /></p>
  48.         <p><input type="submit" value="Subir" /></p>
  49.     </form>
  50. </body>
  51. </html>

Ojo: para archivos mayores a 2mb (o cercano a este) seguirás teniendo problemas, porque eso es directamente de configuración de tu servidor!
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #8 (permalink)  
Antiguo 26/02/2013, 13:01
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años
Puntos: 65
Respuesta: Error enviando noticias con o sin imágenes a base de datos desde formulari

Hola de nuevo Nemutagk.

He seguido tu ejemplo y adaptándolo un poco a lo anterior parece que ahora todo va correctamente tanto en mi servidor local como en el de la web. También le he añadido unas notas para ir entendiendo paso a paso lo que he hecho, (si hay algo mal o que no he comprendido en esas anotaciones dame un aviso si puedes )

Código PHP:
Ver original
  1. <?php              
  2.                     //Si existe el archivo
  3.                     if (isset($_FILES['archivo']))
  4.                     {
  5.                         //Si es archivo es subido al enviar
  6.                         if (is_uploaded_file($_FILES['archivo']['tmp_name']))
  7.                         {
  8.                             //Tamaño máximo del archivo
  9.                             $fileSize = 512000; //500kb
  10.                             //Si el tamaño del archivo es igual o menor que 500kb
  11.                             if ($_FILES['archivo']['size'] <= $fileSize)
  12.                             {
  13.                                 //Obtengo el tamaño del archivo
  14.                                 $info = getimagesize($_FILES['archivo']['tmp_name']);
  15.                                 //Compruebo el tipo de archivo
  16.                                 $validTypes = array(
  17.                                     'image/jpg',
  18.                                     'image/jpeg',
  19.                                     'image/gif',
  20.                                     'image/png'
  21.                                     );
  22.                                 //Si el tipo de archivo es correcto
  23.                                 $mimeTypeValid = in_array($info['mime'], $validTypes) ? true : false;
  24.                                 if ($mimeTypeValid)
  25.                                 {
  26.                                     //Si el directorio para subir el archivo no está creado lo creo y abro los puertos.
  27.                                     if (!is_dir('../img'))
  28.                                     {
  29.                                         mkdir('../img',0777);
  30.                                     }
  31.                                     //Preparo la extensión.
  32.                                     switch($mimeTypeValid)
  33.                                     {
  34.                                         case'image/jpeg';
  35.                                         $ext=".jpg";
  36.                                         break;
  37.                                         case'image/gif';
  38.                                         $ext=".gif";
  39.                                         break;
  40.                                         case'image/png';
  41.                                         $ext=".png";
  42.                                         break;
  43.                                         case'image/x-png';
  44.                                         $ext=".png";
  45.                                         break;
  46.                                     }  
  47.                                     // Creamos la cadena aletoria
  48.                                     $str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";
  49.                                     $cad1 = "";
  50.                                     for($i=0;$i<12;$i++)
  51.                                     {
  52.                                         $cad1 .= substr($str,rand(0,62),1);
  53.                                     }
  54.                                     // Fin de la creacion de la cadena aletoria
  55.                                     $nombre_imagen1=$cad1;
  56.                                     //En caso de que tenga espacios los sustituyo por un guión bajo
  57.                                     $nombre_imagen1=str_replace(" ","_", $nombre_imagen1);
  58.                                     //Le añado la extensión
  59.                                     $nombre_imagen1=$nombre_imagen1.$ext;
  60.                                     //Subo el archivo
  61.                                     if (move_uploaded_file($_FILES['archivo']['tmp_name'], '../img/'.$nombre_imagen1))
  62.                                     {                                      
  63.                                         //Lo envio a la base de datos.
  64.                                         $enviar="Insert into noticias (titulo, noticia, imagen, fecha) values ('".$_POST["titulo"]."','".$_POST["noticia"]."','".$nombre_imagen1."', now())";
  65.                                         if($ejecutar_enviar=mysql_query($enviar))
  66.                                         {
  67.                                             echo "Noticia enviada correctamente";
  68.                                         }
  69.                                         else
  70.                                         {
  71.                                             echo "Error: " .mysql_error();
  72.                                         }      
  73.                                     }
  74.                                     else
  75.                                     {
  76.                                         echo '<p>No se pudo subir el archivo, '.$_FILES['archivo']['error'].'</p>';
  77.                                     }
  78.                                 }
  79.                                 else
  80.                                 {
  81.                                     echo '<p>tipo de archivo invalido!</p>';
  82.                                 }
  83.                             }
  84.                             else
  85.                             {
  86.                                 echo '<p>Peso superado!</p>';
  87.                             }
  88.                         }
  89.                         else
  90.                         {                              
  91.                                 /*echo "No lleva imágenes y preparo el envío sin imagen.";*/
  92.                                 $enviar="Insert into noticias (titulo, noticia, fecha) values ('".$_POST["titulo"]."','".$_POST["noticia"]."', now())";                                                    
  93.                                 if($ejecutar_enviar=mysql_query($enviar))
  94.                                 {
  95.                                     echo "Noticia enviada correctamente";
  96.                                 }
  97.                                 else
  98.                                 {
  99.                                     echo "Error: " .mysql_error();
  100.                                 }                      
  101.                         }
  102.                     }                          
  103.                 ?>

Código HTML:
Ver original
  1. <form action="" id="enviar-noticia" name"enviar-noticia" method="post" enctype="multipart/form-data" >
  2.                     <label for="titulo">Título:</label><br />
  3.                     <input type="text" id="titulo" name="titulo" size="80" required /><br />
  4.                     <label for="noticia">Noticia:</label><br />
  5.                     <textarea id="noticia" name="noticia" cols="70" rows="10"></textarea><br />
  6.                     <label for="imagen">Imagen: </label>
  7.                     <input type="file" id="archivo" name="archivo" title="Enviar imagen" />                            
  8.                     <!--<input type="file" id="imagen1" name="imagen1" title="Enviar imagen" /> -->    
  9.                     <input type="submit" id="enviar" name="enviar" value="Enviar">
  10.                 </form>

Lo único que veo que por ejemplo en mi servidor local la parte de crear el directorio para las imagenes y luego abrirlo va perfecto pero claro en el sevidor real medaba problemas

Código PHP:
Ver original
  1. if (!is_dir('../img'))
  2.                                    
  3.  {
  4.       mkdir('../img',0777);
  5.  }

Lo he abierto desde el panel de control del servidor dejandolo a 777, ¿es la manera más correcta o debería de hacer otro paso para mayor seguridad?

Ahora me falta seguir con este código para intentar redimensionar imágenes y adaptarla a algunos tamaños por si el usuario las sube con su camara web a 2 o 3mb pero eso ya será el próximo paso.

Muchas gracias por la gran explicación y la gran ayuda.

Saludos.
  #9 (permalink)  
Antiguo 26/02/2013, 13:22
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: Error enviando noticias con o sin imágenes a base de datos desde formulari

Código PHP:
Ver original
  1. //Si el directorio para subir el archivo no está creado lo creo y abro los puertos.
  2.                                     if (!is_dir('../img'))
  3.                                     {
  4.                                         mkdir('../img',0777);
  5.                                     }

Respecto a este comentario y a la duda que tienes después no se refiere a puertos, se refiere a los permisos que se le da a la carpeta, siendo 0777 el mas amplio de todos, ahora, para un sistema en producción (ya puesto al servicio del publico) es mejor usar 0755 que es todo para propietario y lectura/escribir para los demás usuarios, o incluso 0644 que es leer/escribir para propietario y solo lectura para todos los demás, para pero también puedes escoger cualquier otro, todo depende de los permisos que quieras que tengan dichos archivos...
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #10 (permalink)  
Antiguo 10/12/2013, 22:24
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años
Puntos: 65
Respuesta: Error enviando noticias con o sin imágenes a base de datos desde formulari

Hola de nuevo Nemutagk, por fin vuelvo a retomar este trabajo y este tema.

He cambiado en las notas el comentario a "permisos" y a la vez he ido haciendo pruebas tanto en mi servidor como en el del cliente.

En mi servidor todo va perfectamente con el ejemplo anterior:

Código PHP:
//Si el directorio para subir el archivo no está creado lo creo y le doy los permisos para subir la imagen.
                        
if (!is_dir('img'))
                        {
                               
mkdir('img',0777);
                        } 
Crea la carpeta imagen, sube los archivos y a la vez luego reviso y deja la carpeta por defecto con permisos 0755, he probado tanto con 0755 y 0777 y suben perfectamente. Sin embargo en el servidor del cliente he tenido que crear por mi cuenta dicha carpeta y darle los permisos en el servidor ya que si lo hago directamente desde el archivo php me daba este error:

Cita:
Warning: mkdir(img) [function.mkdir]: Permission denied in C:\Inetpub\vhosts\alsoncubero.com\httpdocs\final\c rear-noticia.php on line 41
y por lo tanto era imposible.

Hasta entonces nunca había usado (ni conocía) la opción de mkdir ya que hacía dichos cambios siempre por el ftp o por el servidor. ¿Es la manera más correcta de hacerlo en casos como este?

Gracias de nuevo por tu ayuda.

Saludos.
  #11 (permalink)  
Antiguo 11/12/2013, 11:11
 
Fecha de Ingreso: noviembre-2013
Mensajes: 78
Antigüedad: 10 años, 4 meses
Puntos: 4
Respuesta: Error enviando noticias con o sin imágenes a base de datos desde formulari

Cita:
Iniciado por kahlito Ver Mensaje
Hola de nuevo Nemutagk, por fin vuelvo a retomar este trabajo y este tema.

He cambiado en las notas el comentario a "permisos" y a la vez he ido haciendo pruebas tanto en mi servidor como en el del cliente.

En mi servidor todo va perfectamente con el ejemplo anterior:

Código PHP:
//Si el directorio para subir el archivo no está creado lo creo y le doy los permisos para subir la imagen.
                        
if (!is_dir('img'))
                        {
                               
mkdir('img',0777);
                        } 
Crea la carpeta imagen, sube los archivos y a la vez luego reviso y deja la carpeta por defecto con permisos 0755, he probado tanto con 0755 y 0777 y suben perfectamente. Sin embargo en el servidor del cliente he tenido que crear por mi cuenta dicha carpeta y darle los permisos en el servidor ya que si lo hago directamente desde el archivo php me daba este error:



y por lo tanto era imposible.

Hasta entonces nunca había usado (ni conocía) la opción de mkdir ya que hacía dichos cambios siempre por el ftp o por el servidor. ¿Es la manera más correcta de hacerlo en casos como este?

Gracias de nuevo por tu ayuda.

Saludos.

Revisa en un administrador ftp con que permisos se te estan creando als carpetas ya que a mi igual me sucedio lo mismo, no me tiraba error pero las carpetas no guardaban contenido por los permisos,

yo ocupo siempre
Código PHP:
mkdir($dir0777);
chmod($dir0777); 
el chmod espara cambiar los permisos de las carpetas de esta manera me aseguro de que tengan los permisos que necesito.
  #12 (permalink)  
Antiguo 11/12/2013, 22:18
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: Error enviando noticias con o sin imágenes a base de datos desde formulari

Cita:
Iniciado por kahlito Ver Mensaje
Hola de nuevo Nemutagk, por fin vuelvo a retomar este trabajo y este tema.

He cambiado en las notas el comentario a "permisos" y a la vez he ido haciendo pruebas tanto en mi servidor como en el del cliente.

En mi servidor todo va perfectamente con el ejemplo anterior:

Código PHP:
//Si el directorio para subir el archivo no está creado lo creo y le doy los permisos para subir la imagen.
                        
if (!is_dir('img'))
                        {
                               
mkdir('img',0777);
                        } 
Crea la carpeta imagen, sube los archivos y a la vez luego reviso y deja la carpeta por defecto con permisos 0755, he probado tanto con 0755 y 0777 y suben perfectamente. Sin embargo en el servidor del cliente he tenido que crear por mi cuenta dicha carpeta y darle los permisos en el servidor ya que si lo hago directamente desde el archivo php me daba este error:



y por lo tanto era imposible.

Hasta entonces nunca había usado (ni conocía) la opción de mkdir ya que hacía dichos cambios siempre por el ftp o por el servidor. ¿Es la manera más correcta de hacerlo en casos como este?

Gracias de nuevo por tu ayuda.

Saludos.
Es correcto el uso del mkdir() pero estas cambiando los permisos en la carpeta equivocada, tienes que cambiar los permisos a la carpeta padre de "img" (vamos, la que contendrá la nueva carpeta), eso se hace con chmod()
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #13 (permalink)  
Antiguo 13/01/2014, 12:45
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años
Puntos: 65
Respuesta: Error enviando noticias con o sin imágenes a base de datos desde formulari

Hola de nuevo.

WorseMzg
Cita:
Revisa en un administrador ftp con que permisos se te estan creando als carpetas ya que a mi igual me sucedio lo mismo, no me tiraba error pero las carpetas no guardaban contenido por los permisos,

yo ocupo siempre
Código PHP:
mkdir($dir, 0777);
chmod($dir, 0777);
Nemutagk
Cita:
Es correcto el uso del mkdir() pero estas cambiando los permisos en la carpeta equivocada, tienes que cambiar los permisos a la carpeta padre de "img" (vamos, la que contendrá la nueva carpeta padre de "img" (vamos, la que contendrá la nueva carpeta), eso se hace con chmod()
¿Entonces esto ya no es correcto?

Código PHP:
//Si el directorio para subir el archivo no está creado lo creo y le doy los permisos para subir la imagen.
                        
if (!is_dir('img'))
                        {
                               
mkdir('img',0777);
                        } 
¿tengo que cambiar o añadir chmood y a la vez por ejemplo a la carpeta final/img? La verdad no he terminado de entenderlo.
  #14 (permalink)  
Antiguo 13/01/2014, 14:51
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: Error enviando noticias con o sin imágenes a base de datos desde formulari

Es correcto, pero tu problema es de mas arriba, ejemplo:

Tu árbol de carpetas es así

Código:
Raiz
|
|- imagenes
|    |-usuarios
|        |-juan
|        |   |-img
|        |-pedro
|            |-img
|
|- otros
Tu le estas agregando todos los permisos a las carpetas "img", pero deberían ser a las carpetas "juan" y "pedro" porque estas son las que están denegando el permiso de crear nuevas carpetas dentro de ellas, en todo caso tendrías que primero hacer un chmod() a las carpetas padre de "img" (en este caso "juan" y "pedro") para poder escribir sobre ellas, la otra es hacer un chmod() recursivo desde "imagenes" o "raiz" eh ir buscando carpetas y cambiar sus permisos, así para no tener problemas a futuro, eso solo lo haces una vez y con eso sería suficiente, al menos mientras no cambies los permisos a futuro o generes nuevas carpetas con permisos insuficientes
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)

Etiquetas: admin, enviando, formulario, html
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 02:04.