SUBIR FOTO CON JQUERY PHP MYQL
<!DOCTYPE HTML>
<html lang="es">
<head>
<meta charset="utf-8">
<title>Guardar usuario con imagen</title>
<style type="text/css">
body {margin: 0px; padding: 0px;}
.Seccion {width: 400px; margin: 0.5em; background-color: #DDDDDD;}
#vistaPrevia {background-color: #FFFFFF; vertical-align: top; border: 1px solid
#444444;
}
</style>
</head>
<body>
<!-- Layout -->
<div class="Seccion">
<h2>Crear/Actualizar Usuario</h2>
<label for="idUsuario" >ID (entero):</label>
<input id="idUsuario" type="text" /><br/>
<label for="nombreUsuario" >Nombre:</label>
<input id="nombreUsuario" type="text" /><br/>
<label for="imagenUsuario" >Imagen:</label>
<input id="seleccionarImagen" type="file" />
<img id="vistaPrevia" /><br/>
<input id="actualizarUsuario" type="button" value="Actualizar Usuario..." />
</div>
<!-- Javascript -->
<script type="text/javascript" src="../externas/jquery-2.0.3.min.js"></script>
<script>
//El código Javascript lo verás más abajo...
</script>
</body>
</html>
jQuery('#seleccionarImagen').on('change', function(e) {
var Lector,
oFileInput = this;
if (oFileInput.files.length === 0) {
return;
};
Lector = new FileReader();
Lector.onloadend = function(e) {
jQuery('#vistaPrevia').attr('src', e.target.result);
};
Lector.readAsDataURL(oFileInput.files[0]);
});
jQuery('#actualizarUsuario').on('click', function(e) {
e.preventDefault();
var parametros = {
id : jQuery('#idUsuario').val(),
nombre : jQuery('#nombreUsuario').val(),
imagen : jQuery('#temporal').attr('src')
};
$.ajax('guardar_imagen.php', {
type : 'post',
data : parametros,
success : function(data) {
if(data.error){
console.log('Error controlado.', data.mensaje);
return;
};
console.log('Los datos del usuario ' + parametros.id + ' fueron guardados.');
},
error : function(data) {
console.log('Error no controlado.', data);
}
});
return false;
});
El código consiste en dos controladores de eventos. El primero detecta cuando el usuario
selecciona una imagen y genera una vista previa a partir de ella (en mi artículo Vista
previa de imagen en el navegador puedes ver más información al respecto). En resumen, este
controlador leerá la imagen seleccionada en el control fileinput, y la copiará al elemento
img.
El segundo controlador se encargará de enviar al servidor los datos para actualizar cuando
el usuario haga clic en el botón correspondiente. Este código primero busca los datos a
enviar (ID, nombre e imagen) y los almacena en el objeto parametros (¿te parece raro que
leamos la imagen de img en lugar del inputfile? en la sección final te explicaré porqué…
sigamos); luego lo envía mediante un post, con jQuery, al archivo guardar_imagen.php que
esperará los datos para procesarlos.
Recibir la imagen con PHP y guardarla en MySQL
Antes que nada: no soy un gurú de PHP, así que el código presentado a continuación no es
necesariamente el más seguro, ni el más mantenible; por el contrario, es un código simple
que explica el punto central del post.
Hecha la aclaratoria, veamos ahora el contenido del archivo de utilidades:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//Función auxiliar para errores (solo AJAX)
function mostrar_error($mensaje_error){
$arr = array("error" => true, "mensaje" => $mensaje_error);
echo json_encode($arr);
exit();
};
//Conexión a la base de datos
function abrirConexion(){
$db_host = '127.0.0.1'; //La dirección del servidor de BD
$db_user = 'mi-usuario-mysql';
$db_pw = 'mi-contrasena-mysql';
$db_name = 'mi-base-de-datos-mysql';
$connection = mysqli_connect($db_host, $db_user, $db_pw, $db_name);
if (!$connection) {
mostrar_error("No se puede conectar al servidor\\base de datos: $db_host\\$db_name");
}
return $connection;
}
Este script es bastante simple: una función encargada de generar una respuesta JSON en caso
de un error (un error «controlado») para ser recibida por las llamadas a $.ajax(). La otra
función se encarga de abrir la conexión a la base de datos usando la extensión de PHP MySQLi
(NOTA: fíjate que no estoy usando la extensión tradicional MySQL, sino mysqli; tienen casi
las mismas funciones pero la sintaxis es distinta). Para el ejemplo solo programé el mínimo
código necesario para abrir la conexión y manejar errores, incluso coloqué las credenciales
de la base de datos directamente en el script; queda de tu parte programar la conexión a la
base de datos siguiendo procedimientos más seguros.
Este archivo de utilidades será incluido en el segundo script, mostrado a continuación:
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
include_once 'utilidades.php';
//Leemos los datos del usuario
$id = $_POST["id"];
$nombre = $_POST["nombre"];
//NOTA: La imagen viene en Base 64 (porque así la enviamos desde consultar.html)
$img = $_POST["imagen"];
//Abrimos una conexión a la base de datos
$conexion = abrirConexion();
//escapamos antes de armar la consulta
$id = mysqli_escape_string($conexion, $id);
$nombre = mysqli_escape_string($conexion, $nombre);
$img = mysqli_escape_string($conexion, $img);
//Si el usuario no existe lo insertamos,
//y si ya existe lo actualizamos
$consulta_sql = "INSERT INTO usuarios(id, imagen, nombre)\n".
" VALUES ('$id', '$img', '$nombre')\n".
"ON DUPLICATE KEY\n".
" UPDATE imagen = VALUES(imagen), nombre=VALUES(nombre);";
mysqli_query($conexion, $consulta_sql)
or mostrar_error("Error al ejecutar la consulta:\n$consulta_sql.\n\n".
mysqli_errno($connection) . ": " . mysqli_error($connection));
//La respuesta en formato JSON...
$respuesta = array(
'ok' => true
);
echo json_encode($respuesta);
/////////////////////////////////////////////////////
<script src="https://code.jquery.com/jquery-3.2.1.js"></script>
<script>
$(document).ready(function() {
$(".upload").on('click', function() {
var formData = new FormData();
var files = $('#image')[0].files[0];
formData.append('file',files);
$.ajax({
url: 'upload.php',
type: 'post',
data: formData,
contentType: false,
processData: false,
success: function(response) {
if (response != 0) {
$(".card-img-top").attr("src", response);
} else {
alert('Formato de imagen incorrecto.');
}
}
});
return false;
});
});
</script>
El código anterior también puede estar incrustado justo antes de la etiqueta de cierre
</body>.
Tan solo estamos esperando a que se haga click en el botón que contiene la clase «upload»
para obtener el archivo seleccionado desde el ordenador para pasarlo al archivo «upload.php»
para que pueda ser procesado en el servidor. Una vez se ha proceso la imagen en el servidor,
si la respuesta es diferente de 0, el atributo src de nuestra imagen se cambiará por la
respuesta. En caso contrario mostrar un alerta de error.
La clave del asunto está en la utilización de la clase FormData.
Los objetos FormData permiten compilar un conjunto de pares clave/valor para enviar mediante
XMLHttpRequest. Están destinados principalmente para el envío de los datos del formulario,
pero se pueden utilizar de forma independiente con el fin de transmitir los datos tecleados.
Los datos transmitidos estarán en el mismo formato que usa el método submit() del formulario
para enviar los datos si el tipo de codificación del formulario se establece en
«multipart/form-data».
En el ejemplo estamos creando un objeto de tipo FormData para agregarle la imagen. El objeto
FormData se lo pasamos al archivo PHP mediante la técnica Ajax. De esta forma, en el archivo
PHP tendremos la información necesaria para procesar la imagen.
Este código también puede ser útil para subir otro tipo de archivos, tan solo realizando
algunos ajustes.
Código HTML que debes añadir dentro del body de tu página
En el cuerpo o dentro de la etiqueta <body> agregamos el formulario que permite subir
archivos:
Source code
<form method="post" action="#" enctype="multipart/form-data">
<div class="card" style="width: 18rem;">
<img class="card-img-top" src="images/default-avatar.png">
<div class="card-body">
<h5 class="card-title">Sube una foto</h5>
<p class="card-text">Sube una imagen...</p>
<div class="form-group">
<label for="image">Nueva imagen</label>
<input type="file" class="form-control-file" name="image" id="image">
</div>
<input type="button" class="btn btn-primary upload" value="Subir">
</div>
</div>
</form>
Se trata de un formulario simple que utiliza el atributo enctype=»multipart/form-data» para
permitir la subida de archivos y se apoya de la tecnología Bootstrap para el diseño. Tan
solo tenemos una imagen por defecto, el campo para seleccionar una imagen desde el ordenador
y un botón que permite realizar la acción de subida al servidor.
Código PHP que se ejecuta en el servidor
El arhivo «upload.php» que usamos para procesar la imagen contiene lo siguiente:
Source code
<?php
if (($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/png")
|| ($_FILES["file"]["type"] == "image/gif")) {
if (move_uploaded_file($_FILES["file"]["tmp_name"], "images/".$_FILES['file']['name']))
{
//more code here...
echo "images/".$_FILES['file']['name'];
} else {
echo 0;
}
} else {
echo 0;
}
Simplemente comprobamos que el archivo que se está intentando subir sea del tipo adecuado.
En este caso, solo queremos que se puedan subir imágenes .png, .jpg o .gif y, seguidamente,
usamos la función move_uploaded_file() de PHP para depositar el archivo seleccionado en el
lugar que deseamos. Lo guardamos con el mismo nombre de subida.
Después de esta acción se podrían hacer muchos más procesos, como por ejemplo registrar algo
en la base de datos o enviar un email. Recuerda que todo esto se puede hacer sin recargar la
página.
Como respuesta usamos la función echo de PHP para retornar un 0 en caso de error o la ruta
del archivo subido para depositarlo en el src tal y como puedes ver en el success de la
llamada Ajax.
////////////////////////////////////////////////
var datos = $("#formularioAltaEmpleados").serialize();
var foto = $('input[name="foto"]')[0].files[0];
const infoEmpleado = new FormData();
infoEmpleado.append('datos', datos);
infoEmpleado.append('foto', foto);
$.ajax({
url: '../controller/empleadoControlador.php',
type: 'POST',
data: infoEmpleado,
contentType: false,
processData: false,
success: function(respuestaAjax) {
console.log(respuestaAjax);
if (respuestaAjax == 1) {
console.log('Exitoso');
} else {
console.log('Error');
})
}
}
});
En el controlador se recoge de la siguiente manera:
if (isset($_POST['datos'])) {
parse_str($_POST["datos"], $datos);
if($datos && $datos['accion'] == 'crearEmpleado') {
$empleado = new Empleado();
if (isset($_FILES['foto'])){
$nombreArchivo=$_FILES['foto']['name'];
$empleado->cargarFoto($nombreArchivo);//en mi caso, esta función guarda la foto.
$foto = $empleado->setFoto($nombreArchivo);
}else {
$foto = $empleado->setFoto(null);
}
$nombre = $empleado->setNombre($datos['nombre']);
$apellidos = $empleado->setApellidos($datos['apellidos']);
$email = $empleado->setEmail($datos['email']);
$empDao->insertarEmpleado($empleado);
}
}
En el dao, además de insertar los datos en la BBDD, creo la respuesta que recoge AJAX:
public function insertarEmpleado($empleado)
{
$stmt = $this->db->prepare("INSERT INTO empleado (nombre, apellidos, email, foto) VALUES
(?, ?, ?, ?)");
$stmt->bindValue(1, $empleado->getNombre());
$stmt->bindValue(2, $empleado->getApellidos());
$stmt->bindValue(3, $empleado->getEmail());
$stmt->bindValue(4, $empleado->getFoto());
$resultadoRegistro = $stmt->execute();
if ($resultadoRegistro > 0) {
echo 1; //respuesta 1: AJAX devuelve 'Exitoso' en la consola.
} else {
echo 0; //respuesta 0: AJAX devuelve 'Error' en la consola.
}
}
////////////////////////////////
<p class="statusMsg"></p>
<form enctype="multipart/form-data" id="fupForm" >
<div class="form-group">
<label for="name">NAME</label>
<input type="text" class="form-control" id="name" name="name" placeholder="Enter
name" required />
</div>
<div class="form-group">
<label for="email">EMAIL</label>
<input type="email" class="form-control" id="email" name="email" placeholder="Enter
email" required />
</div>
<div class="form-group">
<label for="file">File</label>
<input type="file" class="form-control" id="file" name="file" required />
</div>
<input type="submit" name="submit" class="btn btn-danger submitBtn" value="SAVE"/>
</form>
////////////////////////
<p class="statusMsg"></p>
<form enctype="multipart/form-data" id="fupForm" >
<div class="form-group">
<label for="name">NAME</label>
<input type="text" class="form-control" id="name" name="name" placeholder="Enter
name" required />
</div>
<div class="form-group">
<label for="email">EMAIL</label>
<input type="email" class="form-control" id="email" name="email" placeholder="Enter
email" required />
</div>
<div class="form-group">
<label for="file">File</label>
<input type="file" class="form-control" id="file" name="file" required />
</div>
<input type="submit" name="submit" class="btn btn-danger submitBtn" value="SAVE"/>
</form>...
<script>
$(document).ready(function(e){
$("#fupForm").on('submit', function(e){
e.preventDefault();
$.ajax({
type: 'POST',
url: 'submit.php',
data: new FormData(this),
contentType: false,
cache: false,
processData:false,
beforeSend: function(){
$('.submitBtn').attr("disabled","disabled");
$('#fupForm').css("opacity",".5");
},
success: function(msg){
$('.statusMsg').html('');
if(msg == 'ok'){
$('#fupForm')[0].reset();
$('.statusMsg').html('<span style="font-size:18px;color:#34A853">Form
data submitted successfully.</span>');
}else{
$('.statusMsg').html('<span style="font-size:18px;color:#EA4335">Some
problem occurred, please try again.</span>');
}
$('#fupForm').css("opacity","");
$(".submitBtn").removeAttr("disabled");
}
});
});
//file type validation
$("#file").change(function() {
var file = this.files[0];
var imagefile = file.type;
var match= ["image/jpeg","image/png","image/jpg"];
if(!((imagefile==match[0]) || (imagefile==match[1]) || (imagefile==match[2]))){
alert('Please select a valid image file (JPEG/JPG/PNG).');
$("#file").val('');
return false;
}
});
});
</script>
<?php
if(!empty($_POST['name']) || !empty($_POST['email']) || !empty($_FILES['file']['name'])){
$uploadedFile = '';
if(!empty($_FILES["file"]["type"])){
$fileName = time().'_'.$_FILES['file']['name'];
$valid_extensions = array("jpeg", "jpg", "png");
$temporary = explode(".", $_FILES["file"]["name"]);
$file_extension = end($temporary);
if((($_FILES["hard_file"]["type"] == "image/png") || ($_FILES["file"]["type"] ==
"image/jpg") || ($_FILES["file"]["type"] == "image/jpeg")) && in_array($file_extension,
$valid_extensions)){
$sourcePath = $_FILES['file']['tmp_name'];
$targetPath = "uploads/".$fileName;
if(move_uploaded_file($sourcePath,$targetPath)){
$uploadedFile = $fileName;
}
}
}
$name = $_POST['name'];
$email = $_POST['email'];
//include database configuration file
include_once 'dbConfig.php';
//insert form data in the database
$insert = $db->query("INSERT form_data (name,email,file_name) VALUES ('".$name."','".
$email."','".$uploadedFile."')");
echo $insert?'ok':'err';
}
////////////////////////////////////
<form method="post" action="#" enctype="multipart/form-data">
<div class="card" style="width: 18rem;">
<img class="card-img-top" src="images/default-avatar.png">
<div class="card-body">
<h5 class="card-title">Sube una foto</h5>
<p class="card-text">Sube una imagen...</p>
<div class="form-group">
<label for="image">Nueva imagen</label>
<input type="file" class="form-control-file" name="image" id="image">
</div>
<input type="button" class="btn btn-primary upload" value="Subir">
</div>
</div>
</form>
<?php
if (($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/png")
|| ($_FILES["file"]["type"] == "image/gif")) {
if (move_uploaded_file($_FILES["file"]["tmp_name"], "images/".$_FILES['file']['name']))
{
//more code here...
echo "images/".$_FILES['file']['name'];
} else {
echo 0;
}
} else {
echo 0;
}
<script>
$(document).ready(function() {
$(".upload").on('click', function() {
var formData = new FormData();
var files = $('#image')[0].files[0];
formData.append('file',files);
$.ajax({
url: 'upload.php',
type: 'post',
data: formData,
contentType: false,
processData: false,
success: function(response) {
if (response != 0) {
$(".card-img-top").attr("src", response);
} else {
alert('Formato de imagen incorrecto.');
}
}
});
return false;
});
});
</script>
//////////////////////////////
Código HTML
El código HTML es muy simple, ya que en este caso sólo se trata de un ejemplo.
<div class="container mt-5">
<div class="row">
<div class="col-md-12">
<div class="announce"></div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<form method="post" action="#" enctype="multipart/form-
data">
<div class="card" style="width: 25rem;">
<img class="card-img-top"
src="https://via.placeholder.com/150">
<div class="card-body">
<div class="form-group">
<label for="image">Upload
image</label>
<input type="file"
class="form-control-file mt-2" name="image" id="image">
</div>
</div>
</div>
</form>
</div>
</div>
</div>
Código Javascript
Con jQuery detectaremos cuándo el usuario selecciona una imagen y ejecutaremos la llamada
Ajax contra el servidor.
Si la respuesta comienza por la cadena [ERROR] sabremos que la imagen no se ha subido
correctamente. Por el contrario, recibiremos la url de la imagen que acabamos de subir.
$(document).ready(function() {
$("#image").on('change', function() {
$(".announce").html('<div class="alert alert-
info">Process...</div>');
var formData = new FormData();
var files = $('#image')[0].files[0];
formData.append('file',files);
$.ajax({
url: 'upload.php',
type: 'post',
data: formData,
contentType: false,
processData: false,
async: false,
success: function(response) {
if (response.slice(0, 7) != "[ERROR]") {
$(".announce").html('<div
class="alert alert-success">Uploaded OK</div>');
$(".card-img-top").attr("src",
response);
} else {
var error_str = response.replace
("[ERROR]", "");
$(".announce").html('<div
class="alert alert-danger">An error has ocurred: <b>' + error_str + '</b></div>');
}
}
});
return false;
});
});
Código PHP
En nuestro código PHP realizaremos las validaciones necesarias para poder ejecutar la subida
y devolver una respuesta al cliente.
Tendremos un directorio llamado images en el que se almacenarán las imágenes. En este
ejemplo no se comprueba si la imagen ya existe.
<?php
// Definitions
$accept_types = array(
"image/pjpeg",
"image/jpeg",
"image/png",
"image/gif",
);
$to_path = "images";
// Check directory
if(!is_dir($to_path)){
echo "[ERROR]Internal directory not exists";
return;
}
// Check file type
if(!in_array($_FILES["file"]["type"], $accept_types)){
echo "[ERROR]The file type is not accepted";
return;
}
// Move the file
if (move_uploaded_file($_FILES["file"]["tmp_name"], $to_path . "/" . $_FILES['file']
['name'])) {
echo $to_path."/".$_FILES['file']['name'];
return;
}
// Default error
echo "[ERROR]Move image failed!";
//////////////////////////////////////
copy($_FILES['valorCaja4' ]['tmp_name'],"images/ImgProductos/".$ID);
move_uploaded_file($_FILES['valorCaja4']['tmp_name'],"images/ImgProductos/".$ID);
<div class="container">
<div class="row">
<div class="col-12">
<h1>Registrar Producto</h1>
<div id="ErroresRegistro"></div>
<form id="formulario">
<input name="unidadescaja" id="valor1" type="number"
placeholder="Unidades por caja"><br/><br/>
<input name="precio" id="valor2" type="number" placeholder="Precio"
step=".01"><span> €</span><br/><br/>
<textarea name="descripcion" id="valor3" style="width:70%;height:200px;"
></textarea><br/><br/>
<input type="file" name="imagen" id="valor4"
accept="image/jpeg"><br/><br/>
<button type="submit" id="guardarRegistro">Registrar</button>
<div id="ErroresRegistro"></div>
</form>
</div>
</div>
</div>
var precio = $('#valor2').val(); // obtienes el valor del input
var descripcion = $('#valor3').val();// obtienes el valor del input
var imagen = $("#valor4")[0].files[0]; // obtienes el archivo cargado en el input
console.log("imagen", imagen);
// Obviamente aqui debes hacer validaciones para que no vengan vacios los campos...
// que vengan solo los tipos de archivo que quieres almacenar...
// No puedes permitir que almacenen cualquier puedes hacer que tu sitio sea vulnerable
if (unidades == '' || precio == '' || descripcion == '' || imagen == '') {
$('#ErroresRegistro').html(`<p style="background:red; color:white; margin-top:10px;
padding:10px;">Todos los campos son requeridos</p>`);
} else if (imagen["type"] != "image/jpeg") {
$('#ErroresRegistro').html(`<p style="background:red; color:white; margin-top:10px;
padding:10px;">Solo se permiten archivos en formato JPG.</p>`);
} else {
$('#ErroresRegistro').html('');
var datos = new FormData(); //
https://developer.mozilla.org/es/docs/Web/Guide/Usando_Objetos_FormData
datos.append('valorCaja1', unidades)
datos.append('valorCaja2', precio)
datos.append('valorCaja3', descripcion)
datos.append('valorCaja4', imagen)
$.ajax({
url: "insertarproducto.php",
method: "POST",
data: datos,
cache: false,
contentType: false,
processData: false,
beforeSend: function () {
$("#ErroresRegistro").html(`<p style="background:orange; color:white;
margin-top:10px; padding:10px;">Procesando, espere por favor...</p>`);
},
success: function (response) { //una vez que el archivo recibe el request lo
procesa y lo devuelve
$("#ErroresRegistro").html(response);
}
})
}
})
<?php
// AJAX
if ($_SERVER['REQUEST_METHOD'] == 'POST') { // Valida que solo se pueda acceder al archivo
si es una peticion tipo POST
if ($_FILES['valorCaja4']['name'] != '' && !empty($_FILES['valorCaja4'])) { // Valida
que no venga vacia la imagen...
// Haz más validaciones lado servidor que sea el formato que vas a aceptar como en
el javascript JPG o el que tu desees...
if ($_FILES['valorCaja4']['type'] != 'image/jpeg') {
echo '<p style="background:red; color:white; margin-top:10px;
padding:10px;">Solo se permiten archivos en formato JPG.</p>';
} else {
// Valida los datos des inputs
// Tú SQL lo mandas aquí de preferencia con PDO
// Luego de que alamacenes los datos mandas la imagen al directorio
$id = 1; // esto debe de venir de tu base de datos, lo pongo aqui solo para
pruebaimages/ImgProductos/'.$ID
$nombre_img = 'imagen_producto_' .$id . '.jpg';
// las carpetas deben estar creadas si no es asi te dara un error, si no estan
creadas indaga sobre como crear directorios en php.
// ruta final de la imagen. Esta deberias de guardarla en un campo de tu BD para
poderla mostrar en algun otro lugar
$destino = 'images/ImgProductos/'.$nombre_img;
move_uploaded_file($_FILES['valorCaja4']['tmp_name'], $destino);
echo '<p style="background:green; color:white; margin-top:10px;
padding:10px;">Se han almacenado los datos</p>';
}
}
}
///////////////////////////////////////////////////////////
<form id="formularioanadir" enctype="multipart/form-data" method="post">
titulo pelicula: <input type="text" id="atitulo" name="titulo" value="" required/><br>
director: <input type="text" id="adirector" value="" required /><br>
genero: <select id="agenero">
<?php
$consulta = "SELECT idGenero, genero
FROM genero";
$res = $lnk->query($consulta);
while ($fila2 = $res->fetch_object()){?>
<option value="<?= $fila2->idGenero?>"><?= $fila2->genero?></option>
<?php } ?>
</select>
<br>
fecha: <input type="text" id="afecha" value="" required/>
imagen <input type="file" id="afile" name="afile" required/>
<!--<input type="file" name="file" value="subir archivo">-->
</form>
<?php
$archivo = $_FILES['afile'];
if ($_FILES['afile']['error'] == 0) {
// Donde se va a guardar el fichero (la imagen)
move_uploaded_file($_FILES['afile']['tmp_name'], 'uploads/'.$_FILES['afile']
['name']);
}
$titulo = $_POST['titulo'];
$director = $_POST['director'];
$fecha = $_POST['fecha'];
$genero = $_POST['idgenero'];
echo $titulo , $director, $fecha, $genero;
?>
"guardar": function() {
var file_data = $('#afile').prop('files')[0];
var form_data = new FormData();
form_data.append('afile', file_data);
form_data.append('titulo', $("#atitulo").val());
form_data.append('director', $("#adirector").val());
form_data.append('fecha', $("#afecha").val());
form_data.append('idgenero', $("#agenero").val());
form_data.append('operacion', "nuevo");
alert(form_data);
$.ajax({
url: 'peli.php',
dataType: 'text',
data: form_data,
type: 'post',
processData:false,
cache:false,
contentType: false,
success: function(data){
$("#listar").html(data);
}
});
} //Fin de la funcion "guardar"
if (isset($_FILES)) { // Verificar si se esta enviando algun fichero
if ($_FILES['afile']['error'] > 0) {
// Donde se va a guardar el fichero (la imagen)
move_uploaded_file($_FILES['afile']['tmp_name'], 'uploads/' . $_FILES['file']
['name']);
}
}
$(document).ready(function() {
// Obtener imagen seleccionada
var archivo = null;
$('#imagen').on('change', function(event) {
archivos = event.target.files;
archivo = archivos[0];
});
// Enviar formulario
$('#enviar').on('click touchend', function() {
// Objeto FormData para almacenar los datos
var datos = new FormData();
// Guardar la informacion del archivo para enviar
datos.append("imagen", archivo);
datos.append("nombre", $('#nombre').val());
jQuery.ajax({
url: "https://tiendasdigitales.net/peticion.php",
type: 'POST',
cache: false,
data: datos,
dataType: 'html',
contentType: false, // Importante
processData: false, // Importante
success: function(data, textStatus, jqXHR) {
// Exito
}
});
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="formulario">
<input type="text" placeholder="Nombre" id="nombre">
<input type="file" id="imagen">
<input type="button" id="enviar" value="Enviar">
</form>
/////////////////////////////////////////index.php
<!DOCTYPE HTML>
<html>
<head>
<script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
<script>
$(function(){
$("input[name='file']").on("change", function(){
var formData = new FormData($("#formulario")[0]);
var ruta = "imagen-ajax.php";
$.ajax({
url: ruta,
type: "POST",
data: formData,
contentType: false,
processData: false,
success: function(datos)
{
$("#respuesta").html(datos);
}
});
});
});
</script>
</head>
<body>
<form method="post" id="formulario" enctype="multipart/form-data">
Subir imagen: <input type="file" name="file">
</form>
<div id="respuesta"></div>
</body>
</html>
ajax-imagen.php
<?php
if (isset($_FILES["file"]))
{
$file = $_FILES["file"];
$nombre = $file["name"];
$tipo = $file["type"];
$ruta_provisional = $file["tmp_name"];
$size = $file["size"];
$dimensiones = getimagesize($ruta_provisional);
$width = $dimensiones[0];
$height = $dimensiones[1];
$carpeta = "imagenes/";
if ($tipo != 'image/jpg' && $tipo != 'image/jpeg' && $tipo != 'image/png' && $tipo !=
'image/gif')
{
echo "Error, el archivo no es una imagen";
}
else if ($size > 1024*1024)
{
echo "Error, el tamaño máximo permitido es un 1MB";
}
else if ($width > 500 || $height > 500)
{
echo "Error la anchura y la altura maxima permitida es 500px";
}
else if($width < 60 || $height < 60)
{
echo "Error la anchura y la altura mínima permitida es 60px";
}
else
{
$src = $carpeta.$nombre;
move_uploaded_file($ruta_provisional, $src);
echo "<img src='$src'>";
}
}
////////////////////////////////////////////////////////////
<!DOCTYPE html>
<html>
<head>
<title> Subida y precarga ajax </title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- Css -->
<link href="css/bootstrap.css" rel="stylesheet" media="screen">
<!-- Javascript -->
<script src="js/jquery-2.0.2.js"></script>
<script src="js/upload.js"></script>
<script src="js/bootstrap.min.js"></script>
<script type="text/javascript">
function subirArchivos() {
$("#archivo").upload('subir_archivo.php',
{
nombre_archivo: $("#nombre_archivo").val()
},
function(respuesta) {
//Subida finalizada.
$("#barra_de_progreso").val(0);
if (respuesta === 1) {
mostrarRespuesta('El archivo ha sido subido correctamente.', true);
$("#nombre_archivo, #archivo").val('');
} else {
mostrarRespuesta('El archivo NO se ha podido subir.', false);
}
mostrarArchivos();
}, function(progreso, valor) {
//Barra de progreso.
$("#barra_de_progreso").val(valor);
});
}
function eliminarArchivos(archivo) {
$.ajax({
url: 'eliminar_archivo.php',
type: 'POST',
timeout: 10000,
data: {archivo: archivo},
error: function() {
mostrarRespuesta('Error al intentar eliminar el archivo.', false);
},
success: function(respuesta) {
if (respuesta == 1) {
mostrarRespuesta('El archivo ha sido eliminado.', true);
} else {
mostrarRespuesta('Error al intentar eliminar el archivo.', false);
}
mostrarArchivos();
}
});
}
function mostrarArchivos() {
$.ajax({
url: 'mostrar_archivos.php',
dataType: 'JSON',
success: function(respuesta) {
if (respuesta) {
var html = '';
for (var i = 0; i < respuesta.length; i++) {
if (respuesta[i] != undefined) {
html += '<div class="row"> <span class="col-lg-2"> ' + respuesta[i] + '
</span> <div class="col-lg-2"> <a class="eliminar_archivo btn btn-danger"
href="javascript:void(0);"> Eliminar </a> </div> </div> <hr />';
}
}
$("#archivos_subidos").html(html);
}
}
});
}
function mostrarRespuesta(mensaje, ok){
$("#respuesta").removeClass('alert-success').removeClass('alert-danger').html
(mensaje);
if(ok){
$("#respuesta").addClass('alert-success');
}else{
$("#respuesta").addClass('alert-danger');
}
}
$(document).ready(function() {
mostrarArchivos();
$("#boton_subir").on('click', function() {
subirArchivos();
});
$("#archivos_subidos").on('click', '.eliminar_archivo', function() {
var archivo = $(this).parents('.row').eq(0).find('span').text();
archivo = $.trim(archivo);
eliminarArchivos(archivo);
});
});
</script>
</head>
<body>
<div class="container">
<h1> Subida y precarga ajax </h1>
<div id="respuesta" class="alert"></div>
<form action="javascript:void(0);">
<div class="row">
<div class="col-lg-2">
<label> Nombre el archivo: </label>
</div>
<div class="col-lg-2">
<input type="text" name="nombre_archivo" id="nombre_archivo" />
</div>
<div class="col-lg-2">
<input type="file" name="archivo" id="archivo" />
</div>
</div>
<hr />
<div class="row">
<div class="col-lg-2">
<input type="submit" id="boton_subir" value="Subir" class="btn btn-success"
/>
</div>
<div class="col-lg-4">
<progress id="barra_de_progreso" value="0" max="100"></progress>
</div>
</div>
</form>
<hr />
<div id="archivos_subidos"></div>
</div>
</body>
</html>
<?php
if (isset($_FILES['archivo'])) {
$archivo = $_FILES['archivo'];
$extension = pathinfo($archivo['name'], PATHINFO_EXTENSION);
$time = time();
$nombre = "{$_POST['nombre_archivo']}_$time.$extension";
if (move_uploaded_file($archivo['tmp_name'], "archivos_subidos/$nombre")) {
echo 1;
} else {
echo 0;
}
}
?>
<?php
$directorio_escaneado = scandir('archivos_subidos');
$archivos = array();
foreach ($directorio_escaneado as $item) {
if ($item != '.' and $item != '..') {
$archivos[] = $item;
}
}
echo json_encode($archivos);
?>
Y otro llamado eliminar_archivo.php:
<?php
if (isset($_POST['archivo'])) {
$archivo = $_POST['archivo'];
if (file_exists("archivos_subidos/$archivo")) {
unlink("archivos_subidos/$archivo");
echo 1;
} else {
echo 0;
}
}
?>
Comentarios
Publicar un comentario