Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 31
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    64

    Far visualizzare ultimo inserimento

    Buongiorno a tutti,
    torno a chiedere il vostro aiuto...

    Mi chiedevo se partendo da questo codice

    codice:
    <?php
    	
    // Nome della cartella
    $car = 'img/eventi/';
    
    // Opendir è la funzione per aprire la cartella
    $handle = opendir($car);
    
    $ff = array();
    $date = array();
    
    // Ciclo la cartella
    while (false !== ($files = readdir($handle)))
    {
        
        if ($files != '.' && $files != '..'){ 
         $ff[filemtime("img/eventi/".$files)] = $files;
         $date[] = filemtime("img/eventi/".$files);
        }
           
    		
    
    }
    rsort($date);
    $count = 0;
    while($count <= count($ff)){
    
    		echo (''.$ff[$date[$count]].'
    ');
    
    $count++;
    }
    ?>
    è possibile far stampare a video solo l'ultimo elemento caricato nella cartella, magari per un determinato lasso di tempo.
    Il mio scopo sarebbe quello di fare un moduletto che visualizzi l'ultimo evento che si è tenuto...Una sorta di parte dedicata alle ultime news, diciamo...
    Se per caso ci sono altre discussioni su questo argomento qui nel forum, forse non sono riuscita a trovarle, chiedo venia, potreste indicarmele?

    Grazie mille a tutti!

  2. #2
    Se intendi, ultimo inserimento effettuato da colui che carica il DB per ultimo, c'è la funzione MYSQL_INSERT_ID(), che ovviamente deve essere invocata nello stesso script in cui precedentemente è stata eseguita una query di INSERT.

    Se invece intendi che un utente possa di default visualizzare l'ultimo articolo inserito, in una lista di articoli, ti basta ordinare i risultati della query in ordine decrescente e limitare la query a 1 solo risultato.

    Codice PHP:
    SELECT idtitolonews
    FROM nome_tabella
    ORDER BY id DESC
    LIMIT 1 
    Se invece non usi un DB, ma leggi da foglio elettronico, ti conviene usare la funzione FILE().
    Questa funzione legge il file sorgente e, per ogni a capo crea un rigo in un array.
    Puoi usare le funzioni di ordinamento e manipolazione di un array per recuperare l'ultimo inserimento.
    Tutto questo dipende anche dal metodo che hai usato per scrivere i dati nel file di testo.

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    64
    mmmh...mumble...
    innanzitutto ti ringrazio alcio74 della veloce risposta, di cui ahimé ci ho capito poco... scusa, sono una frana ...

    In realtà quel codice fa riferimento ad una cartella e i file nella cartella vengono caricati tramite questo codice senza l'uso di un database:

    codice:
    <?php
    
    
    $nomefoto = $_POST['nomefoto'];
    
    
    if(($_SESSION['userses_CM'] == '')&&($nome!='')&&($link!='')&&($nomefoto!='')){
    	header("Location: index.php");
    }else{
    
    	include("sql.php");
    	
    	$target_path = "img/eventi/";
    	
    	$insnome = basename( $_FILES['uploadedfile']['name']);
    	$target_path = $target_path.basename( $_FILES['uploadedfile']['name']); 
    	
    	
    	if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
    		echo "The file ".  basename( $_FILES['uploadedfile']['name'])." has been uploaded";
    		connect_db("********");
    		
    		$qr1 = "INSERT INTO `eventi` (`id`, `titolo`, `foto`) VALUES (NULL,'".$nomefoto."' , '".$link."', '".$descrizione."', '".$insnome."');";
    		$qury1 = mysql_query($qr1);
    		
    		unlink_db();
    		
    		header("Location: inserEventi.php");
    	} else{
    		echo "There was an error uploading the file, please try again!";
    		header("Location: inserEventi.php");
    	}
    
    }
    ?>
    Mi chiedevo se c'è un modo per rilevare l'ultimo file caricato in cartella e visualizzarlo...sto chiedendo forse una bestialità?

    Grazie mille

  4. #4
    Parto da una premessa: un applicativo di questo tipo sarebbe meglio basarlo su un db e quando gli eventi/immagini saranno molti un applicativo come quello che hai realizzato te diventerà molto lento: se avrai 1000 eventi/immagini dovrai leggerle tutte... anche per estrarre solo l'ultima.

    Venendo al tuo caso:
    Codice PHP:
    <?php
        
    // Nome della cartella
    $car 'img/eventi/';

    // Opendir è la funzione per aprire la cartella
    $handle opendir($car);

    $ff = array();
    $date = array();

    // Ciclo la cartella
    while (false !== ($files readdir($handle)))
    {
        if (
    $files != '.' && $files != '..'){ 
         
    $ff[filemtime("img/eventi/".$files)] = $files;
         
    $date[] = filemtime("img/eventi/".$files);
        }
           
    }

    ksort($ffSORT_NUMERIC);
    echo 
    $ff[0];
    PS: ho scritto questo messaggio prima di leggere quello precedente. Sorry
    http://www.miniscript.it
    Se ti sono stato di aiuto in qualche modo in questo forum iscriviti alla fan page di Miniscript - il mio blog di programmazione web.

  5. #5
    C'è una funzione chiamata FILECTIME() che fa al caso tuo.
    Solo che, mi domando: se hai un DB in cui inserisci un articolo, a cui presumibilmente passi anche una immagine di complemento, perché ti vai a rovinare l'esistenza interrogando il filesystem del server dove risiede lo script???
    Inserisci il nome del file in una apposita colonna e recuperi tutte le informazioni da lì!
    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    64
    Grazie ragazzi. Scusate se sono scomparsa, ma ho avuto problemi a internet...

    Studio, provo e vi tengo informati!

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    64
    Originariamente inviato da alcio74
    C'è una funzione chiamata FILECTIME() che fa al caso tuo.
    Solo che, mi domando: se hai un DB in cui inserisci un articolo, a cui presumibilmente passi anche una immagine di complemento, perché ti vai a rovinare l'esistenza interrogando il filesystem del server dove risiede lo script???
    Inserisci il nome del file in una apposita colonna e recuperi tutte le informazioni da lì!
    Il problema è che non so come si faccia a creare uno script per far inserire gli eventi (che sono solo file PDF) in un database, Alcio... E allora, per non complicarmi troppo la vita, ho pensato di farglieli caricare direttamente in una cartella e finirla lì...

    Ho guardato la funzione FILECTIME, ma quella se non ho capito male restituisce la data in cui è stato modificato un file, non l'ultimo file inserito...ho forse capito male?

    Abbiate tanta pazienza, ma col php ci acchiappo poco e in più questo lavoro l'ho fatto quest'estate, quindi mi devo anche ricordare tutto quello che ho fatto...

    Grazie mille del vostro prezioso supporto.

  8. #8
    Cito Wikipedia:
    http://it.wikipedia.org/wiki/Inode
    Nei sistemi Unix un inode è una struttura dati sul file system che archivia le informazioni base dei file, delle directory o di qualsiasi altro oggetto. Le informazioni includono:
    [...]
    le informazioni temporali di modifica (mtime), ultimo accesso (atime) e di cambio di stato (ctime)
    Quando carichi un file in un PC, che sia locale o remoto, il filesystem viene aggiornato con le informazioni di ogni singolo file.
    Se il file prima non era presente, la data di modifica sarà quella di inserimento.
    Se quindi, i file, una volta caricati non verranno modificati, sai già che la funzione ti restituirà i file in ordine di inserimento.

    Ora, non sapendo di preciso come pensi di far funzionare il tuo script, questa è l'unica soluzione che mi viene in mente.
    Se avessi una procedura di upload dei file da script, potresti pensare di modificare al volo il nome del file aggiungendo al nome, il timestamp al momento dell'upload.
    Se lo script prevede la lettura di una cartella, ed il caricamento dei file via FTP, allora penso che non avrai troppe altre vie d'uscita.

    Originariamente inviato da lotus82
    Il problema è che non so come si faccia a creare uno script per far inserire gli eventi (che sono solo file PDF) in un database, Alcio... E allora, per non complicarmi troppo la vita, ho pensato di farglieli caricare direttamente in una cartella e finirla lì.
    Capisco che per chi si avvicina al PHP, le interazioni con un DB sono davvero ostiche, i primi tempi.
    Però man mano che sviluppi e che pensi di far fare agli script delle operazioni sempre più complesse (e performanti), allora vedrai che l'uso di un DB diventerà necessario!
    Considera seriamente l'ipotesi di faticare un po' ma di iniziare a sbattere la testa contro questo spigolo: vedrai che è più semplice di quello che pensi!

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    64
    Ah, ho capito la logica del procedimento che dici...

    Ok...dunque...facendo finta che non sia tanto ostico caricare dei PDF in un DB ho guardato un po' in giro...perché comunque, hai ragione, è la soluzione ottimale, ma potresti darmi una mano sul come?

    Uno dei link che ho trovato è questo (spero di non contravvenire nessuna regola del forum se posto un link, nel caso chiedo perdono, non lo faccio più):
    http://www.php-mysql-tutorial.com/wi...-database.aspx

    Dopo aver creato la tabella come lì indicato, ho creato la pagina php con il form, con questo codice (lì fornito):
    codice:
    <form method="post" enctype="multipart/form-data">
    <table width="350" border="0" cellpadding="1" cellspacing="1" class="box">
    <tr>
    <td width="246">
    <input type="hidden" name="MAX_FILE_SIZE" value="2000000">
    <input name="userfile" type="file" id="userfile">
    </td>
    <td width="80"><input name="upload" type="submit" class="box" id="upload" value=" Upload "></td>
    </tr>
    </table>
    </form>
    e una pagina php per lo script dell'upload, con questo codice (lì fornito):
    codice:
    <?php
    if(isset($_POST['upload']) && $_FILES['userfile']['size'] > 0)
    {
    $fileName = $_FILES['userfile']['name'];
    $tmpName  = $_FILES['userfile']['tmp_name'];
    $fileSize = $_FILES['userfile']['size'];
    $fileType = $_FILES['userfile']['type'];
    
    $fp      = fopen($tmpName, 'r');
    $content = fread($fp, filesize($tmpName));
    $content = addslashes($content);
    fclose($fp);
    
    if(!get_magic_quotes_gpc())
    {
        $fileName = addslashes($fileName);
    }
    
    include 'library/config.php';
    include 'library/opendb.php';
    
    $query = "INSERT INTO upload (name, size, type, content ) ".
    "VALUES ('$fileName', '$fileSize', '$fileType', '$content')";
    
    mysql_query($query) or die('Error, query failed');
    include 'library/closedb.php';
    
    echo "
    File $fileName uploaded
    ";
    }
    ?>
    andando a cambiare solo la parte
    include 'library/config.php';
    include 'library/opendb.php';
    dove ho messo l'include al mio file sql.

    Probabilmente l'ho fatta un po' sempliciotta, visto che non funziona...
    quando vado nel db, la tabella è vuota...

    Guardando ancora un po' in giro, ho trovato una discussione qui sul forum, qui: http://forum.html.it/forum/showthread/t-1199318.html
    Lì dici che in genere salvi il file in una cartella (come faccio io?), ma il nome lo salvi nel db:
    Io per evitare scocciature salvo sempre il file in una cartella ed il solo nome in un campo text della tabella.
    Forse potrebbe essere la soluzione che fa per me?

    Anche perché ho pensato che semmai dovessi riuscirci, invece che far prendere l'ultimo file caricato dal sistema, nel reparto di amministrazione, potrei dare la possibilità all'amministratore di scegliere quale evento far visualizzare nel "frontend", dalla lista degli eventi caricati in db. E con i file caricati tramite db questo si potrebbe fare, credo. Nel pannello di amministrazione infatti c'è già una sezione dedicata ai Link, dove l'amministratore inserisce alcuni link esterni, con i campi: Immagine, titolo, Link e descrizione, tutto caricato nel db.

    Sto forse delirando...?
    Spero di non aver detto troppi strafalcioni e come sopra, ti ringrazio infinitamente per l'aiuto.

  10. #10
    Partendo dal presupposto che non esiste un metodo UNICO per fare l'upload di file da script PHP, ti dico come lo che farei io.
    Ti consiglio di spulciare il codice che hai trovato come esempio e basta: spesso per piccole sfumature (che uno alle prime armi non conosce) gli script belli e pronti non funzionano nel proprio caso ed in quel momento ti sembra che il mondo ti stia crollando addosso!

    Innanzi tutto pensa a come strutturare la tabella del DB.
    Ti serve un campo auto-incrementale che userai come indice, un campo data che ti serve per la visualizzazione futura, un campo di testo per inserire il nome del file (senza percorso per raggiungerlo), magari ti potrebbero servire anche altri dati, ma per ora ci possiamo accontentare.
    La tabella quindi la strutturerei così:
    codice:
    id INT NOT NULL AUTO_INCREMENT
    data DATETIME
    file TEXT
    PRIMARY KEY(id)
    La form per quanto non mi piace il codice (odio le tabelle! ), e per quanto trovo inutile gestire il campo MAX_FILE_SIZE, potrebbe andare, ma manca una cosa fondamentale: la action!
    La action indica allo script verso quale file PHP inviare i dati passati dall'utente!
    La riscriverei copme segue:
    Codice PHP:
    <form method="post" action="upload.php" enctype="multipart/form-data">
    <
    input type="hidden" name="MAX_FILE_SIZE" value="2000000">
    <
    input name="userfile" type="file" id="userfile">
    <
    input name="upload" type="submit" class="box" id="upload" value=" Upload ">
    </
    form
    Lo script upload.php conterrà il vero e proprio motore di upload.
    Innanzi tutto, per sapere se il file è stato effettivamente caricato, puoi usare sempre uno degli attributi dell'array $_FILES: error!
    Codice PHP:
    <?php
    if($_FILES['userfile']['error'] == 0) {
      
    // il file è stato caricato
      // procedo con lo script
    } else {
      
    // c'è un errore
    }
    Se l'errore è uguale a 0, allora il file è stato caricato nel server correttamente.
    All'interno di quella porzione di IF puoi fare i controlli di sicurezza sul nome del file, sulla correttezza del nome del file (per evitare problemi, potresti togliere eventuali caratteri speciali e spazi bianchi nel nome), sulla sua estensione (puoi restringere il caricamento ai soli PDF, per esempio) e fare tutto quello che reputi giusto ed utile per il tuo script.
    Una volta effettuati questi controlli, per spostare il file dalla cartella temporanea del server, alla cartella dove vuoi salvare il file usa la funzione MOVE_UPLOADED_FILE().
    Ricordati che la cartella dove vuoi salvare i file DEVE avere i permessi di lettura e scrittura da script.
    In locale non hai problemi, ma in remoto dipende dal tipo di server che userai!
    Nei server Windows, di solito l'unica cartella disponibile di default si chiama /PUBLIC.
    In quelli Unix non hai questa restrizione, e puoi creare con il client FTP una cartella specifica a cui però dovrai cambiare (sempre dal client o via script) i permessi in 0755.

    Quando il file sarà salvato nel server, allora provvederai all'inserimento nel DB.
    La query è semplice:
    Codice PHP:
    $sql "
    INSERT INTO nome_tabella
    (data, file)
    VALUES
    (NOW(), 'nome_del_file_recuperato_da_script.pdf'
    "

    Ho volutamente evitato di scriverti il codice e ti ho dato indicazioni di massima per spronarti a capire il codice che hai scaricato e modificarlo in base alle tue esigienze!

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

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 © 2024 vBulletin Solutions, Inc. All rights reserved.