upload multiplo di 2 immagini su database mysql

  • Creatore Discussione Creatore Discussione migo80
  • Data di inizio Data di inizio

migo80

Utente Attivo
25 Apr 2013
243
3
18
Salve avrei bisogno di un aiuto/spiegazione/esempio di come modificare questo script di upload singolo che attualmente uso ed è funzionante in upload multiplo.grazie.
questo è lo script:

PHP:
function upload()
{



  $titolo=$_POST['titolo'];
  $annuncio=$_POST['annuncio'];
  $prezzo=$_POST['prezzo'];
  $regione=$_POST['regione'];
  $contatti=$_POST['contatti'];
  $categoria=$_POST['categoria'];
  
  function chkEmail($contatti) 
{ 
  
  // elimino spazi, "a capo" e altro alle estremità della stringa 
    $contatti = trim($contatti); 
     // se la stringa è vuota sicuramente non è una mail 
    if(!$contatti) { 
        return false; 
    } 
     // controllo che ci sia una sola @ nella stringa 
    $num_at = count(explode( '@', $contatti )) - 1; 
    if($num_at != 1) { 
        return false; 
    } 
     // controllo la presenza di ulteriori caratteri "pericolosi": 
    if(strpos($contatti,';') || strpos($contatti,',') || strpos($contatti,' ')) { 
        return false; 
    } 
     // la stringa rispetta il formato classico di una mail? 
    if(!preg_match( '/^[\w\.\-]+@\w+[\w\.\-]*?\.\w{1,4}$/', $contatti)) { 
        return false; 
    } 
     return true; 
} 
 if(chkEmail($contatti)) { 
 

 
 
  if ( $titolo == TRUE && $annuncio == TRUE && $regione == TRUE && $contatti == TRUE && $categoria == TRUE)  {
  
  // Check if submit button has been submitted
    if (isset($_POST['invia'])){
    // Include reCAPTCHA lib
    require_once('recaptchalib.php');
    // Your private key goes here between quotes
    $privatekey = "+++++++++++++++++++++++++";
    $resp = recaptcha_check_answer ($privatekey,
    $_SERVER["REMOTE_ADDR"],
    $_POST["recaptcha_challenge_field"],
    $_POST["recaptcha_response_field"]);
    if (!$resp->is_valid) {
    // What happens when the CAPTCHA was entered incorrectly
    die (" Il reCAPTCHA non è stato digitato correttamente. Ritorna indietro e riprova." .
    "(reCAPTCHA said: " . $resp->error . ")");
 } 
 } else {
    
    }

  $result = false;
  $foto = '';
  $size = 0;
  $type = '';
  $nome = '';
  $max_file_size = 92000;
  $result = @is_uploaded_file($_FILES['file']['tmp_name']);
  
  
    $type = $_FILES['file']['type'];
    $nome = $_FILES['file']['name'];
    $foto = @file_get_contents($_FILES['file']['tmp_name']);
    $foto = addslashes ($foto);
    @include 'conn2.php';
	$data = time();
    $sql = "INSERT INTO computer (nome, size, type, foto, titolo, annuncio, prezzo, regione, contatti, categoria, data) VALUES ('$nome','$size','$type','$foto',' $titolo',' $annuncio',' $prezzo','$regione','$contatti','$categoria', '$data')";
	$result = @mysql_query ($sql) or die (mysql_error());
   $mio=' [email protected]';
 mail ($contatti, "Annuncio Pubblicato con Successo.", "Complimenti il tuo annuncio e' stato inserito nel nostro database \n Di seguito è riportato un riepilogo del tuo annuncio:\n Tiolo: $titolo\n Annuncio: $annuncio\n Prezzo: $prezzo\n Categoria: $categoria\n Regione: $regione\n L' annuncio da lei inserito, rimarrà pubblicato per 30 giorni ( un mese ), allo scadere del trentesimo giorno, verrà eliminato automaticamente.", "From: [email protected]");
 mail ($mio, "Pubblicato nuovo annuncio","Titolo: $titolo\n Testo: $annuncio\n Contatti: $contatti", "FROM: briccobracco_Annunci");
	echo "<h4>Annuncio ineserito con successo, tra breve riceverà una mail.\n Può accadere che alcuni server mail, considerino la posta inviata da questo sito come spam,\n per tanto la invitamo a controllare anche tra la posta indesiderata.</h4>";
	return false;
	
	} else {

echo "<h3 align='center' style='font-family:Verdana, Arial, Helvetica, sans-serif; color:#FF0000'>Tutti i campi sono obbligatori</h3>";

}
}else{ 
echo "<h3 align='center' style='font-family:Verdana, Arial, Helvetica, sans-serif; color:#FF0000'>Indirizzo E-mail non corretto!</h3>";
}  
}
 
