PHP - problema con empty($_FILES) no toma el true

 
Vista:
sin imagen de perfil

problema con empty($_FILES) no toma el true

Publicado por anonymous (5 intervenciones) el 27/06/2016 00:32:10
Bueno ahora vuelvo con otro inconveniente, a ver si alguno encuentra el error, no puedo dar en la tecla. Porque no deberia estar fallando.

En los ultimos if determino si el campo tipo FILE esta vacio, el inconveniente lo tengo al modificar el producto sin modificar la imagen, con un error en la funcion validoTipoImagen($newImage); cuyo codigo es el siguiente:
PHP me tira este warning:
Warning: exif_imagetype(): Filename cannot be empty in C:\wamp64\www\proyecto\funcionesphp\validaciones.php on line 93

El tema es que al estar encerrada la funcion que contiene el exif_imagetype, en la parte falsa de empty($_FILES) no se deberia ejecutar. Ya me esta volviendo loco jajaja

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
 * Retorna el tipo de imagen en caso de ser JPEG o PNG caso contrario retorna false
 * @param $img
 * @return bool|string
 */
function validoTipoImagen($img){
    /*EXIF_IMAGETYPE RETORNA UN NUMERO EQUIVALENTE AL TIPO DE LA IMAGEN*/
    $typefile = exif_imagetype ($img['tmp_name'] ); //Guardo el tipo de imagen
    /*Si el tipo de archivo es JPEG o PNG lo guardo junto al tipo de archivo */
    if (($typefile === IMAGETYPE_JPEG) || ($typefile === IMAGETYPE_PNG)) {
        if ($typefile === IMAGETYPE_JPEG) {
            $tipoImagen = "jpeg";
            return $tipoImagen;
        } elseif ($typefile === IMAGETYPE_PNG) {
            $tipoImagen = "png";
            return $tipoImagen;
        }
    }
    return false;
}






