Idioma: PHP/MySQLmatrices de formulario de carga múltiple, subir imágenes a continuación, insertar a la base de datos (PHP, MySQL)
voy fuera de mi mente, realmente tienen que pedir ahora tengo ... una forma de carga de archivos múltiples:
<input type="file" name="fileupload[]" multiple>
con la ayuda de un poco de Javascript, en cada cambio realizado en esta entrada, se anexa una lista de nombres de ficheros, + una cadena con formato (agarró por el nombre del archivo) dentro de otro de entrada , así que en cambio tenemos un diseño como se muestra a continuación (suponiendo que acabamos de agregar algunas imágenes):
casi similar a:http://jsfiddle.net/pxfunc/WWNnV/4/
// Una representación de HTML tal disposición sería ... (suponiendo que 3 imágenes añadidas)
<input type="file" name="fileupload[]" multiple>
- imagen-nombre-1.jpg
<input type="text" value="Image Name 1" name="keyword[]">
- justsome_file.png
<input type="text" value="Justsome File" name="keyword[]">
- some_Img-031.gif
<input type="text" value="Some Img 031" name="keyword[]">
<input type="submit" value="Upload">
tengo de esta manera porque además de cargar los archivos, también me gustaría o agréguelos a mi base de datos, con un título predeterminado basado en su nombre de archivo (y la opción de establecer/cambiar este título para cada imagen a medida que la cargo). No hay problema con mi formulario.
PROBLEMA: Mi dilema se encuentra dentro de la página PHP donde se envían los datos del formulario/acción.
sólo puedo manejar a cualquiera:
- Subir imágenes correctas, pero conseguir mismo título para todos los títulos
- inserto correcto, pero conseguir la misma imagen para todos
Aquí está mi Página de acción PHP: (Actualmente cargando imágenes correctas, pero teniendo mismo título para todos)
<?php
// CONNECT TO DATABASE...
// INCLUDE UPLOAD CLASS LIBRARY
include (dirname(__FILE__).'/lib/class.upload.php');
$files = array();
foreach ($_FILES['fileupload'] as $k => $l)
{
foreach ($l as $i => $v)
{
if (!array_key_exists($i, $files))
$files[$i] = array();
$files[$i][$k] = $v;
$imagename = $_POST['keyword'][$i];
}
}
// create an array here to hold file names
$uploaded = array();
foreach ($files as $file)
{
$generate_name = rand(100,99999);
$generate_name_extra = rand(200,9999);
$filenamex = "COVER_PHOTO_".$generate_name.$generate_name_extra."_".time();
$filenamex_thumb = $filenamex."_thumb";
$handle = new upload($file);
if ($handle->uploaded) {
$this_upload = array();
///// 1 ////////////////////////////////////////////////////////////////////
$handle->file_new_name_body = $filenamex_thumb;
$handle->file_force_extension = true;
$handle->image_resize = true;
$handle->image_x = '300';
$handle->image_ratio_y = true;
$handle->jpeg_quality = '100';
// ABSOLUTE PATH BELOW
$handle->process($absoRoot.'covers/thumbs/');
////////////////////////////////////////////////////////////////////////////
if ($handle->processed) {
// store the image filename
$this_upload['image'] = $handle->file_dst_name; // Destination file name
$this_upload['body'] = $handle->file_dst_name_body; // Destination file name body
$this_upload['extension'] = $handle->file_dst_name_ext; // Destination file extension
$category_id = $_POST['cat'];
$hiddenvalues = explode ("|",$_POST["cat"]);
$category = $hiddenvalues[0];
$category_name = $hiddenvalues[1];
$sql = 'INSERT INTO cover (id, img, keyword, category_name, cat_id) VALUES ("", "'.$this_upload['image'].'", "'.$imagename.'", "'.$category_name.'", "'.$category.'")';
mysql_query($sql);
}
$handle->clean();
header("Location: ./upload.php");
$message = "";
} else {
echo ' file not uploaded to the wanted location';
echo ' Error: ' . $handle->error . '';
}
} ?>
(yo uso el Upload Class by Colin Verot para manejar la subida de imágenes, y sus preguntas más frecuentes tutorial para manejar la subida de imágenes múltiples en this page, under: What about multiple uploads?)
Esto funcionaría perfecto si estuviera simplemente subiendo imágenes, sin embargo he añadido la funcionalidad de añadir cada imagen de datos a mi base de datos. & Aquí es donde se vuelve confuso.
Estoy seguro de que la clave es colocar la consulta SQL dentro del foreach correcto, o tal vez hacer otra, pero he intentado que & solo me da 1 buen resultado para la carga de la imagen o el título, nunca para ambos.
Necesito subir la imagen al sitio, luego almacenar sus datos (incluida la ruta de la imagen) en mi base de datos.
Por favor, mira mi código y me aclaras cómo resolver este problema? Una pista de fragmento realmente sería genial por ahora ya que estoy muy confundido después de haber intentado todo lo que pude pensar. Muchas gracias!
Limpiar el formateo del bloque y actualizar su publicación: 'if (! Array_key_exists ($ i, $ files))' –
No estoy seguro de cómo hacerlo, ese bloque de código fue del tutorial de Preguntas frecuentes de la clase Upload en [esta página, en: ** ¿Qué pasa con las cargas múltiples? **] (http://www.verot.net/php_class_upload_faq.htm?PHPSESSID=accbee5eb0a694348a445a61a4e40ba1) Realmente no veo cuál es cuál de ese bloque de código , pero intenté cambiarlo antes y las cargas dejaron de funcionar, así que lo dejé allí. Yo, sin embargo, fui quien agregó la pieza: '$ imagename = $ _POST ['keyword'] [$ i];' – Mafia
** ACTUALIZACIÓN: ** Recibí la respuesta correcta de [** usuario: 138383 ** , ** Aaron W. **] (http://stackoverflow.com/users/138383/aaron-w) Su comentario fue uno de los primeros, y el primero que probé funcionó, pero no pude marcarlo corrige más porque lo eliminó. Lo he notificado de alguna manera, y esperaré en caso de que quiera volver a enviarlo, y luego marcaré su respuesta como correcta. [** (Su respuesta fue ...) **] (http://i4.photobucket.com/albums/y143/cute-spot/Animatiofgdn6.gif) solo para darle crédito. Casi me muero cuando funcionó. :) – Mafia