PHP upload dati ed immagine

  • Creatore Discussione Creatore Discussione Giaz
  • Data di inizio Data di inizio
  • Tag Tag
    php

Giaz

Nuovo Utente
3 Ott 2017
6
0
1
43
Buonasera, ho questo codice che carica testo ed immagine... la parte testuale funziona mentre l'immagine non viene caricata, però il messaggio dice eseguito con successo. Grazie.

PHP:
<?php
//includiamo il file di configurazione
@include "../config/config.php";
// 1) settiamo la cartella in cui fare l'upload
$cartella_upload ="../img/immagini";  
// 2) settiamo un array in cui indichiamo il tipo di file che consentiamo l'upload
// in questo esempio solo immagini  
$tipi_consentiti = array("gif","png","jpeg","jpg");    
// 3) settiamo la dimensione massima del file (1048576 byte = 1Mb)
$max_byte = 50000000;  // 50mb
//valorizziamo le variabili con i dati ricevuti dal form
if(isset($_POST['submit']) and isset($_FILES["dati_file"])){
  
  if(isset($_POST['autore'])){
    $autore = addslashes($_POST['autore']);
  }
  if(isset($_POST['titolo'])){
    $titolo = addslashes($_POST['titolo']);
  }
  if(isset($_POST['articolo'])){
    $articolo = addslashes($_POST['articolo']);
  }
// verifichiamo che l'utente abbia selezionato un file
  if(trim($_FILES["dati_file"]["name"]) == '') {
    echo 'Non hai selezionato nessun file!';
      }
// verifichiamo che il file è stato caricato
   else if(!is_uploaded_file($_FILES["dati_file"]["tmp_name"]) or $_FILES["dati_file"]["error"]>0) {
    echo 'Si sono verificati problemi nella procedura di upload!';
      }
// verifichiamo che il tipo è fra quelli consentiti
   else if(!in_array(strtolower(end(explode('.', $_FILES["dati_file"]["name"]))),$tipi_consentiti)) {
    echo 'Il file che si desidera uplodare non è fra i tipi consentiti!';
      }
// verifichiamo che la dimensione del file non eccede quella massima
   else if($_FILES["dati_file"]["size"] > $max_byte) {
    echo 'Il file che si desidera uplodare eccede la dimensione massima!';
      }
// verifichiamo che la cartella di destinazione settata esista
    else if(!is_dir($cartella_upload)) {
     echo 'La cartella in cui si desidera salvare il file non esiste!';
        }
// verifichiamo che la cartella di destinazione abbia i permessi di scrittura
    else if(!is_writable($cartella_upload)) {
     echo "La cartella in cui fare l'upload non ha i permessi!";
        }
// verifichiamo il successo della procedura di upload nella cartella settata
    else if(!move_uploaded_file($_FILES["dati_file"]["tmp_name"], $cartella_upload.$_FILES["dati_file"]["name"])) {
     echo 'Ops qualcosa è andato storto nella procedura di upload!';
      }
// altrimenti significa che è andato tutto ok
    else {
     echo 'Upload eseguito correttamente!';
      }
// popoliamo i campi della tabella articoli con i dati ricevuti dal form
$sql = "INSERT INTO articoli (art_autore, art_titolo, art_articolo, art_data, art_dati) VALUES ('$autore', '$titolo', '$articolo', now(), '$dati_file')";
// se l'inserimento ha avuto successo inviamo una notifica
    if (@mysql_query($sql) or die (mysql_error())){
     echo "Articolo inserito con successo.";
      }
    }else{
// se non sono stati inviati dati dal form mostriamo il modulo per l'inserimento
?>

<form enctype="multipart/form-data" action="insert_post.php" method="post">
Autore:<br>
<input name="autore" type="text" size="20"><br>
Titolo:<br>
<input name="titolo" type="text" size="30"><br>
Articolo:<br>
<textarea name="articolo" cols="40" rows="10"></textarea><br>
<input type="file" name="dati_file"><br>
<input name="submit" type="submit" value="Invia">
</form>
<?php } ?>
 
Ultima modifica di un moderatore:
ciao
prima alcune cose
non usare il silent @ gli errori vanno corretti non nascosti,
in php l'eleseif non si scrive else if ma elseif tutto attaccato
poi metti un var_dump per verificare se percorso e none file sono giusti
PHP:
//.......
// altrimenti significa che è andato tutto ok
    else {
     var_dump( $cartella_upload.$_FILES["dati_file"]["name"]);
     echo 'Upload eseguito correttamente!';
      }
