Ver Mensaje Individual
  #1 (permalink)  
Antiguo 25/03/2010, 06:55
Avatar de fakulicious
fakulicious
 
Fecha de Ingreso: mayo-2008
Ubicación: Mendoza
Mensajes: 140
Antigüedad: 16 años, 6 meses
Puntos: 2
Pregunta Tengo un problema al pasar archivos por un form

Hola, que tal?

Tengo un formulario para editar registros en la BD, que contiene 3 campos de texto (titulo, descripción y texto) y 2 campos file (imagen y miniatura).

Le puse unas condicionales para que si los input file estaban vacíos, no ejecute el cambio de la imagen en el campo blob de la bd.

Según como hago la condicional, funcionan ciertas cosas y otras no. Por ejemplo:

Si uso:
Código PHP:
if(isset($_POST['imagen'])){
     
//Todo lo que tiene que hacer con la imagen

Se guardan los cambios en los campos de texto, pero no en la imagen.

Si uso:
Código PHP:
if(isset($_FILES['imagen'])){
     
//Todo lo que tiene que hacer con la imagen

Se guardan los cambios en la imagen, pero no en los campos de texto. Y el script se corta en cierto momento ya que queda la pantalla en blanco. Pero no me da ningún error. Por eso me imagino que no está guardando los otros campos en la BD, porque no llega a ejecutar esa consulta.

Les dejo el código completo para que vean si he hecho algo mal, porque ya probé muchísimas cosas y no le encuentro la vuelta.

Ah, también probé con if(!empty($_FILES['imagen']['tmp_name'])) y pasaba lo mismo que con el segundo ejemplo que di.

Bueno, el código completo es el siguiente:

Código PHP:
<?php
# Nombre temporal de las thumbnails
define("TEMP_THUMB""thumb");

# Nombre temporal de las fotos
define("TEMP_FOTO""foto");

// Mime types permitidos
$mimetypes = array("image/jpeg""image/pjpeg""image/gif""image/png");

if(!isset(
$_POST['guardar']) && !isset($_GET['idServ'])){
    
header("Location: servicios.php");
}

if(isset(
$_GET['idServ'])){
    
$idServ $_GET['idServ'];
}

if(isset(
$_POST['guardar'])){

    include(
'incluir/config.php');

    
$nombre $_POST['nombre'];
    
$descripcion $_POST['descripcion'];
    
$texto addslashes($_POST['texto']);

    if(isset(
$_POST['imagen'])){
        
$tmpNameFoto $_FILES['imagen']['tmp_name'];
        
$fileTypeFoto $_FILES['imagen']['type'];
        
        
//Guardo las fotos y las thumbnails en la BD
    
        // Verificamos si el archivo es una imagen válida
        
if(!in_array($fileTypeFoto$mimetypes)){
            
$message "El archivo que subiste no es una imagen válida";
            return 
$message;
        }
        
        switch(
$fileTypeFoto){
            case 
$mimetypes[0]:
            case 
$mimetypes[1]:
                
$foto imagecreatefromjpeg($tmpNameFoto);
                break;
            case 
$mimetypes[2]:
                
$foto imagecreatefromgif($tmpNameFoto);
                break;
            case 
$mimetypes[3]:
                
$foto imagecreatefrompng($tmpNameFoto);
                break;
        }
    
        switch(
$fileTypeFoto) {
            case 
$mimetypes[0]:
            case 
$mimetypes[1]:
                
imagejpeg($fotoTEMP_FOTO);
                break;
            case 
$mimetypes[2]:
                
imagegif($fotoTEMP_FOTO);
                break;
            case 
$mimetypes[3]:
                
imagepng($fotoTEMP_FOTO);
                break;
        }
                
        
// Extrae los contenidos de las fotos
        # contenido de la foto original
        
$fp fopen(TEMP_FOTO"rb");
        
$tfoto fread($fpfilesize(TEMP_FOTO));
        
$tfoto addslashes($tfoto);
        
fclose($fp);
        
        
// Borra archivos temporales si es que existen
        
@unlink($tmpNameFoto);
        @
unlink(TEMP_FOTO);
        
        
$cons mysql_query("UPDATE servicios SET foto = '$tfoto', typeFoto = '$fileTypeFoto' WHERE idServ = '$idServ' LIMIT 1;"$link) or die('Error MySQL: '.mysql_error($link));
        
        
mysql_close($link);
    }
    
    if(isset(
$_POST['thumb'])){
        
$tmpNameThumb $_FILES['thumb']['tmp_name'];
        
$fileTypeThumb $_FILES['thumb']['type'];
        
        
//Guardo las fotos y las thumbnails en la BD
    
        // Verificamos si el archivo es una imagen válida
        
if(!in_array($fileTypeThumb$mimetypes)){
            
$message "El archivo que subiste no es una imagen válida";
            return 
$message;
        }
        
        switch(
$fileTypeThumb){
            case 
$mimetypes[0]:
            case 
$mimetypes[1]:
                
$thumb imagecreatefromjpeg($fileTypeThumb);
                break;
            case 
$mimetypes[2]:
                
$thumb imagecreatefromgif($fileTypeThumb);
                break;
            case 
$mimetypes[3]:
                
$thumb imagecreatefrompng($fileTypeThumb);
                break;
        }
    
        switch(
$fileTypeThumb) {
            case 
$mimetypes[0]:
            case 
$mimetypes[1]:
                
imagejpeg($thumbTEMP_THUMB);
                break;
            case 
$mimetypes[2]:
                
imagegif($thumbTEMP_THUMB);
                break;
            case 
$mimetypes[3]:
                
imagepng($thumbTEMP_THUMB);
                break;
        }
                
        
// Extrae los contenidos de las fotos
        # contenido de la foto original
        
$fp fopen(TEMP_THUMB"rb");
        
$tthumb fread($fpfilesize(TEMP_THUMB));
        
$tthumb addslashes($tthumb);
        
fclose($fp);
        
        
// Borra archivos temporales si es que existen
        
@unlink($fileTypeThumb);
        @
unlink(TEMP_THUMB);
        
        
$cons mysql_query("UPDATE servicios SET thumb = '$tthumb', typeThumb = '$fileTypeThumb' WHERE idServ = '$idServ' LIMIT 1;"$link) or die('Error MySQL: '.mysql_error($link));
        
        if(!
$cons){
            
$resultado 'error';
        } else {
            
$resultado 'ok';
            
mysql_close($link);
        }
    }
    
    
$cons mysql_query("UPDATE servicios SET nombre = '$nombre', descripcion = '$descripcion', texto = '$texto' WHERE idServ = '$idServ' LIMIT 1;"$link) or die('Error MySQL: '.mysql_error($link));
        
    if(!
$cons){
        
$resultado 'error';
    } else {
        
$resultado 'ok';
    }

    
header("Location: editarServicio.php?idServ=".$idServ."&resultado=".$resultado);

}

?>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Panel de Administración</title>
<link href="incluir/estilos.css" rel="stylesheet" type="text/css" />
<script src="incluir/SpryValidationTextField.js" type="text/javascript"></script>
<link href="incluir/SpryValidationTextField.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="../ckeditor/ckeditor.js"></script>
<script type="text/javascript">
    window.onload = function()
    {
        CKEDITOR.replace( 'texto',
        {
            customConfig : 'incluir/ckeditor_config.js',
            filebrowserUploadUrl : 'incluir/upload.php'
        });
        
    };
</script>
</head>

<body>
<?php include('incluir/header.php'); ?>
<div id="contenido">
  <h2>Editar servicio </h2>
<?php
include('incluir/config.php');

$cons mysql_query("SELECT * FROM servicios WHERE idServ= '$idServ' LIMIT 1;"$link) or die('Error MySQL: '.mysql_error($link));

while(
$row mysql_fetch_array($cons)){
?>
  <form action="editarServicio.php?idServ=<?php echo $row['idServ']; ?>" method="post" enctype="multipart/form-data" name="form1" id="form1">
    <table width="960" border="0" cellspacing="2" cellpadding="3">
      <tr>
        <td width="231" valign="top" bgcolor="#EEE">Nombre</td>
        <td valign="top" bgcolor="#EEE"><span id="sprytextfield1">
          <label>
            <input name="nombre" type="text" id="nombre" value="<?php echo $row['nombre']; ?>" />
          </label>
        <span class="textfieldRequiredMsg">Se necesita un valor.</span></span></td>
      </tr>
      <tr>
        <td valign="top" bgcolor="#EEE">Descripción</td>
        <td valign="top" bgcolor="#EEE"><label>
          <textarea name="descripcion" id="descripcion" cols="45" rows="5"><?php echo $row['descripcion']; ?></textarea>
        </label></td>
      </tr>
      <tr>
        <td valign="top" bgcolor="#EEE">Texto</td>
        <td valign="top" bgcolor="#EEE"><label>
          <textarea name="texto" id="texto" cols="45" rows="5"><?php echo $row['texto']; ?></textarea>
        </label></td>
      </tr>
      <tr>
        <td valign="top" bgcolor="#EEE">Foto o Imagen (780x250)<?php if($row['foto'] != ''){ ?><br /><img src="foto.php?idServ=<?php echo $row['idServ']; ?>" width="200" height="65" /><?php ?></td>
        <td valign="top" bgcolor="#EEE"><label>
          <input type="file" name="imagen" id="imagen" />
        </label></td>
      </tr>
      <tr>
        <td valign="top" bgcolor="#EEE">Imagen miniatura (370x150)<?php if($row['thumb'] != ''){ ?><br /><img src="thumb.php?idServ=<?php echo $row['idServ']; ?>" width="150" height="60" /><?php ?></td>
        <td valign="top" bgcolor="#EEE"><label>
          <input type="file" name="thumb" id="thumb" />
        </label></td>
      </tr>
      <tr>
        <td colspan="2" valign="top" bgcolor="#EEE"><label>
          <input type="submit" name="guardar" id="guardar" value="Guardar" />
        </label></td>
      </tr>
    </table>
  </form>
<?php
}
?>
</div>
<?php include('incluir/pie.php'); ?>
<script type="text/javascript">
<!--
var sprytextfield1 = new Spry.Widget.ValidationTextField("sprytextfield1");
//-->
</script>
</body>
</html>

Muchas gracias. Saludos!
__________________
Facundo
http://www.creactivo.com.ar