Non inserisce dati nel db

Kirsolo

Utente Attivo
17 Gen 2013
171
0
0
Prendendo spunto dal web, ho provato questo codice per il multiupload delle foto.
Unica cosa, i dati non riesco ad inserirli nel db e non so come mai.

tabella db:
id(autoincrement) | nome | prezzo | immagine | img2 | img3 | img4

lo script è:
PHP:
<?php
if(isset($_FILES['files'])){
    $errors= array();
	foreach($_FILES['files']['tmp_name'] as $key => $tmp_name ){
		$file_name = $key.$_FILES['files']['name'][$key];
		$file_size =$_FILES['files']['size'][$key];
		$file_tmp =$_FILES['files']['tmp_name'][$key];
		$file_type=$_FILES['files']['type'][$key];	
        if($file_size > 2097152){
			$errors[]='File size must be less than 2 MB';
        }	
		$sql = new mysqli("localhost", "root", "", "my_luca");
        $query = "INSERT into prova ('nome','prezzo','immagine','img2','img3','img4') VALUES('a','0','$file_name','a','a','a')";
        $desired_dir="user_data";
        if(empty($errors)==true){
            if(is_dir($desired_dir)==false){
                mkdir("$desired_dir", 0700);		// Create directory if it does not exist
            }
            if(is_dir("$desired_dir/".$file_name)==false){
                move_uploaded_file($file_tmp,"user_data/".$file_name);
            }else{									//rename the file if another one exist
                $new_dir="user_data/".$file_name.time();
                 rename($file_tmp,$new_dir) ;				
            }
            mysql_query($query);			
        }else{
                print_r($errors);
        }
    }
	if(empty($error)){
		echo "Success";
	}
}
?>


<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="POST" enctype="multipart/form-data">
	<input type="file" name="files[]" multiple/>
	<input type="submit"/>
</form>
 

Salvo Salvi

Utente Attivo
14 Nov 2012
230
0
0
Prova cosi:

INSERT into prova (nome,prezzo,immagine,img2,img3,img4) VALUES('a','0','$file_name','a','a','a')

Inoltre se non ti torna qualcosa puoi provare la query in phpmyadmin cosi capisci dove sbagli
 

Kirsolo

Utente Attivo
17 Gen 2013
171
0
0
Prova cosi:

INSERT into prova (nome,prezzo,immagine,img2,img3,img4) VALUES('a','0','$file_name','a','a','a')

Inoltre se non ti torna qualcosa puoi provare la query in phpmyadmin cosi capisci dove sbagli

Provato, niente la tabella sul db resta vuota.
Forse ce qualche altro errore? non capisco..
 

Salvo Salvi

Utente Attivo
14 Nov 2012
230
0
0
$sql = new mysqli("localhost", "root", "", "my_luca");
questo è fatto con mysqli
invece l'operazione per inviare i dati al server è fatto con mysql... credo che sia questo che da problemi.
Pero con la classe mysqli non ti so aiutare, io conosco la classe mysql e pdo
 

Kirsolo

Utente Attivo
17 Gen 2013
171
0
0
$sql = new mysqli("localhost", "root", "", "my_luca");
questo è fatto con mysqli
invece l'operazione per inviare i dati al server è fatto con mysql... credo che sia questo che da problemi.
Pero con la classe mysqli non ti so aiutare, io conosco la classe mysql e pdo

eh infatti se metto mysql al posto di mysqli mi dà errore:

Fatal error: Class 'mysql' not found in C:\Program Files (x86)\EasyPHP-12.1\www\form\demo.php on line 12
proprio quella riga
 

Salvo Salvi

Utente Attivo
14 Nov 2012
230
0
0
PHP:
// connessione al DBMS
$link = @mysqli_connect("localhost", "username", "password", "data");

// controllo sullo stato della connessione
if (mysqli_connect_errno())
{
  echo "Connessione fallita: " . die (mysqli_connect_error());
}

// query per la creazione di una tabella
if ($result =  @mysqli_query($link, "CREATE TABLE prova (id  INT(2), nome VARCHAR(50))"))
{
  echo "Tabella creata con successo.";
}

// liberazione della memoria dal risultato della query
@mysqli_free_result($result);
l'inserimento nel database prova questo cambiando i tuoi dati
 

Kirsolo

Utente Attivo
17 Gen 2013
171
0
0
PHP:
// connessione al DBMS
$link = @mysqli_connect("localhost", "username", "password", "data");

