Estrarre il nome delle immagini dall'upload

  • Creatore Discussione Creatore Discussione Hackx
  • Data di inizio Data di inizio

Hackx

Utente Attivo
20 Ago 2013
108
0
16
Ciao a tutti :),

Allora questo è il mio codice html riguardante l'upload di 4 immagini distinte:

HTML:
<div class="form-group">
    <label for="immagine_2" class="col-sm-2 control-label">immagine 2</label>
    <div class="col-sm-10">
         <input type="File" name="immagine_2"> 
    </div>
  </div>
  <br/>  
  <div class="form-group">
    <label for="immagine_3" class="col-sm-2 control-label">immagine 3</label>
    <div class="col-sm-10">
         <input type="File" name="immagine_3"> 
    </div>
  </div>
  <br/>  
  <div class="form-group">
    <label for="immagine_4" class="col-sm-2 control-label">immagine 4</label>
    <div class="col-sm-10">
         <input type="File" name="immagine_4"> 
    </div>
 </div>

Per prelevare il nome dell'immagine ho usato $_FILES["file"]["name"].
Il problema è che nel database non mi scrive niente!
Avevo pensato di creare un array con tutti gli upload e poi estrarre i nome dalle diversi immagini .. ma purtroppo ho parecchia difficoltà nell'impostarlo.

Spero in una vostra spiegazione :)

(è da poco che ho iniziato a maneggiare le immagini con il PHP)

Vi ringrazio,
Andrea
 
ciao
intanto servirebbe la parte php, poi non so se l'hai scritto solo come eesempio ma
$_FILES["file"]["name"]
dovrebbe essere
$_FILES["immagine_2"]["name"] ecc...
poi per usare un array devi modificare gli input file
es.
HTML:
<input type="File" name="immagine[]">
 
Ciao borgo italia :),

Grazie mille per avermi risposto !

Non so se è corretto nel codice PHP ho fatto così:

PHP:
//imposto la variabile con il nome dell'immagine
$nomeimage = $_FILES["immagine_1"]["name"];

//e poi imposto l'if

if(mysqli_query ($conn, "INSERT INTO tabella_db (immagine_1) VALUES ('$nomeimage')){
echo "corretto";
} else {
echo "sbagliato";
}

Ringrazio,
Andrea
 
ciao
se è un copy/paste di quello che hai: attento agli apici (nota gli echo sono di colore rosso).
poi metti un var_dump per verificare la ricezione o posta cosa risulta

PHP:
//imposto la variabile con il nome dell'immagine
var_dump($_FILES["immagine_1"]["name"]);//poi lo togli
$nomeimage = $_FILES["immagine_1"]["name"];

//e poi imposto l'if

if(mysqli_query ($conn, "INSERT INTO tabella_db (immagine_1) VALUES ('$nomeimage')"){
echo "corretto";
} else {
echo "sbagliato";
}
 
Ultima modifica:
Ciao borgo italia :),

Ecco cosa mi restituisce dopo aver messo:

PHP:
var_dump($_FILES["immagine_1"]["name"]);//poi lo togli
$nomeimage = $_FILES["immagine_1"]["name"];

errori:
1) Notice: Undefined index: immagine_1 --> riga del var_dump
2) null
3) Notice: Undefined index: immagine_1 --> riga della variabile $nomeimage
4) corretto

Ti ringrazio ancora moltissimo,
Andrea

P.S.
Perdonami ma la questione degli apici non l'ho capita proprio.
Devo impostare gli apici in questo modo:

PHP:
echo 'parola';

Invece che in questo:

PHP:
echo "parola";
 
ciao
evidentemente non trasmette, mi viene un dubbio, nel tag form hai messo
<form action="pinco pallo.php" method="post" enctype="multipart/form-data">
cioe l'enctype?
poi per gli apici
no
hai dimenticato di chiuderli
if(mysqli_query ($conn, "INSERT INTO tabella_db (immagine_1) VALUES ('$nomeimage')"){

scusa dimenticavo
mi sono accorto ora che inizi da immagine_2, anche nella parte php devi mettere immagine_2 e non immagine_1
da quello che vedeo non hai un campo di input chiamato immagine_1
i nomi dei campi devono corrispondere alle chiavi che metti nel $_POST
 
Ultima modifica:
Ciao borgo italia :),

Il Primo problema sono riuscito a risolverlo :) ...mancava la parte dell'enctype e poi ho dato una raddrizzata generale al codice ;).

Ora però ho un problema identico solo in un form come questo:

