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
}
Si uso:
Código PHP:
if(isset($_FILES['imagen'])){
//Todo lo que tiene que hacer con la imagen
}
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($foto, TEMP_FOTO);
break;
case $mimetypes[2]:
imagegif($foto, TEMP_FOTO);
break;
case $mimetypes[3]:
imagepng($foto, TEMP_FOTO);
break;
}
// Extrae los contenidos de las fotos
# contenido de la foto original
$fp = fopen(TEMP_FOTO, "rb");
$tfoto = fread($fp, filesize(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($thumb, TEMP_THUMB);
break;
case $mimetypes[2]:
imagegif($thumb, TEMP_THUMB);
break;
case $mimetypes[3]:
imagepng($thumb, TEMP_THUMB);
break;
}
// Extrae los contenidos de las fotos
# contenido de la foto original
$fp = fopen(TEMP_THUMB, "rb");
$tthumb = fread($fp, filesize(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!