• User

    funzione copy() in foreach

    Ciao ragazzi ho un problema con l'itrerazione della funzione copy con un foreach:
    Questo form invia delle informazioni alla pagina col foreach:

    codice PHP:
    <form action="nuovanotiziasubmit.php" method="post">
    <input type="hidden" name="unita[]" />
    Titolo <input type="text" name="titolo[]" /><br />
    Descrizione <input type="text" name="descrizione[]" /><br />
    Immagine <input type="file" name="immagine[]" /><br />
    Alt <input type="text" name="alt[]" /><br />
    Href <input type="text" name="href[]" /><br />
    <input type="submit" value="Invio" />

            <input type="hidden" name="unita[]" /> 
            Titolo <input type="text" name="titolo[]" /><br /> 
            Descrizione <input type="text" name="descrizione[]" /><br /> 
            Immagine <input type="file" name="immagine[]" /><br /> 
            Alt <input type="text" name="alt[]" /><br /> 
            Href <input type="text" name="href[]" /><br /> 
            <input type="submit" value="Invio" /> 
    
            <input type="hidden" name="unita[]" /> 
            Titolo <input type="text" name="titolo[]" /><br /> 
            Descrizione <input type="text" name="descrizione[]" /><br /> 
            Immagine <input type="file" name="immagine[]" /><br /> 
            Alt <input type="text" name="alt[]" /><br /> 
            Href <input type="text" name="href[]" /><br /> 
            <input type="submit" value="Invio" /> 
        </form>
    

    Come vedete ci sono delle parentesi graffe nel name delle input, questo fa capire al php della pagina successiva che si tratta di un'array (metodo già sperimentato ma senza la funzione dell'upload file)

    Questo è il php della pagina successiva

    codice PHP:
    $unit = $_POST['unita'];
    $titolo = $_POST['titolo'];
    $descrizione = $_POST['descrizione'];
    $immagine = $_FILES['immagine'];
    $alt = $_POST['alt'];
    $href = $_POST['href'];

    echo $immagine;

    foreach ($_POST['unita'] as $key => $value)
    {

    $path_imgup = "../img/inevidenza/";
    $path_img = "img/inevidenza/";

    copy($immagine[$key], $path_imgup . $immagine[$key]);

    $percorsonomeimg = $path_img . $immagine[$key];

    echo "unità " . $value . '<br />'; 
    echo "Titolo " . $titolo[$key] . '<br />'; 
    echo "Descrizione " . $descrizione[$key] . '<br />'; 
    echo "Immagine " . $percorsonomeimg . '<br />'; 
    echo "Alt " . $alt[$key] . '<br />'; 
    echo "Href " . $href[$key] . '<br /><br /><br />';
    

    ho provato con immagine[$value] invece di [$key] il fatto è che non ho mai gestito questa variabile in un foreach. la copia del file sul server non avviene ne tantomeno la stampa del percorso dell'immagine (le stampe sono ovviamente prove per vedere se le variabili sono piene, poii ci andrà l'insert)

    Qualche consiglio?
    Grazie a tutti


  • User Attivo

    Ciao,
    ti ho risposto su un altro forum, ma lo faccio volentieri anche qui, così magari può esser d'aiuto anche ad altri.

    Innanzitutto devi modificare il form, mettendo:

    [php]<form action="nuovanotiziasubmit.php" method="post" enctype="multipart/form-data">[/php]

    $_FILES conterrà i seguanti campi:
    [php]
    $_FILES['immagine']['name'][0]
    $_FILES['immagine']['name'][1]
    $_FILES['immagine']['name'][2]

    $_FILES['immagine']['type'][0]
    $_FILES['immagine']['type'][1]
    $_FILES['immagine']['type'][2]

    $_FILES['immagine']['tmp_name'][0]
    $_FILES['immagine']['tmp_name'][1]
    $_FILES['immagine']['tmp_name'][2]
    (questi sono i file temporanei da spostare con move_uploaded_file())

    $_FILES['immagine']['error'][0]
    $_FILES['immagine']['error'][1]
    $_FILES['immagine']['error'][2]

    $_FILES['immagine'][0]
    $_FILES['immagine'][1]
    $_FILES['immagine'][2]
    [/php]

    Per spostare il file non usare copy(), ma move_uploaded_file().
    All'interno del tuo ciclo foreach, al posto del'attuale copy(...) il codice sarà:
    [php]
    move_uploaded_file($_FILES['immagine']['tmp_name'][$key],$path_imgup.$_FILES['immagine']['name'][$key]);
    [/php]

    Fai solo attenzione alle varie casistiche che ti si possono presentare, come ad esempio errori nell'upload dei files o files con nome identico ad altri già presenti nella cartella.

    Alessandro