//.......

inoltre quando scrivi codice racchiudilo tra gli appositi bccode o usa inserisci codice e sceli quale codice usare (generico o PHP o HTML)
 
Ciao, grazie della risposta e dei consigli... fatte le modifiche, tolto il silent@, errori nella scrittura e inserito il var_dump,
mostra il percorso dell'immagine ../img/immagini/nuovo.jpg ed il solito messaggio: Upload eseguito correttamente!Articolo inserito con successo.
 
ciao
ho provato il tuo script in locale, modificando solo $cartella_upload per farla puntare a una mia cartella, e funziona correttamente.

alcuni consigli:
usa <input type="file" name="pic" accept="image/*"> lasciando cmq il controllo lato server
e sposterei lato client anche il controllo sugli altri campio del form
 
ciao @jonnino2004
se intendi spostare anche lato client sono d'accordo, ma solo lato client no.
secondo me i controlli lato server sono indispensabili perche meno aggirabili e, soprattutto, quando si da la possibilità di caricare qualcosa in una cartella (foto...) e nel db (testi...).
poi una piccola osservazione sul controllo delle immagini o altri (docx, pdf...): conviene controllare oltra all'estenzione (jpg o gif ...) anche il type (image/jpeg ...)
 
Il problema di quello script è che nel campo "dati_file" nel database risulta vuoto, quindi non inserisce l'immagine e non posso richiamarla. ho provato anche varie modifiche alla struttura del db usando BLOB, varchar, etc etc...
Ho risolto modificando la logica dello script cosi, (datemi una vostra opinione):
$path_img = '../img/immagini/'; (settato nel config.php)
@makeThumb (funzione per le miniature, incluso con function.php)
e usando <?php echo $_SERVER['PHP_SELF']; ?> in action nel form, giusto per...


PHP:
<?php
//includiamo il file di configurazione
include "../config/config.php";
include('function.php');
//valorizziamo le variabili con i dati ricevuti dal form
if(isset($_POST['submit']) and isset($_FILES["imagefile"])){
 
  if(isset($_POST['autore'])){
    $autore = addslashes($_POST['autore']);
  }
  if(isset($_POST['titolo'])){
    $titolo = addslashes($_POST['titolo']);
  }
  if(isset($_POST['articolo'])){
    $articolo = addslashes($_POST['articolo']);
  }
  if(isset($_FILES['imagefile']['name'])){
    $nome = addslashes($_FILES['imagefile']['name']);
  }
  if(isset($_FILES['imagefile']['type'])){
    $tipo = addslashes($_FILES['imagefile']['type']);
  }

    $path = $path_img . stripslashes($nome);
 
// Creo una array con i formati accettati
  $tipi_consentiti = array("image/gif","image/jpeg","image/png");
// verifico che il formato del file sia tra quelli accettati
  if (@in_array($_FILES['imagefile']['type'], $tipi_consentiti)){
// copio il file nella cartella delle immagini
  @copy ($_FILES['imagefile']['tmp_name'], $path_img . $_FILES['imagefile']['name']);
// creo la miniatura
  @makeThumb($path_img,$path,$nome,$tipo);
}
// popoliamo i campi della tabella articoli con i dati ricevuti dal form
$sql = "INSERT INTO articoli (art_autore, art_titolo, art_articolo, art_data, nome, tipo) VALUES ('$autore', '$titolo', '$articolo', now(), '$nome','$tipo')";
// se l'inserimento ha avuto successo inviamo una notifica
    if (@mysql_query($sql) or die (mysql_error())){
     echo "Articolo inserito con successo.";
      }
    }else{
// se non sono stati inviati dati dal form mostriamo il modulo per l'inserimento
?>

<form enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
Autore:<br>
<input name="autore" type="text" size="20"><br>
Titolo:<br>
<input name="titolo" type="text" size="30"><br>
Articolo:<br>
<textarea name="articolo" cols="40" rows="10"></textarea><br>
Immagine:<br />
<input type="file" name="imagefile"><br>
<input name="submit" type="submit" value="Invia">
</form>
<?php } ?>
 
Ultima modifica:

Discussioni simili