Ultima modifica:
Ciao, questo è un esempio funzionante
PHP:
<?php
// inizializziamo il messaggio
$messaggio = "Seleziona una o piu immagini:";
// estensioni ammesse
$estensioni = array("jpg", "png", "bmp", "gif");
// percosrso destinazione immagini la cartella deve esistere e il percorso deve essere corretto
$dir = "../images";
// verifichiamo che sia stato premuto il submit
if (isset($_POST['upload']) && $_POST['upload'] == "Carica immagini") {

    // recuperiamo e uniamo le informazionei sulle immagini
    $infoimages = array_combine($_FILES["image"]['name'], $_FILES["image"]['tmp_name']);

    foreach ($infoimages as $k => $v) {
        // nome del file
        $nomefile = strtolower($k);
        // recuperiamo l'esensione
        $estensionefile = pathinfo($nomefile, PATHINFO_EXTENSION);
        // controlliamo il tipo immagine
        if (in_array(strtolower($estensionefile), $estensioni)) {
            // controllo caricamento
            if (is_uploaded_file($v)) {
                // spostiamo il file nella cartella immagini
                if (!move_uploaded_file($v, "$dir/$nomefile")) {
                    $messaggio = "Impossibile spostare il file";
                } else {
                    $messaggio = "Immagini caricate con successo";
                }
            } else {
                $messaggio = "Errore nell'upload del file $k.";
            }
        } else {
            $messaggio = "Tipo immagine non consentito : $k";
        }
    }
}
?>
<form enctype='multipart/form-data' method='post' action='<?php echo $_SERVER['PHP_SELF'] ?>'>
    <p>Immagini consentite "jpg", "png", "bmp", "gif"</p>
    <p>
        <input name="image[]" type="file" size="40" multiple="multiple"/>   
        <input name="upload" type="submit" value="Carica immagini" />
    </p>
</form>
<p><?php echo $messaggio ?></p>
vedi se riesci aprendere spunto
 
ciao, se devi fare un upload multiplo di serve anche javascript per creare un'altro file input.
e poi nell'mysql salvi solo il nome dell'immagine e la recuperi cosi <img src="public/<?php echo $row["immagine"]; ?>">
ecco non so se ho capito bene:
eccoti un esempio:
PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Multi File Upload</title>
</head>
<body>
<?php

if(isset($_POST['btnSubmit'])){

            $allowed_types = array("image/gif","image/jpeg","image/pjpeg","image/png");


            foreach($_FILES['dynamic']['tmp_name'] as $key=>$value)
            {
                if(!in_array($_FILES['dynamic']['type'][$key],$allowed_types)) 
                {
                echo "Upload non consentito per questo tipo di file. file: ".$_FILES['dynamic']['name'][$key]."<br>";
                }else
                {
                    move_uploaded_file($value, dirname(__FILE__)."/upload/".$_FILES['dynamic']['name'][$key]);
// qui puoi inserire l'inserimento del database che io non ne so molto quindi vedi se quaclun'altro ti riesce ad aiutarti.


                }
            }
        }
        
?>
<form id="form1"  enctype="multipart/form-data" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<p id="upload-area">
   <input name="dynamic[]" id="dynamic" type="file"  size="60" />
</p>

<input name="AddFile" id="AddFile" type="button" value="Add file" onclick="addFileUploadBox()" />
<p><input name="btnSubmit" id="btnSubmit" type="submit" value="upload"></p>
<span id="Span1"  />

<script type="text/javascript">
function addFileUploadBox()
{
    if (!document.getElementById || !document.createElement)
        return false;
        
    var uploadArea = document.getElementById ("upload-area");
    
    if (!uploadArea)
        return;

    var newLine = document.createElement ("br");
    uploadArea.appendChild (newLine);
    
    var newUploadBox = document.createElement ("input");
    
    // Set up the new input for file uploads
    newUploadBox.type = "file";
    newUploadBox.size = "60";
    
    // The new box needs a name and an ID
    if (!addFileUploadBox.lastAssignedId)
        addFileUploadBox.lastAssignedId = 100;
        
    newUploadBox.setAttribute ("id", "dynamic" + addFileUploadBox.lastAssignedId);
    newUploadBox.setAttribute ("name", "dynamic[" + addFileUploadBox.lastAssignedId+"]");
    uploadArea.appendChild (newUploadBox);
    addFileUploadBox.lastAssignedId++;
}
</script>
</form>
</body>
</html>

per aggiungere file devi prima fare add file più volte che voi inserire i file.

