• User Attivo •

    La pagina incriminata è online? Possiamo vederla? O puoi postare la parte di pagina HTML dove c'è il form per l'upload delle immagini?


  • User Attivo •

    In primis mi scuso per il disturbo chesto arrecando, credevo si risolvesse in meno post.

    il form html è questo

    formula javascript per aggiungere campi:

    [html]
    <script>
    var i=2;
    function add(id)
    {
    campi = document.createElement('div');
    campi.id = "mine"; //assegna al div un nome
    document.getElementById(id).appendChild(campi);
    campi.innerHTML="<tr class="classetd"><td>Foto "+i+"</td><td><input type="file" name="foto[]" /></td></tr>";

    i++;
    }
    </script>
    [/html]form per il caricamento:
    [html]
    <form action="upload.php" method="get" enctype="multipart/form-data">
    <input type="hidden" name="id" value="1" />
    <table align="center">
    <tr>
    <td colspan="2"><img src="../images/login_up.jpg" /></td>
    </tr>
    <tr class="classetd">
    <td colspan="2"><div align="center"><span class="Stile1">Carica una nuova auto</span></div></td>
    </tr>
    <tr class="classetd">
    <td>Marca</td>
    <td><select name="Marca">
    <option value='ALFA ROMEO'>ALFA ROMEO</option>
    <option value='AUDI'>AUDI</option>
    <option value='BMW'>BMW</option>
    <option value='CHEVROLET'>CHEVROLET</option>
    <option value='CHRYSLER'>CHRYSLER</option>
    <option value='CITROEN'>CITROEN</option>
    <option value='FIAT'>FIAT</option>
    <option value='FORD'>FORD</option>
    <option value='HYUNDAI'>HYUNDAI</option>
    <option value='JAGUAR'>JAGUAR</option>
    <option value='JEEP'>JEEP</option>
    <option value='KIA'>KIA</option>
    <option value='LANCIA'>LANCIA</option>
    <option value='MERCEDES'>MERCEDES</option>
    <option value='NISSAN'>NISSAN</option>
    <option value='OPEL'>OPEL</option>
    <option value='PEUGEOT'>PEUGEOT</option>
    <option value='RENAULT'>RENAULT</option>
    <option value='SMART'>SMART</option>
    <option value='SUZUKI'>SUZUKI</option>
    <option value='TOYOTA'>TOYOTA</option>
    <option value='VOLKSWAGEN'>VOLKSWAGEN</option>
    <option value='VOLVO'>VOLVO</option>
    </select></td>
    </tr>
    <tr class="classetd">
    <td>Modello</td>
    <td><input name="Modello" type="text" /></td>
    </tr>
    <tr class="classetd">
    <td>Alimentazione</td>
    <td><select name="Alimentazione">
    <option value='Benzina'>Benzina</option>
    <option value='Diesel'>Diesel</option>
    <option value='GPL'>GPL</option>
    <option value='Metano'>Metano</option>
    <option value="'Benzina/GPL'">Benzina/GPL</option>
    <option value="'Benzina/Metano'">Benzina/Metano</option>
    </select></td>
    </tr>
    <tr class="classetd">
    <td>Cilindrata</td>
    <td><input name="cilindrata" type="text" /></td>
    </tr>
    <tr class="classetd">
    <td>Auto</td>
    <td><select name="Stato">
    <option value="Nuovo">Nuovo</option>
    <option value="Usato">Usato</option>
    </select></td>
    </tr>
    <tr class="classetd">
    <td>Immatricolazione</td>
    <td><input name="Anno" type="text" /></td>
    </tr>
    <tr class="classetd">
    <td>Carrozzeria</td>
    <td><input name="carrozzeria" type="text" /></td>
    </tr>
    <tr class="classetd">
    <td>Km Percorsi</td>
    <td><input name="km" type="text" /></td>
    </tr>
    <tr class="classetd">
    <td>Colore</td>
    <td><input name="colore" type="text" /></td>
    </tr>
    <tr class="classetd">
    <td>Numero Proprietari</td>
    <td><input name="proprietari" type="text" /></td>
    </tr>
    <tr class="classetd">
    <td>Prezzo ?</td>
    <td><input name="Prezzo" type="text" /></td>
    </tr>
    <tr class="classetd">
    <td>Garanzia</td>
    <td><input name="garanzia" type="text" /></td>
    </tr>
    <tr class="classetd">
    <td>Accessori</td>
    <td><textarea cols="30" rows="4" name="accessori"></textarea></td>
    </tr>
    <tr class="classetd">
    <td>Foto 1</td>
    <td><input type="file" name="foto[]" /></td>
    </tr>
    <tr>
    <td colspan="2">
    <div id="prova"> </div>
    </td>
    </tr>
    <tr>
    <td colspan=2><input type="button" value="aggiungi" onclick="javascript:add('prova');">
    </td>
    </tr>
    <tr class="classetd">
    <td colspan="4"></td>
    </tr>
    <tr class="classetd">
    <td colspan="4"><div align="center">
    <input type="submit" value="carica" />
    </div></td>
    </tr>
    <tr>
    <td colspan="2"><img src="../images/login_down.jpg" /></td>
    </tr>
    </table>
    </form>
    [/html]pagina upload.php

    [php]
    <?php
    $percorso = "../foto_mod/";

    include("../accesso/dati_accesso.php");
    include("../accesso/dati_accesso_ftp.php");

    $query= "SELECT id FROM db_mod ORDER BY id DESC LIMIT 0,1";
    $result= mysql_query($query);
    $row= mysql_fetch_array($result);
    $cartella = $row[id] + 1;
    

    mkdir($percorso.$cartella, 0777);
    $indice_cartella = 1;
    foreach ($_FILES['foto'] as $file) {
    $file_corrente = $file['tmp_name'];
    mkdir($percorso.$cartella."/".$indice_cartella."/", 0777);
    $file_da_caricare = $file_corrente;
    $dove_caricare = "foto_mod/".$cartella."/".$indice_cartella."/";

    $upload = ftp_put($ftp_connessione, $dove_caricare, $file_da_caricare, FTP_BINARY);             
                    $indice_cartella++;    
            
    
    }
    ftp_quit($ftp_connessione); 
    

    ?>
    <?php
    $Alimentazione = $_POST['Alimentazione'];
    $Modello = $_POST['Modello'];
    $Marca = $_POST['Marca'];
    $cilindrata = $_POST['cilindrata'];
    $immatricolazione = $_POST['Anno'];
    $Stato = $_POST['Stato'];
    $Prezzo = $_POST['Prezzo'];
    $colore = $_POST;
    $carrozzeria = $_POST['carrozzeria'];
    $km = $_POST['km'];
    $proprietari = $_POST['proprietari'];
    $garanzia = $_POST['garanzia'];
    $accessori = $_POST['accessori'];
    if($Prezzo<=5000){ $cat_prezzo=1;}
    elseif($Prezzo>5000 and $Prezzo<=10000){ $cat_prezzo=2;}
    elseif($Prezzo>10000 and $Prezzo<=15000){ $cat_prezzo=3;}
    elseif($Prezzo>15000 and $Prezzo<=25000){ $cat_prezzo=4;}
    elseif($Prezzo>25000 and $Prezzo<=40000){ $cat_prezzo=5;}
    else{$cat_prezzo=6;}

    ?>
    <?php

    $query2 = "INSERT INTO db_mod (id, Alimentazione, Modello, Marca, cilindrata, immatricolazione, Stato, Prezzo, colore, carrozzeria, km, proprietari, garanzia, accessori, cat_prezzo) VALUES ('$cartella', '$Alimentazione', '$Modello', '$Marca', '$cilindrata', '$immatricolazione', '$Stato', '$Prezzo', '$colore', '$carrozzeria', '$km', '$proprietari', '$garanzia', '$accessori', '$cat_prezzo')";
    $result2 = mysql_query($query2);

    echo "file corrente: " .$file_corrente. "<br>";
    echo "file da caricare: " .$file_da_caricare. "<br>";
    echo "dove caricare: " .$dove_caricare. "<br>";
    ?>

    [/php]

    Gli ultimi tre echo soon delle mie prove per vedere se arrivano bene i valori. Il form non credo abbia problemi perchè quando reindirizza a upload.php vedo che nella barra dell indirizzo c'è upload.php?foto[]=foto.jpg&foto[]=foto2.jpg ecc ecc


  • User Attivo •

    Ho notato adesso i vari $_post che ho dimenticato di cambiare essendo inviati tramite GET.

    Non credo comunque che sia quello l'errore o sbaglio?


  • User Attivo •

    Invece penso proprio di sì (o quantomento è uno dei problemi...) - le immagini si possono inviare solo tramite "POST", prova a cambiare quello e facci sapere


  • User Attivo •

    Ho cambiato e i messaggi di errore sono diversi

    Warning: ftp_put() expects parameter 3 to be string, array given in /web/htdocs/w w w .xxxx.it/home/blu/riservata/upload.php on line 19

    Warning: ftp_put() expects parameter 3 to be string, array given in /web/htdocs/w w w .xxxxx.it/home/blu/riservata/upload.php on line 19

    Warning: ftp_put() expects parameter 3 to be string, array given in /web/htdocs/w w w .xxxxx.it/home/blu/riservata/upload.php on line 19

    Warning: ftp_put() expects parameter 3 to be string, array given in /web/htdocs/w w w.xxxxxx.it/home/blu/riservata/upload.php on line 19

    Warning: ftp_put() expects parameter 3 to be string, array given in /web/htdocs/w w w.xxxxx.it/home/blu/riservata/upload.php on line 19

    file corrente: Array
    file da caricare: Array
    dove caricare: foto_mod/18/5/

    linea 19:
    $upload = ftp_put($ftp_connessione, $dove_caricare, $file_da_caricare, FTP_BINARY);

    ho provato a caricare solo 2 immagini ma ha creato 5 cartelle


  • Super User •

    Scusa un secondo... guardando bene il tuo codice ho notato una cosa:

    [php]
    mkdir($percorso.$cartella."/".$indice_cartella."/", 0777);
    [/php]

    assomiglia molto a:

    [php]
    $dove_caricare = "foto_mod/".$cartella."/".$indice_cartella."/";
    [/php]

    Dato che mkdir crea la cartella in LOCALE, e tu copi il file tramite ftp in un host che non vedo... stai usando le funzioni ftp per spostare i file nel tuo server stesso?


  • Super User •

    PS: quando ti ritrovi array che non sai cosa contengono, prova a farne un printr per mostrarne i contenuti.

    Ora, io non ho mai usato la sintassi "campo[]" nei form, sinceramente non sapevo nemmeno che si potesse usare, e per queste cose ho sempre fatto dei workaround in js XD

    Tuttavia... potrebbe anche darsi ( non lo so, avanzo un'ipotesi ), che in questi casi, l'array $_FILES non sia strutturato così:

    
    $_FILES['campo'][0]['tmp_name'];
    ...
    
    

    ovvero come hai supposto tu, ma in questo modo:

    
    $_FILES['campo']['tmp_name'][0];
    ...
    
    

    In questi casi comunque ti conviene sempre esaminare le cose che non conosci, risparmi un sacco di tempo...


  • User Attivo •

    Scusa non avevo notato la pagina 2 del post. i file sono caricati dal pc, tramite form in html , sul server. Ma non capisco dove sia l'errore adesso non incrementa più nemmeno $indice_cartella alla fine del ciclo


  • Super User •

    Lo script viene eseguito in locale o sul server?

    Nel secondo caso, devi usare la funzione move_uploaded_file per spostare il file, e tutto quell'ambaradan con le ftp non è necessario ( o meglio, non ha senso ).


  • User Attivo •

    Niente, proprio non ci riesco. Sono arrivata a questo

    [php]
    <?php
    $percorso = "../foto_mod/";

    include("../accesso/dati_accesso.php");

    $query= "SELECT id FROM db_mod ORDER BY id DESC LIMIT 0,1";
    $result= mysql_query($query);
    $row= mysql_fetch_array($result);
    $cartella = $row[id] + 1;
    

    mkdir($percorso.$cartella, 0777);
    for($i=0;$i<count($_FILES['foto']);$i++){
    mkdir($percorso.$cartella."/".$i."/", 0777);
    $dove_caricare = "foto_mod/".$cartella."/".$i."/";
    move_uploaded_file($_FILES['foto']['tmp_name']."['".$i."']", $dove_caricare.$_FILES['foto']['name']."['".$i."']");
    echo "cartella: " .$i. "<br>";
    }
    ?>
    [/php] ma il risultato è sempre lo stesso, cioè mi crea sempre 5 cartelle anche se carico due foto,e queste cartelle sono vuote.


  • User Attivo •

    Uhm, prova qualcosa tipo:
    [php]
    for($i=0; $i < count($_FILES['foto']); $i++) {
    if ($_FILES['foto']* > 0) {
    mkdir($percorso.$cartella."/".$i."/", 0777);
    $dove_caricare = "../foto_mod/".$cartella."/".$i."/";
    move_uploaded_file($_FILES['foto']['tmp_name'], $dove_caricare . $_FILES['foto']['name']);
    echo "cartella: " .$i. "<br>";
    }
    }
    [/php]
    Vedi un po' come va...


  • User Attivo •

    Così mi crea solo la cartella principale senza quelle interne e senza foto. Se elimino l' if() mi crea come prima la cartella principale e 5 sottocartelle vuote


  • User Attivo •

    Senti, come suggeriva qualcuno prima del ciclo for metti un:
    [php]echo "<pre>";
    print_r($_FILES);
    echo "</pre>";
    for($i=0; $i < count($_FILES['foto']); $i++) {
    ...
    [/php]
    e facci sapere cosa viene scritto...


  • User Attivo •

    Ora provo a fare come dici tu. Nel frattempo ho fatto:

    [PHP]
    foreach ($_FILES['foto'] as $valore) {
    echo "Valore : $valore[0]<br>";
    }
    [/PHP]
    e mi esce, provando a caricare una sola immagine,

    Valore : mazda.jpg
    Valore : image/jpeg
    Valore : /tmp/phprtUIPv
    Valore : 0
    Valore : 242561

    ecco spiegato le 5 cartelle che escono fuori


  • User Attivo •

    come dici tu esce

    [HTML]
    Array
    (
    [foto] => Array
    (
    [name] => Array
    (
    [0] => mazda.jpg
    [1] => cinquecento.jpg
    )

            [type] => Array
                (
                    [0] => image/jpeg
                    [1] => image/jpeg
                )
    
            [tmp_name] => Array
                (
                    [0] => /tmp/phppptDYE
                    [1] => /tmp/phpaZyqha
                )
    
            [error] => Array
                (
                    [0] => 0
                    [1] => 0
                )
    
             => Array
                (
                    [0] => 242561
                    [1] => 119589
                )
    
        )
    

    )

    [/HTML]


  • Super User •

    Eh, allora avevo azzeccato come veniva gestito l'array 🙂 Tral'altro te ne sei accorta tu stessa anche solamente dopo il primo tentativo che hai fatto ( il for con l'echo del $valore[0] ). Sostituisci il tuo ciclo for con questo:

    [PHP]
    //for($i=0;$i<count($_FILES['foto']);$i++){
    for($i=0;$i<count($_FILES['foto']);$i++){ // Vedi nota 1
    mkdir($percorso.$cartella."/".$i."/", 0777);
    $dove_caricare = "foto_mod/".$cartella."/".$i."/";
    //move_uploaded_file($_FILES['foto']['tmp_name']."['".$i."']", $dove_caricare.$_FILES['foto']['name']."['".$i."']");
    move_uploaded_file($_FILES['foto']['tmp_name'], $dove_caricare.$_FILES['foto']['name']); // Vedi nota 2
    echo "cartella: " .$i. "<br>";
    }
    [/PHP]

    1. Ricordati come viene gestito l'array. Nell'array $_FILES['foto'] hai i campi tmp_name, name, size e gli altri... Tu qui imposti il ciclo per terminare dopo tot ripetizioni... ripetizioni che però sono riferite al numero dei CAMPI, non al numero dei FILES... Per questo, al posto di $_FILES['foto'] dovresti mettere $_FILES['foto']['tmp_name'] o $_FILES['foto'] o qualunque altro campo, in quanto è all'interno del terzo sub-array che trovi i files.

    2. move_uploaded_file($_FILES['foto']['tmp_name']."['".$i."']", $dove_caricare.$_FILES['foto']['name']."['".$i."']");

    Questa non ha senso sintatticamente parlando: $_FILES['foto']['tmp_name']."['".$i."']" --> $_FILES['foto']['tmp_name']*

    Con i punti tu concatenavi le stringhe, mentre dovevi andare in profondità nell'array, l'idea comunque era giusta 🙂

    Ora dovrebbe andare.


  • User Attivo •

    Oddio funziona. Davvero non so come ringraziarvi non ci sarei mai arrivata da sola. Birra per tutti stasera!


  • Super User •

    Figurati, spero che al di là del codice pronto hai capito perchè non funzionava, almeno tutto questo sarà servito a qualcosa XD