Uso hace ya bastante un codigo que encontre alguna vez en las FAQ de PHP y me va de maravilla, pero en este caso en particular se me complica su uso.
La idea es que el cliente subira a la base de datos unas noticias, compuestas de su titulo, texto introductorio, fecha y cuerpo de la noticia. Aparte "algunas" llevaran foto y otras no, ademas de que las que llevan foto, algunas llevan 1 y otras quizas 2 o 3, todas con su respectivo pie de foto (nota en la BD)
El codigo que utilizo es para imagenes a BD como blob acompañadas de algun que otro campo de texto (titulo, intro, contenido, fecha, nota)
Noto que si en el form, al hacer submit no he ingresado ninguna imagen en el campo de archivo, no me sube nada y me muestra: "falta_indicar_fichero" (utilizado en el form, ya veran el codigo). La otra es que no se como modificar el codigo que tan bien me ha funcionado siempre, para que pueda entonces:
a) subir los campos titulo, intro, fecha y contenido sin foto para las noticias que no llevan foto
b) la opcion de que si el cliente quiere, suba no solo 1 sino 2 o 3 fotos (maximo creo que es suficiente)
Adjunto todos los codigo que utilizo, de antemano gracias por su ayuda
PD: no por presion pero tengo la entrega el lunes, al menos si pudieran orientarme se los agradeceria mucho!
El formulario (resumido para ustedes) noticias.php:
Código PHP:
<?
if (isset($_GET['proceso'])){
echo $_GET['proceso']."<br>";
}
?>
Código HTML:
<FORM enctype="multipart/form-data" method="post" action="insert_noticias.php"> <table width="536"> <tr> <td width="81"><div align="left" class="normal">Título:</div></td> <td width="443"><div align="left"> <input name="titulo" type="text" id="titulo" size="45" align="left"> </div></td> </tr> <tr> <td width="81"><div align="left" class="normal">Intro:</div></td> <td width="443"><div align="left"> <input name="intro" type="text" id="intro" size="45" align="left"> </div></td> </tr> <tr> <td><div align="left" class="normal">Contenido:</div></td> <td><div align="left"> <textarea name="contenido" cols="60" id="contenido" align="left"></textarea> </div></td> </tr> <tr> <td><div align="left"><span class="normal">Fecha:</span></div></td> <td><div align="left"> <input name="fecha" type="text" id="fecha" size="15" align="left"> </div></td> </tr> <tr> <td><div align="left" class="normal">Imagen:</div></td> <td><div align="left"> <input name="archivo" type="file" id="archivo" size="33" align="left"> </div></td> </tr> <tr> <td><div align="left"><span class="normal">Pie de imagen:</span></div></td> <td><div align="left"> <input name="nota" type="text" id="nota" size="35" align="left"> </div></td> </tr> <tr> <td> </td> <td> </td> </tr> <tr> <td colspan="2"><div align="center"> <input type="submit" name="submit" value="Ingresar Noticia"> </div></td> </tr> </table> </form>
Código PHP:
<?php
if (empty($_FILES['archivo']['name'])){
header("location: noticias.php?proceso=falta_indicar_fichero");
exit;
}
include("connect.php");
$binario_nombre_temporal=$_FILES['archivo']['tmp_name'];
$binario_contenido = addslashes(fread(fopen($binario_nombre_temporal, "rb"), filesize($binario_nombre_temporal)));
$binario_nombre=$_FILES['archivo']['name'];
$binario_peso=$_FILES['archivo']['size'];
$binario_tipo=$_FILES['archivo']['type'];
$consulta_insertar = "INSERT INTO noticias (id, fecha, titulo, intro, contenido, nota, archivo_binario, archivo_nombre, archivo_peso, archivo_tipo) VALUES ('', '$fecha', '$titulo', '$intro', '$contenido', '$nota', '$binario_contenido', '$binario_nombre', '$binario_peso', '$binario_tipo')";
mysql_query($consulta_insertar,$conexion) or die("No se pudo insertar los datos en la base de datos.");
header("location: noticias.php");
exit;
?>
Si subo los campos de texto con alguna foto, perfecto, sube se guarda y se muestra sin ningun problema.
Si subo los campos de texto sin foto, no lo guarda y muestra el mensaje falta_indicar_fichero sobre el formulario vacio