saluti,
luigi.
 
vi ringrazio per le risposte. però il mio problema è come recuperare l' immagine in base all ' id dei record associati? il mio script salva l' immagine direttamente nel db "so che non si dovrebbe però...." perchè così facendo mi ritorna più semplice il richiamo tramite id.
usando i vostri suggerimenti come posso adattarli alle mie esigenze e cioè salvare 2 immagini in 2 campi ad esmpio " foto1 e foto2 nel db?:byebye:
 
Ciao, questo è un esempio funzionante
PHP:
<?php
// inizializziamo il messaggio
$messaggio = "Seleziona una o piu immagini:";
// estensioni ammesse
$estensioni = array("jpg", "png", "bmp", "gif");
// percosrso destinazione immagini la cartella deve esistere e il percorso deve essere corretto
$dir = "../images";
// verifichiamo che sia stato premuto il submit
if (isset($_POST['upload']) && $_POST['upload'] == "Carica immagini") {

    // recuperiamo e uniamo le informazionei sulle immagini
    $infoimages = array_combine($_FILES["image"]['name'], $_FILES["image"]['tmp_name']);

    foreach ($infoimages as $k => $v) {
        // nome del file
        $nomefile = strtolower($k);
        // recuperiamo l'esensione
        $estensionefile = pathinfo($nomefile, PATHINFO_EXTENSION);
        // controlliamo il tipo immagine
        if (in_array(strtolower($estensionefile), $estensioni)) {
            // controllo caricamento
            if (is_uploaded_file($v)) {
                // spostiamo il file nella cartella immagini
                if (!move_uploaded_file($v, "$dir/$nomefile")) {
                    $messaggio = "Impossibile spostare il file";
                } else {
                    $messaggio = "Immagini caricate con successo";
                }
            } else {
                $messaggio = "Errore nell'upload del file $k.";
            }
        } else {
            $messaggio = "Tipo immagine non consentito : $k";
        }
    }
}
?>
<form enctype='multipart/form-data' method='post' action='<?php echo $_SERVER['PHP_SELF'] ?>'>
    <p>Immagini consentite "jpg", "png", "bmp", "gif"</p>
    <p>
        <input name="image[]" type="file" size="40" multiple="multiple"/>   
        <input name="upload" type="submit" value="Carica immagini" />
    </p>
</form>
<p><?php echo $messaggio ?></p>
vedi se riesci aprendere spunto

Ciao ho provato il codice e funziona perfettamente, però ho un altra richiesta, dovrei fare il controllo che l'immagine non superi 1MB di grandezza, come lo posso fare su questo script? dove lo devo mettere ? grazie

Ho provato con :
PHP:
[PHP]if($_FILES['image']['size']>1000000)
		$messaggio.="Il file ha dimensioni che superano i 1 MB<br />";
come faccio? :?
 
prova cosi , non ho testato a dovere
PHP:
<?php
// limite peso in byte (1MB)
$peso_file = 1024 * 1024;
// inizializziamo il messaggio
$messaggio = "Seleziona una o piu immagini:";
// estensioni ammesse
$estensioni = array("jpg", "png", "bmp", "gif");
// percosrso destinazione immagini la cartella deve esistere e il percorso deve essere corretto
$dir = "../images";
// verifichiamo che sia stato premuto il submit
if (isset($_POST['upload']) && $_POST['upload'] == "Carica immagini") {
    // azzeriamo il messaggio
    $messaggio = "";
    // recuperiamo e uniamo le informazionei sulle immagini
    $infoimages = array_combine($_FILES["image"]['name'], $_FILES["image"]['tmp_name']);
    // cicliamo le immagini
    foreach ($infoimages as $k => $v) {
        // nome del file
        $nomefile = strtolower($k);
        // controlliamo il peso immagine
        if (filesize($v) < $peso_file) {
            // recuperiamo l'estensione
            $estensionefile = pathinfo($nomefile, PATHINFO_EXTENSION);
            // controlliamo il tipo immagine
            if (in_array(strtolower($estensionefile), $estensioni)) {
                // controllo caricamento
                if (is_uploaded_file($v)) {
                    // spostiamo il file nella cartella immagini
                    if (!move_uploaded_file($v, "$dir/$nomefile")) {
                        $messaggio .= "<br/>Impossibile spostare il file $k";
                    } else {
                        $messaggio .= "<br/>Immagine $k caricata con successo";
                    }
                } else {
                    $messaggio .= "<br/>Errore nell'upload del file $k.";
                }
            } else {
                $messaggio .= "<br/>Tipo immagine non consentito : $k";
            }
        } else {
            $messaggio .= "<br/>Immagine $k non caricata : limite peso superato";
        }
    }
}
?>
<form enctype='multipart/form-data' method='post' action='<?php echo $_SERVER['PHP_SELF'] ?>'>
    <p>Immagini consentite "jpg", "png", "bmp", "gif"</p>
    <p>
        <input name="image[]" type="file" size="40" multiple="multiple"/>   
        <input name="upload" type="submit" value="Carica immagini" />
    </p>
