Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    problema con array ed estrazione valori

    Ciao a tutti,
    ho un piccolo problemino che mi sta facendo dannare con uno script che fa l'upload multiplo di files. Vado subito al dunque. Il mio script invia tramite metodo post due files. Successivamente viene creato un ciclo che estrae i nomi fa una verifica che controlla se i nomi esistono già nella cartella e se va a buon fine carica i files.

    Siccome dovrei inserire i nomi dei files in un db vorrei poterli recuperare dall'array del ciclo e memorizzarli in due variabili distinte. Il problema è che con tutte le mie conoscenze sugli array [alquanto scarse] e verificando sul web e su questo forum, non riesco a capire come sta ragionando questo array.
    Provo a estrarre i nomi e a memorizzarli in due variabili che ho chiamato $img e $attach, ma invece non fa altro che memorizzare due volte il primo nome nella prima variabile e poi il secondo nome nella seconda variabile. Vi posto il codice nella speranza che qualcuno possa darmi una mano.

    Codice PHP:
    <form action="" method="post" enctype="multipart/form-data">


    file:
    <input type="file" name="file[]" />
    <input type="file" name="file[]" />
    <input type="submit" value="Send" />
    </p>
    </form>

    <?php
        
    foreach ($_FILES["file"]["error"] as $key => $error) {
        if (
    $error == UPLOAD_ERR_OK) {
            
    $tmp_name $_FILES["file"]["tmp_name"][$key];
            
    $name $_FILES["file"]["name"][$key];
            
            
    // controllo se il file esiste
            
    if (file_exists('../files/'.$_FILES["file"]["name"][$key])) {
            echo 
    $_FILES["file"]["name"][$key]."

    File già esistente sul server. Rinominarlo e riprovare.</p>"
    ;
          
          break;
        }
            
    $valore = array($_FILES["file"]["name"][$key]);
            
    $img $valore[0];
            
    $attach $valore[0];
            echo 
    'img= '.$img; echo 'attach= '.$attach;
            
    move_uploaded_file($tmp_name"../files/$name");
        }
    }
    ?>

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    128
    scusami ma non ho capito...

    a parte che nel form ti conviene mettere un if iniziale per verificare se il form è stato inviato, altrimenti parte la pagina con un errore....

    cmq a parte questo,

    tu qui

    Codice PHP:
    $img $valore[0];         
    $attach $valore[0]; 
    passi due volte la stessa variabile, è normale che img e attach siano la stessa cosa ad ogni giro..

    se fai un ciclo foreach, lui la prima volta analizza il primo file, e ti dice due volte la stessa cosa (perchè tu gli hai detto che img e attach sono uguali), poi fa il secondo giro e ti resituisce gli stessi valori (però per il secondo file)

  3. #3
    Ti ringrazio per la risposta.
    Ho provato a modificare lo script come segue
    Codice PHP:
    $img $valore[0];
    $attach $valore[1]; 
    però mi restituisce solo il valore di $valore[0] l'altro è vuoto. Non riesco a capire come individuare all'interno dell'array le posizioni dei valori che vorrei estrarre.

    Hai una soluzione al mio script? Secondo te come dovrei modificarlo?

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    128
    fammi solo capire, tu dici che

    Siccome dovrei inserire i nomi dei files in un db vorrei poterli recuperare dall'array del ciclo e memorizzarli in due variabili distinte
    ora, ad ogni giro che fai tu GIA' recuperi il nome del file (cioè la variabile valore[0])..ovviamente al primo giro recuperi il nome del primo file, al secondo giro il nome del secondo file.
    Quindi, posto che il codice è migliorabile, già raggiungi l'obiettivo di recuperare i nomi dei file.

    Ti basta quindi impostare un contatore (per esempio $i = 0) che ad ogni giro si incrementa (alla fine del ciclo metti $i++ e fai
    $nomefile[$i] = $valore[0];

  5. #5
    Grazie per l'aiuto,
    ho provato a fare come mi hai suggerito quindi

    Codice PHP:
    $i 0;
    foreach (
    $_FILES["file"]["error"] as $key => $error) {
        if (
    $error == UPLOAD_ERR_OK) {
            
            
    $i++;
            
    $tmp_name $_FILES["file"]["tmp_name"][$key];
            
    $name $_FILES["file"]["name"][$key];
            
            
    // controllo se il file esiste
            
    if (file_exists('../files/'.$_FILES["file"]["name"][$key])) {
            echo 
    $_FILES["file"]["name"][$key]."

    File già esistente sul server. Rinominarlo e riprovare.</p>"
    ;
          
          break;
        }
            
            
    $valore $_FILES["file"]["name"][$key];
            
    $nomefile[$i] = $valore;
            echo 
    'img= '.$nomefile;
            
    move_uploaded_file($tmp_name"../files/$name");
            
    $i++;
        }

    ma mi restituisce
    codice:
    img= Array img= Array
    , forse non ho posizionato gli elementi che mi hai suggerito nella giusta posizione? Ma poi come dovrei fare per memorizzare i nomi dei files in due variabili distinte?

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    128
    ha ragione il pc, $nomefile è un array, tu devi scrivere

    echo 'img= '.$nomefile[$i];


    dopodichè hai GIA' memorizzato i due nomi dei file in due variabili distinte, infatti $nomefile[0] conterrà il nome del primo file, mentre $nomefile[1] conterrà il nome del secondo

  7. #7
    Allora ho provato a fare come dici. Se io stampo la variabile
    Codice PHP:
     echo 'img= '.$nomefile[$i]; 
    mi restituisce perfettamente img= nomefile1 img= nomefile2

    Se a questo punto stampo
    Codice PHP:
    echo 'file1= '.$nomefile[0];
    echo 
    'file2= '.$nomefile[1]; 
    mi restituisce

    file1=
    file2= nomefile1
    file1=
    file2= nomefile1

    Sembra che non si riesca a individuare correttamente la posizione dei nomi all'interno dell'array.

  8. #8
    Un'altra cosa.
    Dal momento che poi devo inserire i nomi dei files come record all'interno di un database, è possibile individuare individuare all'interno dell'array $_FILES il valore corrispondente al nome dei due files passati?

    Se io ho un form del genere
    codice:
    <form action="" method="post" enctype="multipart/form-data">
    
    
    file:
    <input type="file" name="file[img]" />
    <input type="file" name="file[attach]" />
    <input type="submit" value="Send" />
    </p>
    </form>
    posso estrarre i nomi dei due valori e attribuirli ad una variabile?
    Ti spiego il problema: se un utente non dovesse caricare uno dei due files, e io estraessi i dati dalla variabile solo in base alla posizione, potrebbe capitare che se il primo valore è vuoto, nel database viene caricato il secondo dato al posto del primo.

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    128
    Così alla fine del ciclo ti restituisce correttamente i due nomi diversi. Ovviamente se carichi solo un file, $nomefile1 non sarà valorizzata.

    Quindi prima di fare l'inserimento ti conviene vedere se il campo file[0] del form è stato compilato, e ti valorizzi la variabile. Stessa cosa naturalmente per il secondo file

    Codice PHP:
    <form action="" method="post" enctype="multipart/form-data">


    file:
    <input type="file" name="file[]" />
    <input type="file" name="file[]" />
    <input type="submit" name="send" value="Send" />
    </p>
    </form>

    <?php

    if (isset($_POST["send"])) {
        
    $i 0;
    foreach (
    $_FILES["file"]["error"] as $key => $error) {
        if (
    $error == UPLOAD_ERR_OK) {
            
    $tmp_name $_FILES["file"]["tmp_name"][$key];
            
    $name $_FILES["file"]["name"][$key];
            
            
    // controllo se il file esiste
            
    if (file_exists('../files/'.$_FILES["file"]["name"][$key])) {
            echo 
    $_FILES["file"]["name"][$key]."

    File già esistente sul server. Rinominarlo e riprovare.</p>"
    ;
          
          break;
        }
            
    $valore = array($_FILES["file"]["name"][$key]);
            
    $nomefile[$i] = $valore[0];
            
           
    // echo 'img= '.$nomefile[$i];
           // move_uploaded_file($tmp_name, "../files/$name");
           
    $i++;
        }
    }

    echo 
    "nome file 1: " $nomefile[0] . "
    nome file 2: " 
    $nomefile[1];
    }
    ?>

  10. #10
    Grazie mille per l'aiuto, funziona tutto correttamente.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.