Ver Mensaje Individual
  #8 (permalink)  
Antiguo 26/02/2013, 13:01
Avatar de kahlito
kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años, 9 meses
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.