Hola GatorV.
Tienes razón en lo que dices, y la opción del iframe la he estado contemplando en varias ocasiones pero es que, como soy novato en esto, no sé como acoplarlo a mi web.
A ver si me puedes echar una mano.
En mi primer mensaje te he puesto la estructura de mi index.php. En este es en donde llamo a tdos los js, css y las clases php.
Cuando agregar un registro, en el que quiero que vaya el adjunto, tengo el siguiente código:
Código HTML:
<?php
session_start();
if (!$_SESSION['usuario_logeado']) {
header('Location: index.php');
}
else{
echo var_dump( $_FILES );
echo var_dump( $_POST );
if(isset($_POST['submit'])){
require('classes/historial.class.php');
$idtarea = htmlspecialchars(trim($_POST['hi_idtarea']));
$fecha = htmlspecialchars(trim($_POST['hi_fecha']));
$asunto = htmlspecialchars(trim($_POST['hi_asunto']));
$adjunto = htmlspecialchars(trim($_FILES['hi_adjunto']['name']));
echo $adjunto;
echo $idtarea;
$nombreFichero = "";
$errorArchivo = false;
if ($adjunto != ""){
//Lo primero que se hace es subir el fichero al servidor.
//Una vez subido correctamente se guardará el registro en la BD.
//Variable para crear una carpeta con el número de la tarea para
//dejar en ella los adjuntos de cada tarea.
$nombreCarpeta = 'files/' .$idtarea;
if (!is_dir($nombreCarpeta)) {
mkdir($nombreCarpeta,0777);
}
$nombreFichero = 'files/' .$idtarea .'/' .$_FILES['hi_adjunto']['name'];
if(is_uploaded_file($_FILES['hi_adjunto']['tmp_name'])) { // verifica haya sido cargado el archivo
if(move_uploaded_file($_FILES['hi_adjunto']['tmp_name'], $nombreFichero)){ // se coloca en su lugar final
$errorArchivo = false;
}
else
$errorArchivo = true;
}
else
{
$errorArchivo = true;
}
}
if (!$errorArchivo){
$objHistorial=new Historial;
$fecha=$objHistorial->cambiarFecha($fecha);
if ($objHistorial->insertar(array($idtarea,$fecha,$asunto,$nombreFichero)) == true){
echo 'Datos guardados';
}else
echo 'Se produjo un error. Intente nuevamente';
}
}
else
{
if(isset($_GET['id'])){
?>
<h3>Nueva Actuación</h3>
<form id="frmHistorialNuevo" name="frmHistorialNuevo" enctype="multipart/form-data" method="post" action="nuevoHistorial.php" onsubmit="GrabarHistorial(); return false">
<label name="hi_idtarea" id="hi_idtarea" value="<?php echo $_GET['id']?>" visible="hidden" />
<p>
<label>Fecha
<input class="text" type="text" name="hi_fecha" id="hi_fecha" onBlur="javascript:return validarFecha('hi_fecha')" maxlength="10" value="<?php echo date("j-m-Y")?>" />
</label>
</p>
<p>
<label>Asunto
<input class="text" type="text" name="hi_asunto" id="hi_asunto" maxlength="50" />
</label>
</p>
<p>
<label>Adjunto<br />
<input type="file" name="hi_adjunto" id="hi_adjunto" maxlength="200" value="Examinar..." />
</label>
</p>
<p>
<input type="submit" name="submit" id="button" value="Enviar" />
<label></label>
<input type="button" class="cancelar" name="cancelar" id="cancelar" value="Cancelar" onclick="CancelarHistorial()" />
</p>
</form>
<?php
}
}
}
?>
La función GrabarHistorial(), a la que llamo una vez pulsado el botón de submit, la tengo en un archivo js aparte y se define de la siguiente manera:
Código:
function GrabarHistorial(){
var idtarea = $('#hi_idtarea').attr('value');
var fecha = $('#hi_fecha').attr('value');
var asunto = $('#hi_asunto').attr('value');
var adjunto = $('#hi_adjunto').attr('value');
$.ajax({
url: 'nuevoHistorial.php',
type: "POST",
data: "submit=&hi_idtarea="+idtarea+"&hi_fecha="+fecha+"&hi_asunto="+asunto+"&hi_adjunto="+adjunto,
success: function(datos){
ConsultaHistorial(idtarea);
alert(datos);
$('#formhistorial').hide();
$('#tablahistorial').show();
}
});
return false;
}
Y, por último, el código para la función que inserta el objeto en la base de datos, la tengo definida en una clase y tiene el siguiente código:
Código:
function insertar($campos){
if($this->con->conectar()==true){
$miconsulta = "INSERT INTO historial VALUES (null, ".$campos[0].", '".$campos[1]."','".$campos[2]."','".$campos[3]."')";
return mysql_query($miconsulta);
}
}
Según he podido ver, el iframe debería meterlo en el formluario con el que quiero enviar los datos y ponerle al propio formulario el target apuntando al iframe declarado. He probado esto que te digo, pero sigue sin funcionarme.
¿Crees que el código y la forma de estructurar la web que he escogido es correcta? Espero que la solución sea fácil y que no tenga que cambiar mucho código.
Muchas gracias por vuestra ayuda.
Un saludo.