Codice HTML:

HTML:
<form class="form-horizontal" role="form" action="controllo.php" id="form_offerte_veicoli" method="POST" enctype="multipart/form-data">
  <div class="form-group">
    <label for="nome" class="col-sm-2 control-label">nome*</label>
    <div class="col-sm-10">
      <input type="text" class="form-control" name="nome" placeholder="nome">
    </div>
  </div>
  <br/>
  <div class="form-group">
    <label for="cognome" class="col-sm-2 control-label">Cognome*</label>
    <div class="col-sm-10">
      <input type="text" class="form-control" name="cognome" placeholder="cognome">
    </div>
  </div>
  <br/>
  <div class="form-group">
    <label for="imm_1" class="col-sm-2 control-label">immagine 1</label>
    <div class="col-sm-10">
         <input type="file" name="imm_1"/> 
    </div>
  </div>
  <br/> 
  <div class="form-group">
    <label for="imm_2" class="col-sm-2 control-label">immagine 2</label>
    <div class="col-sm-10">
         <input type="file" name="imm_2"> 
    </div>
  </div>
  <br/> 
  <button style="margin-left:400px;width:150px; margin-top: 40px;" type="submit" class="btn btn-default">Invia</button>
</form>

codice PHP:

PHP:
<?php
include "../../../config.php";

//imposto la variabile con il nome dell'immagine
$imm_1 = (isset($_FILES["imm_1"]["name"]));
$imm_2 = (isset($_FILES["imm_1"]["name"])); 
		   
//recupero i dati dal form
$nome = $_POST['nome'];
$cognome= $_POST['cognome'];