// controllo sullo stato della connessione
if (mysqli_connect_errno())
{
  echo "Connessione fallita: " . die (mysqli_connect_error());
}

// query per la creazione di una tabella
if ($result =  @mysqli_query($link, "CREATE TABLE prova (id  INT(2), nome VARCHAR(50))"))
{
  echo "Tabella creata con successo.";
}

// liberazione della memoria dal risultato della query
@mysqli_free_result($result);
l'inserimento nel database prova questo cambiando i tuoi dati

sn riuscito in un altro modo a farlo andare.
Ora ho un altro problema:
PHP:
<?php

// limite peso in byte 
$peso_file = 1024 * 1024;
// inizializziamo il messaggio
$messaggio = "Carica una o piu immagini, fino ad un massimo di 4 consentite:";
// estensioni ammesse
$estensioni = array("jpg", "png", "bmp", "gif");
// percosrso destinazione immagini la cartella deve esistere e il percorso deve essere corretto
$dir = "images_immobili";
// verifichiamo che sia stato premuto il submit
if (isset($_POST['submit'])) { // && $_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
	$cnt=0;
    foreach ($infoimages as $k => $v) {
	if ($cnt < 4) {
		++$cnt;
        // 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";
			}
	} else { $messaggio .= "<br/>Hai inserito più di 4 immagini";
		}
    }

}

avendo questo, e la mia query
PHP:
$query="INSERT INTO immobile(nome, ....., immagine, img2, img3,img4 ) 
						VALUES('$nome',.......,'images_immobili/$nomefile','X','Y','Z')";  
						var_dump($query);
						if(!$sql->query($query)) { 
							echo $sql->error; }

non riesco a inserire nel database diversi file, cioè soltanto l'ultimo che seleziono. Cosa dovrei mettere al posto di X Y Z ?
 

Salvo Salvi

Utente Attivo
14 Nov 2012
230
0
0
io di solito ci inserisco l'url del percorso di dove ho spostato le immagini cn la relativa estenzione, sennnò ci puoi inserire il file
 

Kirsolo

Utente Attivo
17 Gen 2013
171
0
0
io di solito ci inserisco l'url del percorso di dove ho spostato le immagini cn la relativa estenzione, sennnò ci puoi inserire il file

si come hai visto, per la prima immagine è l'url e nome immagine....il problema x le altre immagini non posso mettere $nome_file, xkè risulta la stessa immagine. Cosa devo mettere?
 

Kirsolo

Utente Attivo
17 Gen 2013
171
0
0
secondo me il tuo script è sbagliato (spero di sbagliarmi) poichè non vedo nessun ciclo foreach per esaminare le immagini una ad una.
Ti consiglio di guardarti i caricatori multipli gia pronti
vediti questo: http://www.jqueryitalia.org/caricamento-files-dinamico/
Ecco forse è quello il problema...cè da mettere un foreach per ognuna immagine forse e togliere il contatore $cnt , può essere una soluzione ??

ps: vorrei farlo tutto in php, anche perchè non conosco jquery...
 

Salvo Salvi

Utente Attivo
14 Nov 2012
230
0
0
Allora secondo me devi fare cosi

1 ricevi dati file ['tmp_name'] e ['name']

dopodiche dai vita a un ciclo foreach
a cui assegni il nome di ogni singolo file ad un array in questo modo
$n = "0";
foreach ( .... as ....) {
estrai nome file

$nome['$n'] = $time(). "nome del file";
$n++

} cosi che ad ogni file incrementi la n dando una array differente
dopodiche richiami i file tmp_name sempre nello stesso modo li sposti nella cartella e li salvi nel db.
Hai capito cosa intendo?
 

Kirsolo

Utente Attivo
17 Gen 2013
171
0
0
Allora secondo me devi fare cosi

1 ricevi dati file ['tmp_name'] e ['name']

dopodiche dai vita a un ciclo foreach
a cui assegni il nome di ogni singolo file ad un array in questo modo
$n = "0";
foreach ( .... as ....) {
estrai nome file

$nome['$n'] = $time(). "nome del file";
$n++

} cosi che ad ogni file incrementi la n dando una array differente
dopodiche richiami i file tmp_name sempre nello stesso modo li sposti nella cartella e li salvi nel db.
Hai capito cosa intendo?

Mi riusciresti a fare un esempio con 2 immagini? In modo da capir meglio, scusa ma sto imparando pian piano il linguaggio :$
 

Salvo Salvi

Utente Attivo
14 Nov 2012
230
0
0
PHP:
//CREAZIONE FILE ZIP
	
	$estrazione =  mysql_query('SELECT  max(id) FROM ordini');

$aumento =  mysql_result($estrazione,0);
$nomefile = $aumento + 1 ;

$nome_utente=htmlspecialchars ($_POST['nomefatt']);
	
	$lista = $_FILES['files']['tmp_name'];
	$bomba = $_FILES['files']['name']; 
//nuovo archivio
	 $archivia = new ZipArchive(); 
//do il nome al file
	$nome_file = $nomefile.".".$nome_utente .".zip"; 
//creo il file
	$archivia->open("../uploads/".$nome_file, ZIPARCHIVE::CREATE);  

//PRIMO PASSAGGIO
$n=0; 
foreach ($bomba as $estenzione) { 
    $info = pathinfo($estenzione);  
         $nome_del_file[$n] = $info['basename'];
    $n++; 
} 

 $n=0;
 $nn =0;
foreach ($lista as $nome) {

   $file = ($nome);

   
   /* $primonumeronome = rand(1,9999);
	$secondonumeronome = rand(1,9999);
	$terzonumeronome = rand(1, 9999);
	$quartonumeronome = rand (1, 99999);*/
	$nomefile = $nome_del_file[$n];
   
   
   
   $name[$nn]= $nomefile;
   move_uploaded_file($file, $nomefile); 
    $archivia->addFile($nomefile); 
	
	
$nn++;
	  $n++; 
 } 
$archivia->close(); 

 $n=0;
 $nn=0;
foreach ($bomba as $estenzione) { 

    $info = pathinfo($estenzione);  
    $estenzion[$n] = $info['extension'];
rename($name[$nn], "upload/".$nome_utente. $name[$nn] .rand(0,9)); 
  $n++;
  $nn++;
  
}


   

$url="http://mariostampa.it/uploads/".$nome_file;
Questo è uno script che creai un po di tempo fa guarda se ti riesce modificare questo
 

Kirsolo

Utente Attivo
17 Gen 2013
171
0
0
PHP:
//CREAZIONE FILE ZIP
	
	$estrazione =  mysql_query('SELECT  max(id) FROM ordini');

$aumento =  mysql_result($estrazione,0);
$nomefile = $aumento + 1 ;

$nome_utente=htmlspecialchars ($_POST['nomefatt']);
	
	$lista = $_FILES['files']['tmp_name'];
	$bomba = $_FILES['files']['name']; 
//nuovo archivio
	 $archivia = new ZipArchive(); 
//do il nome al file
	$nome_file = $nomefile.".".$nome_utente .".zip"; 
//creo il file
	$archivia->open("../uploads/".$nome_file, ZIPARCHIVE::CREATE);  

//PRIMO PASSAGGIO
$n=0; 
foreach ($bomba as $estenzione) { 
    $info = pathinfo($estenzione);  
         $nome_del_file[$n] = $info['basename'];
    $n++; 
} 

 $n=0;
 $nn =0;
foreach ($lista as $nome) {

   $file = ($nome);

   
   /* $primonumeronome = rand(1,9999);
	$secondonumeronome = rand(1,9999);
	$terzonumeronome = rand(1, 9999);
	$quartonumeronome = rand (1, 99999);*/
	$nomefile = $nome_del_file[$n];
   
   
   
   $name[$nn]= $nomefile;
   move_uploaded_file($file, $nomefile); 
    $archivia->addFile($nomefile); 
	
	
$nn++;
	  $n++; 
 } 
$archivia->close(); 

 $n=0;
 $nn=0;
foreach ($bomba as $estenzione) { 

    $info = pathinfo($estenzione);  
    $estenzion[$n] = $info['extension'];
rename($name[$nn], "upload/".$nome_utente. $name[$nn] .rand(0,9)); 
  $n++;
  $nn++;
  
}


   

$url="http://mariostampa.it/uploads/".$nome_file;
Questo è uno script che creai un po di tempo fa guarda se ti riesce modificare questo