1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
if ((empty($_POST)) && (!empty($_GET))){
            $_SESSION['idProducto'] = $_GET['productoAModificar'];
            $idProducto= $_GET['productoAModificar'];
            $producto = getProducto($idProducto);
            ?>
            <!-- Contenido -->
            <div class="cambio_categoria">
                <form action="modificar_producto.php" method="post" name="formModificarProducto"
                      enctype="multipart/form-data">
                    <label for="nom">Nombre Del Producto:</label>
                    <input type="text" name="nomprod" id="nom" value="<?php echo $producto['nombre']; ?>"/>
                    <label for="selectCategoria">Seleccione Una nueva Categoria</label>
                    <select name="selcat" id="selcatNewProducto" id="selectCategoria">
                        <?php
                        $connect = conectar();
                        $consultaCategorias = "SELECT * FROM categorias_productos";
                        $categorias = mysqli_query($connect, $consultaCategorias);
                        while ($row = mysqli_fetch_assoc($categorias)) {
                            /* Si el id del producto a modificar es el mismo que el id leido de la BD lo setea como selected
                            Si no, lo agrega a la lista del select */
                            if ($row['idCategoriaProducto'] === $producto['idCategoriaProducto']) {
                                echo "<option selected value=" . $row['idCategoriaProducto'] . ">" . ucwords($row['nombre']) . "</option>";
                            } else {
                                echo "<option value=" . $row['idCategoriaProducto'] . ">" . ucwords($row['nombre']) . "</option>";
                            }
                        }
                        mysqli_free_result($categorias);
                        mysqli_close($connect);
                        ?>
                        <label for="fechacad">Fecha de Caducidad:</label>
                        <input type="date" name="fecha_caducidad" id="fechacad"
                               value="<?php echo $producto['caducidad']; ?>"
                               onblur="validarModificarProducto(this.value)"/>
                        <label for="pre">Precio:</label>
                        <input type="number" name="precio" id="pre" value="<?php echo $producto['precio']; ?>"/>
                        <label for="img">Imagen del Producto</label>
                        <input type="file" name="imagenprod" id="img"/>
                        <img src="mostrarImagen.php?idProducto=<?php echo $idProducto; ?>"
                             style="width: 5%;height: 5%;padding-left: 30%"/>
                        <label for="iddescripcion">Descripci&oacute;n</label>
                        <textarea name="descripcion" rows="2" cols="30"
                                  id="iddescripcion"><?php echo $producto['descripcion']; ?></textarea>
                        <input type="submit" value="Enviar"/>
                </form>
            </div>
            <?php
        }else{
                $newName = $_POST['nomprod'];
                $newCategory = $_POST['selcat'];
                $newCaducidad = $_POST['fecha_caducidad'];
                $newPrice = $_POST['precio'];
                $newDescription = $_POST['descripcion'];
                $idProducto = $_SESSION['idProducto'];
 
                 //SI en el campo de la imagen no se selecciona una nueva imagen hace un update de los datos de la BD sin enviar la imagen
                if ((empty($_FILES)) {
                    updateSinImagen($newCategory, $newName, $newDescription, $newPrice, $newCaducidad, $idProducto);
                    unset($_SESSION['idProducto']);
                    $_SESSION['exito'] = "El producto se actualizo correctamente";
                    header('location:SeleccionProdModificar.php');
                }else{
                    $newImage = $_FILES['imagenprod'];
                    $tipoImagen = validoTipoImagen($newImage);
                    if ($tipoImagen != false) {
                        $binario_imagen = obtengoBinarioIMG($newImage);
                        updateConImagen($newCategory, $newName, $newDescription, $newPrice, $newCaducidad, $binario_imagen, $tipoImagen, $idProducto);
                        unset($_SESSION['idProducto']);
                        $_SESSION['exito'] = "El producto se actualizo correctamente";
                    }else{
                        $SESSION['error'] = "La imagen no es una imagen valida";
                    }
 
                }
            }
 
        ?>
    </div>
</div>
</body>
</html>


Osea el inconveniente es que no me esta entrando a la parte verdadera del empty($_FILES)
al no agregarle la imagen en el input tipo file, si agrego una imagen se actualiza sin problemas y sin errores.

Mill gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

problema con empty($_FILES) no toma el true

Publicado por anonymous (5 intervenciones) el 27/06/2016 01:16:55
Ya lo pude solucionar, muchisimas gracias pueden ponerlo como cerrado. En fin por si alguno le pasa lo mismo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
$newName = $_POST['nomprod'];
$newCategory = $_POST['selcat'];
$newCaducidad = $_POST['fecha_caducidad'];
$newPrice = $_POST['precio'];
$newDescription = $_POST['descripcion'];
$idProducto = $_SESSION['idProducto'];
 
	//SI en el campo de la imagen no se selecciona una nueva imagen hace un update de los datos de la BD sin enviar la imagen
if (($_FILES['imagenprod']['size'])=== 0) {
	updateSinImagen($newCategory, $newName, $newDescription, $newPrice, $newCaducidad, $idProducto);
	unset($_SESSION['idProducto']);
	$_SESSION['exito'] = "El producto se actualizo correctamente";
	header('location:SeleccionProdModificar.php');
}else{ //Si la hay una imagen seleccionada
	$newImage = $_FILES['imagenprod'];
	$tipoImagen = validoTipoImagen($newImage);
	if ($tipoImagen != false) {
		$binario_imagen = obtengoBinarioIMG($newImage);
		updateConImagen($newCategory, $newName, $newDescription, $newPrice, $newCaducidad, $binario_imagen, $tipoImagen, $idProducto);
		unset($_SESSION['idProducto']);
		$_SESSION['exito'] = "El producto se actualizo correctamente";
		header('location:SeleccionProdModificar.php');
	}else{ //Si el tipo de imagen no es compatible
		$SESSION['error'] = "La imagen no es una imagen valida";
		header('location:SeleccionProdModificar.php');
	}
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar