Visualizzazione dei risultati da 1 a 10 su 10

Discussione: file database - aiuto

  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2007
    Messaggi
    5

    file database - aiuto

    Ciao.
    Qualcuno mi puo aiutare a creare un script, che mi legge i dati di un file .txt, .dat... Allora per esempio un file .dat con 100 righe ogni riga diversa, o con qualcosa di diverso, tipo un id unico per ciascuna, io voglio che il php mi visualizzi tutte le righe , e un link per ciascuna 'ELIMINA' cliccando mi elimini proprio quella riga del file .dat. Spero che capito cosa intendo dire... Voglio creare il database che di solito uso mysql in file. So come far visualizzare tutte le righe, come inserire...ma eliminare una riga in mezzo non lo so. Poi per fare le pagine (tipo 10 righe per pagine, e i link pag1,pag2pag3...) questo non lo so, ma penso di riuscirci da solo.

    Grazie.

  2. #2
    guarda, te lo sconsiglio assolutamente di fare cosi perché l'opererazione è molto onerosa in termini di risorse e pericolosa perché più operazioni contemporaneamente portano all'autodistruzione del file

    comunque, la cosa è abbastanza semplice:
    1 - apri il file
    2 - leggi N bytes per volta
    3 - cerchi negli N bytes letti l'invio (usando ad esempio strpos) (carattere 10, carattere 13 o carattere 10 e poi 13 ... dipende dal formato del file)
    4 - una volta trovato l'invio leggi N bytes per trovare l'id (o un carattere che ti permetta di conoscere la lunghezza dell'id e poi usi substr per prendere l'id)
    5 - verifichi se l'identificatore sia quello che cerchi
    6 - se no scrivi la riga, se si non la scrivi e ma scrivi tutto quello che rimane dall'invio successivo fion alla fine altrimenti torni al punto 2

    la cosa diventa infinitamente più semplice se il file è in formato CSV o contiene campi a lunghezza fissa perché nel secondo caso bastano una serie di moltiplicazioni per sapere la posizione esatta ed il contenuto dell'identificatore della riga

  3. #3
    partendo dal presupposto che fare un "db" su file in quel modo può avere finalità solo didattica, una soluzione tra le tante è:
    carichi il file in un array tramite la funzione file(), per eliminare una riga elimini l'elemento corrispondente dall'array con unset() e poi lo riscrivi su file dopo aver riconvertito l'array in stringa tramite la funzione implode().

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2007
    Messaggi
    5
    allora voglio usare un file semplice di testo. .dat
    Ho provato questo script, http://www.phpgraphy.org/demo/ (qui trovate la demo) e andando nelle gallerie e cliccando su una foto c'è il link di aggiungere un commento. Quel commento va salvato in un file .dat

    un esmpio del file dove vengono salvate le righe:

    category/imagine.jpg|quiiltesto|2007-12-15 19:25:25|mionome|127.0.0.1
    category/imagine.jpg|quiiltesto|2007-12-15 19:25:25|mionome|127.0.0.1
    category/imagine.jpg|quiiltesto|2007-12-15 19:25:25|mionome|127.0.0.1
    ...

    Nella pagina php c'è il link ELIMINA, quindi se io clicco la riga che ho scelto scompare dal file. la funzione principale che elimina è questa:

    function db_del_user_comment($pic,$delcom)
    {
    global $db_comdata,$db_nbcomdata,$db_datloaded;
    global $config, $comments_filepath;

    // If delcom is equal to "all" then will delete all matching comments

    $datname=$config['pictures_dir'].dirname($pic)."/.thumbs/comments.dat";
    if (is_file($datname) && !is_writable($datname)) {
    trigger_error("Unable to write to $datname, check permissions of the file", ERROR);
    return false;
    }

    $fh=fopen($datname,"a+");
    if ($config['use_flock']) {
    if(!flock($fh,LOCK_EX)) trigger_error("Unable to obtain LOCK on $datname", WARNING);
    }

    if (!rewind($fh)) {
    trigger_error("Unable to SEEK on $datname", ERROR);
    return false;
    }

    $i=0; $j=0;
    while(!feof($fh)) {
    $line=fgets($fh,4096);
    if(!$line) continue;
    $a=explode("|",$line);
    if($a[0]==$pic) {
    if($j==(($delcom)-1) || $delcom == "all") { $todel=$a; }
    else $comm[$i++]=$line;
    $j++;
    } else $comm[$i++]=$line;
    }
    ftruncate($fh,0);
    for($i=0;$i<sizeof($comm);$i++)
    fwrite($fh,$comm[$i]);

    fclose($fh);
    $db_datloaded[$datname]=0;
    if($todel || $delcom == "all") {
    unset($comm);
    // update last user comments file
    $datname=$comments_filepath;
    if (is_file($datname) && !is_writable($datname)) {
    trigger_error("Unable to write to $datname, check permissions of the file", ERROR);
    return false;
    }
    $fh=fopen($datname,"a+");
    if ($config['use_flock']) {
    if(!flock($fh,LOCK_EX)) trigger_error("Unable to obtain LOCK on $datname", WARNING);
    }

    if (!rewind($fh)) {
    trigger_error("Unable to SEEK on $datname", ERROR);
    return false;
    }

    $i=0;
    while(!feof($fh)) {
    $line=fgets($fh,4096);
    if(!$line) continue;
    $a=explode("|",$line);
    if($a[0]==$pic && ($a[1]==$todel[2] || $delcom == "all")) { }
    else $comm[$i++]=$line;
    }
    ftruncate($fh,0);
    for($i=0;$i<sizeof($comm);$i++)
    fwrite($fh,$comm[$i]);

    fclose($fh);
    }
    }


    dovrei cercare qui quello sto cercando, solo che non sono tanto esperto in php, so la base ma non piu di tanto... adesso comincio a studiare la funzione...

  5. #5
    la funzione elimina fa quasi esattamente quello che ti ho detto io su, solo che la mia soluzione era un po più performante

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2007
    Messaggi
    5
    potresti darmi un piccolo aiutino?una picola parte del codice? se hai tempo se no non importa, provo a vedere da solo. E' che a questi livelli non so piu di tanto

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2007
    Messaggi
    5
    ci sono riuscito. grazie alla funzione che ho trovato in quel script ci sono riuscito, anche se devo ancora capire bene come si fa. comunque se hai un'altra alternativa migliore... e riesci a farmi un po di codice...

  8. #8
    Originariamente inviato da clauphp
    ci sono riuscito. grazie alla funzione che ho trovato in quel script ci sono riuscito, anche se devo ancora capire bene come si fa. comunque se hai un'altra alternativa migliore... e riesci a farmi un po di codice...
    guarda, io la pappa pronta non la faccio per nessuno ... se a te ti serve io ti posso spiegare passo passo i passi logici da seguire per scriverti da solo il codice perché se devo spendere il mio tempo preferisco spenderlo per far capire bene come farlo non per scopiazzare un po di coidce qua e la

  9. #9
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    Originariamente inviato da daniele_dll
    guarda, io la pappa pronta non la faccio per nessuno ... se a te ti serve io ti posso spiegare passo passo i passi logici da seguire per scriverti da solo il codice perché se devo spendere il mio tempo preferisco spenderlo per far capire bene come farlo non per scopiazzare un po di coidce qua e la
    A VOLTE un esempio di codice vale piu di mille parole.. A VOLTE!
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  10. #10
    Originariamente inviato da dottwatson
    A VOLTE un esempio di codice vale piu di mille parole.. A VOLTE!
    L'esempio di codice lo ha postato lui stesso e lui stesso ha detto che ha riciclato quel codice in questo caso il codice d'esempio era meglio non metterlo

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.