Ho provato a modificare in questa maniera:
PHP:
...
$infoimages = array_combine($_FILES["image"]['name'], $_FILES["image"]['tmp_name']);
    // cicliamo le immagini
	$n=0;
    foreach ($infoimages as $k => $v) {
	if ($n < 4) {
        // nome del file
        $nomefile[$n] = strtolower($k);
		$n++;
        // controlliamo il peso immagine
        if (filesize($v) < $peso_file) {
            // recuperiamo l'estensione
            $estensionefile = pathinfo($nomefile[$n], 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[$n]")) {
                        $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";
			}
	} else { $messaggio .= "<br/>Hai inserito più di 4 immagini";
		}
    }
...

e
PHP:
$query="INSERT INTO prova(nome, prezzo,immagine, img2, img3,img4) 
						VALUES('$nome','$prezzo','Fotop/$nomefile[$n]','Fotop/$nomefile[$n]','b','c')";

gli errori che mi da sono:
Notice: Undefined offset: 1 in C:\Program Files (x86)\EasyPHP-12.1\www\provaForm.php on line 45

Notice: Undefined offset: 2 in C:\Program Files (x86)\EasyPHP-12.1\www\provaForm.php on line 45
tutto giusto

Notice: Undefined offset: 2 in C:\Program Files (x86)\EasyPHP-12.1\www\provaForm.php on line 93

Notice: Undefined offset: 2 in C:\Program Files (x86)\EasyPHP-12.1\www\provaForm.php on line 93

nb: ho fatto una prova con 2immagini
nb2: linea 45:$estensionefile = pathinfo($nomefile[$n], PATHINFO_EXTENSION);
lineai93: è quella della $query
 

Kirsolo

Utente Attivo
17 Gen 2013
171
0
0
Ho modificato la query mettendo.....VALUES('$nome','$prezzo','Fotop/$nomefile[0]','Fotop/$nomefile[1]','b','c')";

così nel db me li inserisce giustamente.

Unica cosa mi dà ancora errore sulla linea45 e le immagini non mi caricano nella cartella. come potrei fare?
 

Kirsolo

Utente Attivo
17 Gen 2013
171
0
0
ciao
prova a correggere la riga
PHP:
<?php 
//.....
if (!move_uploaded_file($v, "$dir/".basename($nomefile[$n])) {
//....
?>
Ciao,
ho risolto a modo mio smanettando un pò. Con .basename($nomefile[$n]), cosa fa?

Unica cosa che non so come risolvere è:
al massimo posso inviare 4 foto, altrimenti non le carica. Però se carico soltanto 2 o 3 o comunque meno di 4, mi da errore di offset per le immagini non caricate:

nel caso che inserisca solo 2 immagini :
PHP:
Notice: Undefined offset: 2 in C:\Program Files (x86)\EasyPHP-12.1\www\Forme.php on line 78
Notice: Undefined offset: 3 in C:\Program Files (x86)\EasyPHP-12.1\www\Forme.php on line 78
la linea 78 corrisponde alla linea della query.

PHP:
<?php
// limite peso in byte 
$peso_file = 1024 * 1024;
// inizializziamo il messaggio
$messaggio = "Carica una o piu immagini, fino ad un massimo di 4 consentite:";
// estensioni ammesse
$estensioni = array("jpg", "png", "bmp", "gif");
// percorso destinazione immagini la cartella deve esistere e il percorso deve essere corretto
$dir = "Fotop";
// verifichiamo che sia stato premuto il submit
if (isset($_POST['submit'])) { 
//************** CONTROLLO TESTO**********
$err="";//metti a vuoto una stringa  
    $nome=trim($_POST['nome']); //metto solo nome il titolo è simile 
    //reg_match('/^[a-z0-9]{5,15}/i' 
    if(!preg_match('/^[a-zA-Z]{2,20}$/', $nome)){//verifico che siano solo lettere min 2 max 20 
        $err.="non hai inserito il nome o nome non valido<br />";//concateno gli errori 
	} 
    $prezzo=trim($_POST['prezzo'])+0.0; 
    if($prezzo==0 || !is_numeric($prezzo)){ 
        $err.="prezzo non valido<br />"; 
    }
//*********FINE CONTROL TESTO**********************************
//################ CONTROLLO IMG #########################
if($err==""){ 
    // azzeriamo il messaggio
    $messaggio = "";
    // recuperiamo e uniamo le informazionei sulle immagini
    $infoimages = array_combine($_FILES["image"]['name'], $_FILES["image"]['tmp_name']);
    // cicliamo le immagini
	$n=0;
 foreach ($infoimages as $k => $v) {
	if ($n < 4) {
        // nome del file
        $nomefile[$n] = strtolower($k);
        // controlliamo il peso immagine
        if (filesize($v) < $peso_file) {
            // recuperiamo l'estensione
            $estensionefile = pathinfo($nomefile[$n], 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/".basename($nomefile[$n]))) {
                        $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";}
	  $n++;} 
		else { $messaggio .= "<br/>Hai inserito più di 4 immagini";}
 }	     
        echo "tutto giusto<br>"; 
        //inserimento in db e avviso su $err 
        $err="i tuoi dati sono stati inseriti<br />";
		$sql = new mysqli("localhost", "root", "", "my_luca");
		
						$query="INSERT INTO prova(nome, prezzo,immagine, img2, img3,img4) 
						VALUES('$nome','$prezzo','Fotop/$nomefile[0]','Fotop/$nomefile[1]','Fotop/$nomefile[2]','Fotop/$nomefile[3]')";  
						var_dump($query);//verifico come verrebbe la stringa
						if(!$sql->query($query)) { 
							echo $sql->error; }	
} 
    //mostri il messaggio 
   echo $err; 
    //e torni al form pulito dopo 3 secondi (content ='3;...) 
    echo "<meta http-equiv='Refresh' content='155; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>"; 
}
?>
 
Discussioni simili
Autore Titolo Forum Risposte Data
Monital [PHP] Insert into non inserisce tutti i dati PHP 1
M Menu a tendina che non inserisce dati nel db PHP 8
I non inserisce i dati nel db PHP 28
G form php connesso a database ma non inserisce dati PHP 5
DeAndreon Php non inserisce dati in db mysql PHP 37
MarcoGrazia [PDO] insert che non inserisce e non da errori PHP 1
Shyson Non inserisce datane Database PHP 1
Shyson Non inserisce nel db Database 1
felino Mac OS e Client Mail: Stato non in linea Mac e Software 1
I nome utente non esiste nel database PHP 1
M Drag and Drop non capisco le sequenze... Javascript 1
L Suggerimento Pagespeed per non vedenti HTML e CSS 0
F comando di inclusione file audio in I-Pad non funziona HTML e CSS 1
M Immagini non usate WordPress 0
B Non riesco a trovare i cognomi con i caratteri speciali in Access (Microsoft 365) MS Access 0
G Numero zero null non deve visualizzare nulla PHP 0
F Paypal _xclick IPN non risponde PHP 1
R Variabile non risconosciuta dentro una funzione PHP 1
C ACCESS Aprire maschera se valore non presente in una combo MS Access 7
E Alert non viene mostrato PHP 1
felino Hardisk WD SATA 1TB 3.5" non si avvia! Hardware 4
K Scrip non funzionante Javascript 1
R jquery che cambia css di un elemento non mi funziona sulla pagina caricata da ajax Ajax 5
zorro CREATE TABLE non funziona PHP 6
L tipo boolean non funzionante su mariadb (mysql). E codice php 7.4. PHP 0
Sevenjeak Php8 non carica estenzioni PHP 0
R query DELETE non cancella i record PHP 1
otto9due Input text: accetta solo numeri e non può essere vuoto. Javascript 9
G Non vedo frecce su forme Photoshop 2
G Il mio sito dopo aver abilitato l'ssl non visualizza le immagini con indirizzi senza ssl HTML e CSS 0
P jquery refresh div non funziona Javascript 0
N Problema SEO "L'URL non si trova su Google" SEO e Posizionamento 4
S Certificato SSL non funzionante Domini 0
zorro modulo di registrazione: funziona ma non sempre PHP 2
D Form contatti non funzionante HTML e CSS 0
MarcoGrazia Trovare record nel database partendo da id non sequenziali PHP 6
M Non ho rinnovato il mio sito su Aruba... Domini 1
T IP INFO NON FUNZIONA PHP 0
Shyson Google search non trova il mio sito SEO e Posizionamento 1
E Estrarre dati da doppia tabella, banale ma non sempre PHP 1
P Data scraping in PHP non funziona PHP 4
otto9due $_FILE non passa i dati dal form PHP 1
keyascii Non è mai troppo tardi Presentati al Forum 0
N dati tabella non presi PHP 1
P Pagina modifica record che non funziona PHP 0
Shyson AUTO_INCREMENT non si aggiorna MySQL 2
Shyson Codice wp-login non funziona PHP 2
S WORDPRESS NON FA INSTALLARE PIU NULLA WordPress 9
Shyson Non mi fa accedere al sito WordPress 12
N Non Autorizzato. Dovresti rimuovere il parametro customize_messenger_channel per visualizzare l'anteprima in frontend. WordPress 1

Discussioni simili