</form>
<p><?php echo $messaggio ?></p>
 
prova cosi , non ho testato a dovere
PHP:
<?php
// limite peso in byte (1MB)
$peso_file = 1024 * 1024;
// inizializziamo il messaggio
$messaggio = "Seleziona una o piu immagini:";
// estensioni ammesse
$estensioni = array("jpg", "png", "bmp", "gif");
// percosrso destinazione immagini la cartella deve esistere e il percorso deve essere corretto
$dir = "../images";
// verifichiamo che sia stato premuto il submit
if (isset($_POST['upload']) && $_POST['upload'] == "Carica immagini") {
    // azzeriamo il messaggio
    $messaggio = "";
    // recuperiamo e uniamo le informazionei sulle immagini
    $infoimages = array_combine($_FILES["image"]['name'], $_FILES["image"]['tmp_name']);
    // cicliamo le immagini
    foreach ($infoimages as $k => $v) {
        // nome del file
        $nomefile = strtolower($k);
        // controlliamo il peso immagine
        if (filesize($v) < $peso_file) {
            // recuperiamo l'estensione
            $estensionefile = pathinfo($nomefile, PATHINFO_EXTENSION);
            // controlliamo il tipo immagine
            if (in_array(strtolower($estensionefile), $estensioni)) {
                // controllo caricamento
                if (is_uploaded_file($v)) {
                    // spostiamo il file nella cartella immagini
                    if (!move_uploaded_file($v, "$dir/$nomefile")) {
                        $messaggio .= "<br/>Impossibile spostare il file $k";
                    } else {
                        $messaggio .= "<br/>Immagine $k caricata con successo";
                    }
                } else {
                    $messaggio .= "<br/>Errore nell'upload del file $k.";
                }
            } else {
                $messaggio .= "<br/>Tipo immagine non consentito : $k";
            }
        } else {
            $messaggio .= "<br/>Immagine $k non caricata : limite peso superato";
        }
    }
}
?>
<form enctype='multipart/form-data' method='post' action='<?php echo $_SERVER['PHP_SELF'] ?>'>
    <p>Immagini consentite "jpg", "png", "bmp", "gif"</p>
    <p>:confused:
        <input name="image[]" type="file" size="40" multiple="multiple"/>   
        <input name="upload" type="submit" value="Carica immagini" />
    </p>
</form>
<p><?php echo $messaggio ?></p>

Grazie mille, funziona benissimo!
Però ho un altra domandina :?
L'immagine viene caricata perfettamente nella cartella images, io vorrei che quando l'immagine viene caricata nella cartella la sua stringa di url, il suo percorso per intenderci (images/immagine1.jpg ...images/fotoqui.jpg) venisse scritto nel record "imagine" della mia tabella "mytables", per poi così poterlo leggere e metterlo nella pagina html con il solito src="...

grazie ancora :D
 
fai una semlice insert quando il file è stato caricato
PHP:
if (is_uploaded_file($v)) {
    // spostiamo il file nella cartella immagini
    if (!move_uploaded_file($v, "$dir/$nomefile")) {
        $messaggio .= "<br/>Impossibile spostare il file $k";
    } else {

        $messaggio .= "<br/>Immagine $k caricata con successo";

        $sql = new mysqli("localhost", "root", "", "database");
        $query = "INSERT INTO mytables SET immagine = 'images/$nomefile'";
        $sql->query($query);
    }
} else {
    $messaggio .= "<br/>Errore nell'upload del file $k.";
}
 
fai una semlice insert quando il file è stato caricato
PHP:
if (is_uploaded_file($v)) {
    // spostiamo il file nella cartella immagini
    if (!move_uploaded_file($v, "$dir/$nomefile")) {
        $messaggio .= "<br/>Impossibile spostare il file $k";
    } else {

        $messaggio .= "<br/>Immagine $k caricata con successo";

        $sql = new mysqli("localhost", "root", "", "database");
        $query = "INSERT INTO mytables SET immagine = 'images/$nomefile'";
        $sql->query($query);
    }
} else {
    $messaggio .= "<br/>Errore nell'upload del file $k.";
}