if (mysqli_query ($conn, "INSERT INTO tabella_db (nome,cognome,imm_1,imm_2)
                  VALUES ('$nome','$cognome','$imm_1','$imm_2')") or die (mysqli_error ($conn)))
{
				  echo "dati memorizzati";
} else {

echo "problemi";
}

?>

Quando vado a testare il codice mi restituisce "dati memorizzati". Quando, in verità i nomi delle immagini non vengono memorizzati.

Come posso risolvere quest'altro problema :)

Ti ringrazio davvero moltissimo per tutti questi consigli !!!
Andrea
 
ciao
attento che stai usando male isset (http://it1.php.net/manual/en/function.isset.php)
PHP:
<?php
//...
$imm_1 = (isset($_FILES["imm_1"]["name"]));
$imm_2 = (isset($_FILES["imm_1"]["name"]));
//....
?>
isset ritorna true se la variabile esiste o false se non esiste
devi impostarlo così
PHP:
<?php
//... 
if(isset($_FILES["imm_1"]["name"])){
	$imm_1 = $_FILES["imm_1"]["name"]);
}
//....
?>
impara a usare il var_dump è uno degli strumenti utilissimi nel debug, es
PHP:
<?php
//...
$imm_1 = (isset($_FILES["imm_1"]["name"]));
var_dump($imm_1);
$imm_2 = (isset($_FILES["imm_1"]["name"]));
//....
?>
il var_dump ti avrevbbe restituito, ammesso che $_FILES["imm_1"]["name"] esista
cioè tipo variabile boeliana di valore true, che è tutt'unaltra cosa di
string(nn) "pinco_pallo.jpg"
cioè variabile tipo stringa lunga nn di valore pinco_pallo.jpg
cioè quello che dovrebbe contenere $_FILES["imm_1"]["name"]
 
Ciao borgo italia :),

Mi sto davvero impegnando nel trovare questa benedetta soluzione .. solo che ancora niente.

Grazie per la dritta "isset", non ne avevo idea che stavo sbagliando poiché ho sempre fatto in questo modo, ogni volta che mi imbattevo in un problema -undefined- ci mettevo un (isset()) senza pensarci due volte!

Ritornando a noi.. Ho modificato il mio codice in base ai tuoi consigli ed ecco qua:

PHP:
include "../../../config.php";

//imposto la variabile con il nome dell'immagine
if(isset($_FILES["imm_1"]["name"])){ 
    $imm_1 = $_FILES["imm_1"]["name"]; 
} 
var_dump($imm_1);------------------------------------------------------------------------------> 1

if(isset($_FILES["imm_1"]["name"])){ 
    $imm_2 = $_FILES["imm_1"]["name"]; 
} 
	   
//recupero i dati dal form
@$nome = $_POST['nome'];
@$cognome = $_POST['cognome'];

if (mysqli_query ($conn, "INSERT INTO in_vendita_veicoli (nome,cognome,imm_1,imm_2) 
                  VALUES ('$nome','$cognome','$imm_1','$imm_2')") or die (mysqli_error ($conn))) -------> 2 e 3
{
echo "dati memorizzati";
} else {

echo "problemi";
}

Ecco gli errori che ora mi restituisce:

1 - Undefined variable: imm_1
null

2 - Undefined variable: imm_1

3 - Undefined variable: imm_2

e il classico "dati memorizzati" ma giustamente il nome dell'immagine nel db non è presente!

Ringrazio ancora,
Andrea
 
ciao
ti posto lo schema, se provi funzia
PHP:
<?php
//dati di connessione
if(isset($_POST['invia'])){
	if(isset($_FILES["imm_1"]["name"])){ 
    	$imm_1 = $_FILES["imm_1"]["name"]; 
		var_dump($imm_1);
	}
	if(isset($_FILES["imm_2"]["name"])){ 
    	$imm_2 = $_FILES["imm_2"]["name"]; 
		var_dump($imm_2);
	}
	//poi dividi la query per verificare che venga giusta
	$q= "INSERT INTO in_vendita_veicoli (nome,cognome,imm_1,imm_2) VALUES ('$nome','$cognome','$imm_1','$imm_2')";
	var_dump($q);
	//if (mysqli_query ($conn, $q) or die (mysqli_error ($conn))){
	//ecc.....
}
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
    <!-- h saltato gli altri -->
    <p><input type="file" name="imm_1"/></p>
	<p><input type="file" name="imm_2"/></p>
    <p><input type="submit" name="invia" value="invia"></p>
</form>

da quello che capisco stai facendo un form da cui un utente carica delle immagini, ATTENTO ci vogliono dei controlli sicuri altrimenti qualcuno può insertiti un bel cancella_tutto.exe
 
Ciao borgo italia :),

Guarda non ti voglio stressare ancora :)!
Ho ancora un piccolo problema (però potrei provare a risolverlo da solo).. ovvero che, ora, il capo 'nome' e 'cognome' del 1o form non mi viene scritto nel DB.

Riepilogando...

1o file.php contiene tutto il form con l'action che rimanda tutto il controllo al file che tu mi hai postato nel messaggio precedente.

2o file.php è il controllo vero e proprio (codice messaggio precedente)

---------------------------------------------------------------------------------------------------------------------------

Ti faccio alcune domande dimmi se mi sbaglio.

1 - Il richiamo delle variabili (nome,cognome) può andar bene lì ?..poiché non mi viene scritto all'interno del DB.

PHP:
<?php 
// include il file config.php

//dati di connessione 
if(isset($_POST['invia'])){ 
    if(isset($_FILES["imm_1"]["name"])){  
        $imm_1 = $_FILES["imm_1"]["name"];  
        var_dump($imm_1); 
    } 
    if(isset($_FILES["imm_2"]["name"])){  
        $imm_2 = $_FILES["imm_2"]["name"];  
        var_dump($imm_2); 
    } 

//qua inserisco il richiamo della variabile nome 
$nome = $_POST['nome'];
$cognome = $_POST['cognome'];

    //poi dividi la query per verificare che venga giusta 
    $q= "INSERT INTO in_vendita_veicoli (nome,cognome,imm_1,imm_2) VALUES ('$nome','$cognome','$imm_1','$imm_2')"; 
    var_dump($q); 
    //if (mysqli_query ($conn, $q) or die (mysqli_error ($conn))){ 
    //ecc..... 
} 
?> 
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data"> 
    <!-- h saltato gli altri --> 
    <p><input type="file" name="imm_1"/></p> 
    <p><input type="file" name="imm_2"/></p> 
    <p><input type="submit" name="invia" value="invia"></p> 
</form>


2 - I controlli di sicurezza ?.. mi sono sempre posto questa domanda.

Ho letto svariati articoli riguardanti quest'argomento:
- SQL injection,
- Per le immagini mettere sempre i formati accettati (jpeg, jpg, png, ecc)
- modificare parametri PHP.ini (register_globals ecc ecc)

anche qui su mr webmaster ho trovato una guida ;) !

Però tu da programmatore esperto.. o sicuramente più esperto di me :) .. mi sapresti dare qualche altra dritta ??

Ti ringrazio moltissimo :)!!!
Andrea

P.S.
Ci tengo a dirti che ho un paio di giorni di fuoco e potrei non risponderti subito :) !
 

Discussioni simili