por - mostrar datos en formulario php
Cargar múltiples imágenes con un campo de entrada (6)
Funciona de la misma manera que si hubiera varios campos de archivos Docs , es transparente para PHP. Aquí hay un código de ejemplo simple:
<html>
<body>
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="fileField[]" id="fileField" multiple="multiple">
<input type="text" name="test" value="test">
<input type="submit" name="submit">
</form>
</body>
</html>
<?php
var_dump($_FILES, $_POST);
Guárdelo en su host y solicítelo. Luego puede jugar con él, le mostrará la estructura de la $_FILES
y $_POST
.
Ejemplo de salida:
array
''fileField'' =>
array
''name'' =>
array
0 => string ''hakre-iterator-fun-cut-top.png'' (length=30)
1 => string ''hakre-iterator-fun-cut-middle.png'' (length=33)
''type'' =>
array
0 => string ''image/png'' (length=9)
1 => string ''image/png'' (length=9)
''tmp_name'' =>
array
0 => string ''/tmp/php1A2.tmp'' (length=15)
1 => string ''/tmp/php1A3.tmp'' (length=15)
''error'' =>
array
0 => int 0
1 => int 0
''size'' =>
array
0 => int 234001
1 => int 213058
array
''test'' => string ''test'' (length=4)
''submit'' => string ''Submit'' (length=6)
Consulte Carga de múltiples archivos de documentos .
He creado un sitio web de fotografía con una página de administración que carga fotos a diferentes categorías en una tabla de MySQL. Esto funciona, pero solo puedo subir un archivo a la vez y me gustaría poder seleccionar varias imágenes.
Aquí está la forma
<form action="index.php" enctype="multipart/form-data" name="myForm" id="myForm" method="post">
<select name="category" id="category">
<option value="Nature">Nature</option>
<option value="People">People</option>
<option value="Abstract">Abstract</option>
</select>
<input type="file" name="fileField" id="fileField" />
<input type="submit" name="submit" id="submit" value="Add Images" />
</form>
Y aquí está el php para analizar el formulario
if (isset($_POST[''submit''])) {
$category = mysql_real_escape_string($_POST[''category'']);
// Add this product into the database now
$sql = mysql_query("INSERT INTO images (category, date_added)
VALUES(''$category'',now())") or die (mysql_error());
$pid = mysql_insert_id();
// Place image in the folder
$newname = "$pid.jpg";
move_uploaded_file( $_FILES[''fileField''][''tmp_name''], "../photos/$newname");
header("location: thumbnail_generator.php");
exit();
}
Miré en el método de entrada de archivo html5, y hasta donde puedo decir, puedo cambiar la entrada como sigue:
<input type="file" name="fileField[]" id="fileField" multiple="multiple"/>
Esto me permite seleccionar varios archivos en el sitio, pero no puedo encontrar la manera de implementar esto en mi php. Cualquier ayuda sería muy apreciada.
Prueba esto
http://www.uploadify.com/demos/
Uploadify es una secuencia de comandos de carga de archivos poderosa y altamente personalizable. Uploadify es fácil de poner en funcionamiento con un mínimo esfuerzo y poco conocimiento de codificación.
recibirás una matriz de imágenes -> fileField []. Simplemente itere a través de este conjunto y agregue las imágenes de la misma manera que las estaba agregando antes. Además, sugiero usar este, muy buen script - http://valums.com/ajax-upload/
EDITAR: ¡No olvide implementar al menos algunas comprobaciones de seguridad, como tamaño mínimo y máximo de carga, extensiones de archivos y verificación tipo mimo! Incluso si es para el back-end, esto aún podría llevar a eventos desagradables.
<form method="post" action="" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="500000">
Add Photos <input multiple="true" onchange="this.form.submit()" type="file" name="photos[]"/>
<input type="hidden" name="sendfiles" value="Send Files" />
</form>
<?php
define ("MAX_SIZE","5000");
function getExtension($str)
{
$i = strrpos($str,".");
if (!$i) { return ""; }
$l = strlen($str) - $i;
$ext = substr($str,$i+1,$l);
return $ext;
}
$errors=0;
if(isset($_POST[''sendfiles'']))
{
$uploaddir = "files/"; //a directory inside
foreach ($_FILES[''photos''][''name''] as $name => $value)
{
$filename = stripslashes($_FILES[''photos''][''name''][$name]);
//get the extension of the file in a lower case format
$extension = getExtension($filename);
$extension = strtolower($extension);
echo "/n This is the extension: ",$extension;
if (($extension != "jpg") && ($extension != "jpeg") && ($extension != "png") && ($extension != "gif"))
{
//print error message
?>
<h4>Unknown extension!</h4>
<?php
$errors=1;
}
else
{
$size=filesize($_FILES[''photos''][''tmp_name''][$name]);
if ($size > MAX_SIZE*1024)
{
?>
<h4>You have exceeded the size limit!</h4>
<?php
$errors=1;
}
$image_name=$filename.''.''.$extension;
$newname="files/".$image_name;
$copied = copy($_FILES[''photos''][''tmp_name''][$name], $newname);
if (!$copied)
{
?>
<h4>Copy unsuccessfull!</h4>
<?php
$errors=1;
}
}
}
//echo "Images uploaded successfully";
}
//mysql_close($dbhandle);
?>
¿No funcionaría algo así como crear una matriz también? Entonces, ¿qué podría hacer es
$images = array();
Luego, en su forma, solo agrega un botón para agregar a la lista de imágenes. A partir de ahí, ¿sigue agregando tantas imágenes como quiera y luego itera sobre la matriz y agrega a la base de datos?