Se includo la pagina con la connessione al db tanto per capirci
PHP:
include "connect_db.php"
prima, posso togliere la riga
PHP:
$sql = new mysqli("localhost", "root", "", "database");
giusto? però poi
PHP:
$sql->query($query);
??
 
fai una semlice insert quando il file è stato caricato
PHP:
if (is_uploaded_file($v)) {
    // spostiamo il file nella cartella immagini
    if (!move_uploaded_file($v, "$dir/$nomefile")) {
        $messaggio .= "<br/>Impossibile spostare il file $k";
    } else {

        $messaggio .= "<br/>Immagine $k caricata con successo";

        $sql = new mysqli("localhost", "root", "", "database");
        $query = "INSERT INTO mytables SET immagine = 'images/$nomefile'";
        $sql->query($query);
    }
} else {
    $messaggio .= "<br/>Errore nell'upload del file $k.";
}

Cmq provando questo codice, andando a vedere su phpmyadmin se non ha creato nessuna nuova riga con l'url...il db è restato intatto con i precedenti dati, come mai? O.o
 
ciao
intanto metti un var_dump per vedere come risulta la querystringa
PHP:
<?php
//....
 $sql = new mysqli("localhost", "root", "", "database");
        $query = "INSERT INTO mytables SET immagine = 'images/$nomefile'";
		var_dump($query);//e qui verifichi che venga scritta come dovrebbe
        $sql->query($query);
//....
?>
poi eventualmente prova ad usare la forma classica dell'insert
PHP:
$query="INSERT INTO mytables(immagine) VALUES('images/$nomefile')";
 
stampa anche eventuali errori modificando l'esecuzione della query cosi
PHP:
if(!$sql->query($query)) {
      echo $sql->error;
}
 
stampa anche eventuali errori modificando l'esecuzione della query cosi
PHP:
if(!$sql->query($query)) {
      echo $sql->error;
}

con la prima query e dati (file immagine =>tetto1.jpg),(tabella dove inserire=> images_immobili), (database=> immobile ) stampa questo errore:

string(64) "INSERT INTO immobile SET immagine = 'images_immobili/tetto1.jpg'" Field 'codice' doesn't have a default value

invece con la seconda query comprendenti anche VALUES stampa:

string(67) "INSERT INTO immobile(immagine) VALUES('images_immobili/tetto1.jpg')" Field 'codice' doesn't have a default value

cmq l'immagine nella cartella viene caricata, l'url non viene caricato nel db
 
ciao
piccolo dubbio visto l'errore.
posta il dump della tabella

Scusa per l'ignoranza, ma cosa sarebbe?
Ho la tabella con vari campi ( codice,nome,cognome,indirizzo, località,descrizione, IMMAGINE , ecc..) , il record codice è auto-incrementato e son tutti postati a NULL come inizio
 
ciao
intanto per dump si intende i dati della tabella es
codice int(19( primary key autoincrement
nome varchar(50) NULL
ecc...

codice è prymary key?
 
ciao
intanto per dump si intende i dati della tabella es
codice int(19( primary key autoincrement
nome varchar(50) NULL
ecc...

codice è prymary key?

tabellaSQL.jpg
così hai una panoramica piu rapida =)
 
Field 'codice' doesn't have a default value
questo errore vuol dire che il campo codice non puo essere nullo di coseguenza quando fai un insert devi specificarlo
Codice:
,codice = "", immagine = "" etc
e visto che tutti i campi della tua tabella sono NOT NULL ti tocca specificarli tutti
se ho capito cosa vuoi fare ti consiglio di creare una tabella immagini a parte dove inserirai l'immagine e il codice o il nick
 
questo errore vuol dire che il campo codice non puo essere nullo di coseguenza quando fai un insert devi specificarlo
Codice:
,codice = "", immagine = "" etc
e visto che tutti i campi della tua tabella sono NOT NULL ti tocca specificarli tutti
se ho capito cosa vuoi fare ti consiglio di creare una tabella immagini a parte dove inserirai l'immagine e il codice o il nick
Diciamo che la tabella è questa, ovviamente ho una form con tutti questi dati, tranne il codice.
Quindi se al bottone carica foto collego il bottone di invio dei dati nelle input dovrebbe funzionare giusto?
Stavo trattando separatamente la questione invio dati e invio foto, solo per prova e vedere bene i controlli da fare, alla fine sarà tutto in un'unica form.

ps: se per prova metto nell' INSER TO tutto i parametri ="" tranne quello dell'immagine =" 'images/$nomefile'" dovrebbe caricarmi una nuova riga nel db con tutti i dati vuoti tranne il record immagine giusto?

Posterò anche il codice con tutta la form tra poco ;)
 

Discussioni simili