2012-03-02 8 views
5

Ho creato un sito web di fotografia con una pagina di amministrazione che carica le foto in diverse categorie in una tabella mysql. Funziona molto, ma posso caricare solo un file alla volta e mi piacerebbe poter selezionare più immagini.Caricamento di più immagini con un campo di input

Ecco il modulo

<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> 

Ed ecco il php per analizzare la forma

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(); 
} 

ho guardato dentro il metodo di immissione di file HTML5, e per quanto posso dire, posso cambiare la input come folllows:

<input type="file" name="fileField[]" id="fileField" multiple="multiple"/> 

Questo mi permette di selezionare più file sul sito, ma non riesco a capire come t o implementalo nel mio php. Qualsiasi aiuto sarebbe molto apprezzato.

risposta

4

Probabilmente si sta cercando qualcosa di simile uploadify o swfupload o plupload.

+0

Personalmente utilizzo SWFUpload, Uploadify utilizza effettivamente SWFUpload, quindi a seconda di quanto è buono il tuo JavaScript, preferisco Uploadify o SWFUpload. –

+0

collegamento interrotto per swfupload – bubakazouba

0

Prova questo.

http://www.uploadify.com/demos/

Uploadify è uno script di upload di file potente e altamente personalizzabile. Uploadify è facile da installare e utilizzare con lo sforzo minimo e poche conoscenze di programmazione.

+0

Questo è più un commento che una risposta. – hakre

0

riceverai una serie di immagini -> file Campo []. Basta scorrere questa matrice e aggiungere le immagini nello stesso modo in cui le avevi aggiunte in precedenza. Inoltre, io suggerirei di utilizzare questo, molto bello sceneggiatura - http://valums.com/ajax-upload/

EDIT: Basta non dimenticare di implementare almeno alcuni controlli di sicurezza, come min e dimensione massima di upload, le estensioni dei file e mime-type controllo! Anche se è per il back-end, questo potrebbe comunque portare a eventi spiacevoli.

2

Funziona come se fosse multiple file fields­Docs, è trasparente per PHP. Ecco alcuni semplici esempi di codice:

<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); 

Conservalo sul tuo host e richiedilo. È quindi possibile giocare con esso, vi mostrerà la struttura della matrice $_FILES e $_POST.

uscita Esempio:

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) 

Vedi Uploading multiple files­Docs.

5
<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); 
?> 
+1

Benvenuti in Stack Overflow! Mentre questo può teoricamente rispondere alla domanda, sarebbe preferibile includere anche la spiegazione. –

+0

Qual è il problema, ho ottenuto ** Attenzione: copy(): il nome file non può essere vuoto ** in '$ copiato = copia ($ _ FILES ['foto'] ['tmp_name'] [$ name], $ newname);' – Sandesh

0

Non sarebbe un po 'come creare un array? Quindi quello che potrebbe fare è

$images = array(); 

Quindi nella sua forma basta aggiungere un pulsante aggiungi all'elenco immagini? Da lì continua semplicemente ad aggiungere tutte le immagini che desidera e poi semplicemente itera sull'array e aggiunge al database?

Problemi correlati