• User Attivo

    selezionare solo alcuni parametri da $_get

    Salve a tutti, magari è banale ma non ci riesco. Non ho trovato nulla di simile nel forum

    Mettiamo che ho un una stringa cosi

    pagina.php?nome=laura&cognome=v&foto=foto1.jpg&foto2=foto2.jpg&foto3=foto3.jpg

    devo contare e prendere solo foto1 foto2 e foto3 per creare le rispettive cartelle e salvarle

    come posso fare?

    Il numero di foto non è sempre lo stesso


  • User

    Forse ho capito male la domanda, in questi casi basta usare $_GET['foto1'], $_GET['foto2'] ecc.

    Ma poi vuoi creare file e cartelle in base ai parametri passati via GET? Occhio che dal punto di vista della sicurezza ti stai buttando in una situazione alquanto complicata..


  • User Attivo

    Si ho specificato sotto che non si conosce il numero preciso di foto quindi non posso fare manualmente $_get['foto1'] $get['foto2'] servirebbe uno script che conta in automatico quante variabili che iniziano con "foto" gli sono stati inviati tramite get cosi se sono 3 crea 3 cartelle se sono 56 crea 56 cartelle e in ognuna di esse c è la rispettiva foto


  • User

    Be se solo quei parametri hanno il nome che inizia con "foto" (seguito da numero) puoi fare un ciclo

    [php]while(list($chiave,$valore)=each($_GET)){
    if(substr($chiave,0,4)=='foto'){
    $nome_file = $valore;
    //elabora il file
    }
    }[/php]


  • User Attivo

    Grazie, se scendi a caserta birra pagata anche per te :bigsmile:


  • User Attivo

    Io userei un array:
    pagina.php?nome=laura&cognome=v&foto[]=foto1.jpg&foto[]=foto2.jpg&foto[]=foto3.jpg

    così poi nel tuo PHP puoi fare:
    [php]foreach ($_GET['foto'] as $nome_file) {
    ... qui puoi lavorare con $nome_file
    }[/php]


  • User Attivo

    Birra anche per SEO tanto non le pago.
    Provo le due soluzioni e vi faccio sapere. Ciao e grazie


  • User Attivo

    [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 ($_GET['foto'] as $nome_file) {
    mkdir($percorso.$cartella."/".$indice_cartella."/", 0777);
    $file_corrente = $_FILES['foto']['tmp_name'];
    $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]Scusate, ho cercato di applicare le due soluzioni ma ottengo solo delle cartelle vuote, dove sbaglio?


  • User Attivo

    Immagino che tu voglia fare l'upload di più di un file, giusto? Allora devi fare nell'HTML:
    [html]<input type="file" name="foto[]">
    <input type="file" name="foto[]">[/html]tante volte quanti vuoi che siano i campi di input immagine

    Poi nello script che fa l'upload fai:
    [php]
    foreach ($_FILES['foto'] as $file) {
    $file_corrente = $file['tmp_name'];
    ... (il resto rimane uguale) ...
    }[/php]

    P.S.: non testata e scritta dopo una lunga giornata fra bimbi e lavoro, ergo ci sono buone possibilità che sia un po' sbagliata, ma la strada è quella...


  • User Attivo

    Mi dice

    Warning: Invalid argument supplied for foreach() in /web/htdocs/w w w.xxxxxxx.it/home/blu/riservata/upload.php on line 13

    La linea 13 è

    foreach ($_FILES['foto'] as $file) {


  • 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.