Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente bannato
    Registrato dal
    Sep 2005
    Messaggi
    905

    PILLOLA su come utilizzare i file di testo come db

    Molti spesso sentono dire di "database su files di testo".. mah di database conosco solo mysql (o postgresql ecc..). Cosa vorrà dire questa espressione. Di solito i files di testo vengono utilizzati come "cestini" dove mettere cosette così come

    testo.txt

    ciao sono php_34

    echo.php

    <?php echo implode("", file("testo.txt")); ?>

    o cosette simili, questo visualizzerebbe semplicemente il contenuto di testo.txt. Esistono alcuni problemi del tipo: ho un sito e voglio metterci un guestbook ma non ho un db (o il classico problema di altervista: non ho sufficienti altercents e non voglio mostrare agli utenti quel brutto messaggio ), il problema è: come faccio? Un modo è: chiedere un hosting con db, o nel caso di altervista () aumentare gli altercents con la pubblicità. Forse questo vi porterà via un po' di giorni e soldi, quindi qualcuno potrebbe pensare ad un altro metodo. Cosa utilizzare? Beh a questo punto, pensiamo ai file. Qualcuno ora si chiederà: e come faccio il database con i file?!? Ora entra in campo un po' di ingegno con le funzioni specifiche di php.
    Supponiamo di voler fare un piccolo login con cookie e database "MyTXT" procediamo così:

    index.php

    Codice PHP:
    <?php
    function check_user($user$md5pwd) {
    $result FALSE;
    $users_db file("users.php");
    foreach(
    $users_db as $line) {
    $user_line explode("[--]"$line);
    if(
    $user == $user_line[0] && $md5pwd == $user_line[1]) {
    $result TRUE; break;
    } } return 
    $result; }
    if(isset(
    $_COOKIE['utente']) && isset($_COOKIE['md5pwd'] && [B]check_user[/B]($_COOKIE['utente'], $_COOKIE['md5pwd'])) {
    //l'utente è loggato, mostriamo la pagina (spiego dopo)
    }else{ require("login.php"); }
    ?>
    in users.php:

    <?php die("Non puoi visualizzare il file !!!");
    utente 1[--]password md5 dell'utente 1
    utente 2[--]password md5 dell'utente 2
    utente 3[--]password md5 dell'utente 3


    Bene forse leggendo questo avrete capito ☺5b☺162☺g☻P , quindi cerchiamo di capire meglio esaminando quanto scritto..
    Codice PHP:
    function check_user($user$md5pwd) { 
    dichiariamo una funzione che ci restituisce un valore booleano che controlla se l'utente specificato con la sua password md5 abbinata sono registrati e che la combinazione coincida.
    Codice PHP:
    $users_db file("users.php"); 
    usiamo la funzione file() per creare un array con in ogni elemento dell'array una linea di users.php. Nella prima troviamo una riga di sicurezza, che permette ad ogni utente che cerca di intrufolarsi nel database utenti di visualizzare un messaggio d'errore, nelle altre linee troveremo gli utenti iscritti.
    Codice PHP:
    foreach($users_db as $line) { 
    con un bel ciclo foreach eseguiamo il controllo per ogni riga che la combinazione utente/password sia corretta
    Codice PHP:
    $user_line explode("[--]"$line); 
    bene qui entra in gioco l'explode, funzione importantissima per quanto mi riguarda, visto che io uso sempre db MyTXT.. Questa funzione usa il separatore specificato (nel nostro caso [--]), come separatore di colonne del db. In questo modo abbiamo la possibilità di ottenere un ulteriore array, in cui sono contenute le informazioni della linea. Grazie ancora al "as" del foreach abbiamo la possibilità di richiamare la linea corrente con la semplice variabile $line, che inseriamo nell'explode, la linea che stiamo esaminando. Passiamo avanti:
    Codice PHP:
    if($user == $user_line[0] && $md5pwd == $user_line[1]) { 
    E' la cosa che principalmente ci interessa. Controlliamo grazie ad nu if e a tutto quello che ho già spiegato se l'username o la password coincidono con quelle di linea.
    Codice PHP:
    $result FALSE
    se non coincidono l'if non verrà eseguito e di conseguenza il risultato sarà sempre quello predichiarato all'inizio della funzione, false. Dopo più volte che il foreach viene eseguito, verranno effettuati controlli su tutte le linee, e quindi essere sicuri che l'username e la password coincidano. Cosa c'è nell'if?
    Codice PHP:
    $result TRUE; break; 
    impostiamo il risultato come true, cioè vero: l'utente e registrato. E break? se avessimo messo un else dopo l'if e metto $result = FALSE nel contenuto dell'if, break sarebbe stato indispensabile. In questo caso serve solo a diminuire il tempo d'esecuzione dello script, però servirebbe con l'else a dire STOP all'esecuzione del foreach e di non fare più controlli, altrimenti il risultato sarebbe tornato ad essere FALSE e l'utente rimarrebbe così => !!!
    Quindi passiamo dopo il foreach, che è la fase più importante, ad un'altra cosa altrettanto importante, quella che restituirebbe il valore booleano:
    Codice PHP:
    return $result
    questo fa sì che la funzione restituisca il valore giusto. Vi è chiara la funzione? Bene passiamo oltre:
    Codice PHP:
    if(isset($_COOKIE['utente']) && isset($_COOKIE['md5pwd'] && check_user($_COOKIE['utente'], $_COOKIE['md5pwd'])) {
    //l'utente è loggato, mostriamo la pagina (spiego dopo)
    }else{ require("login.php"); } 
    bene a cosa servirebbe? Spiego subito:
    Codice PHP:
    if(isset($_COOKIE['utente']) && isset($_COOKIE['md5pwd'] && check_user($_COOKIE['utente'], $_COOKIE['md5pwd'])) { 
    questo controlla che sia stato impostato il cookie utente e md5pwd, quindi vede con la nostra funzione check_user che l'username e la password siano giusti. I cookie devono essere: il cookie 'utente' con il come utente e il cookie 'password' con la password formato md5. Come si impostano questi cookie? Semplice: nella pagina di login (chiamiamola login.php) facciamo il form del login e mettiamo un form con azione => index.php (quella dove c'è la funzione e i controlli) con metodo POST e due campi: user e pass. Dopo che il form è stato inviato mettete anche un campo hidden con nome 'action' e valore..che ne sò..dologin.. Dopo nel file login.php si potrebbe mettere qualcosa del genere:

    Codice PHP:
    <?php
    if($_POST['action'] == "dologin") {
    $md5password md5($_POST['password']);
    if(
    check_user($_POST['user'], $md5password)) {
    echo 
    "login effettuato correttamente. Vai di nuovo a index.php";
    }else{ echo 
    "username e/o password errati"; } }
    else{
    //echo paginadilogin
    ?>
    questo semplicissimo codiciuzzolo serve a creare un piccolo sistema login che utilizza i cookie, se volete usare anche le sessioni mettete session_start(); all'inizio di index.php.

    Adesso se vogliamo fare un piccolo guestbook? Beh semplice, basta un po' di cervello!! Possiamo comporre il nostro guestbook con 2 soli files: index.php e messages.txt:

    index.php

    Codice PHP:
    <?php
    if($_POST['action'] == "attach_msg") {
    htmlentities($_POST['msg'], ENT_QUOTES);
    str_replace("\\\", "\\\\\\\", $_POST['msg']);
    $fp = fopen("messages.txt", "a");
    fwrite(
    $fp, "$_POST['name']|[--]|$_POST['msg']\n");
    fclose(
    $fp); header("Locationindex.php"); }else{
    $msg_db = file("messages.txt");
    if(count(
    $msg_db) == 0 && $msg_db[0] == "") {
    echo "
    non ci sono messaggi"; }else{
    foreach(
    $msg_db as $line) {
    if(
    $line != "") {
    $msg = explode("|[--]|", $line);
    echo "
    Messaggio inviato da$msg[0]
    $msg[1]"; } } }
    echo "
    Lascia un messaggio!
    <
    form action='index.php' method='post'>
    Nome:<input type='text' name='name'>

    Messaggio:<textarea name='msg'></textarea>


    <
    input type='submit' value='Invia messaggio &gt;'></form>";
    ?>
    Bene io ho scritto al volo, non so se ci sono errori di sintassi, che ne pensate? abbiamo creato con pochissime righe di codice un guestbook senza db mysql!! Potete sbizzarrirvi e creare anche tra le più accattivanti combinazioni di file db e lettori dei file in php, con dei foreach, explode e altre funzioni che senza delle quali con altervista non mi sarebbe piaciuta proprio .


  2. #2
    Utente bannato
    Registrato dal
    Sep 2005
    Messaggi
    905
    non interessa a nessuno?

  3. #3
    a me interessa molto. Appena sarò un po' più ripigliato me la studio per bene! Comunque grazie!

  4. #4

    Re: PILLOLA su come utilizzare i file di testo come db

    Originariamente inviato da php_34
    Molti spesso sentono dire di "database su files di testo".. mah di database conosco solo mysql (o postgresql ecc..). Cosa vorrà dire questa espressione.
    SQLITE , ACCESS , altri


    cmq sia la pagina php usata come db inizia ma non chiude e le info sono solo per un login ... ci sono tanti modi per avere un db su file senza usare un db noto come sqlite o altri, c'e' chi usa xml, c'e' chi usa csv, c'e' chi usa una struttura serializzata racchiusa tra

    <?php /*
    array_serializzato
    */ ?>

    ... che e' molto piu' comoda, flessibile e riadattabile
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  5. #5
    Utente bannato
    Registrato dal
    Sep 2005
    Messaggi
    905
    e vabbe io lo uso così

  6. #6
    Utente bannato
    Registrato dal
    Sep 2005
    Messaggi
    905
    correggo:

    if(count($msg_db) == 0 && $msg_db[0] == "") {

    con

    if(count($msg_db) == 1 && $msg_db[0] == "") {

  7. #7
    Originariamente inviato da php_34
    e vabbe io lo uso così
    ognuno fa quello che gli pare, ovviamente ... il mio intervento era per "illuminarti" su cosa si intende per database su file e consigliarti di ampliare con esempi ed altre soluzioni questa PILLOLA poiche' cosi' dubito sia veramente utile ... un po' troppo relativa insomma
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  8. #8
    Utente bannato
    Registrato dal
    Sep 2005
    Messaggi
    905
    ..........ok grazie del consiglio allora volevo solo illustrare uno dei modi per utilizzare un file come databse, però se non interessa a nessuno....

  9. #9
    Utente bannato
    Registrato dal
    Sep 2005
    Messaggi
    905
    comunque alla fine il guestbook per farlo funzionare mettete:
    Codice PHP:
    <?php
    if($_POST['action'] == "attach_msg") {
    str_replace("\\""\\\\"$_POST['msg']);
    htmlentities($_POST['msg'], ENT_QUOTES);
    $fp fopen("messages.txt""a");
    fwrite($fp"$_POST['name']|[--]|$_POST['msg']\n");
    fclose($fp); header("Location: index.php"); }else{
    $msg_db file("messages.txt");
    if(
    count($msg_db) == && $msg_db[0] == "") {
    echo 
    "non ci sono messaggi"; }else{
    foreach(
    $msg_db as $line) {
    if(
    $line != "") {
    $msg explode("|[--]|"$line);
    echo 
    "
    Messaggio inviato da: 
    $msg[0]
    $msg[1]"; } } }
    echo 
    "
    Lascia un messaggio!
    <form action='index.php' method='post'>
    Nome:<input type='text' name='name'>

    Messaggio:<textarea name='msg'></textarea>


    <input type='submit' value='Invia messaggio &gt;'>
    <input type='hidden' name='action' value='attach_msg'></form>"
    ;
    ?>

  10. #10
    Codice PHP:
    <?php
    // le variabili si controllano con isset
    if(isset($_POST['action']) && $_POST['action'] == "attach_msg") {
        
    // a cosa serve se non riassegni ???
        // str_replace("\\", "\\\\", $_POST['msg']);
        // a cosa serve se non riassegni ???
        // htmlentities($_POST['msg'], ENT_QUOTES);
        
        // casomai ...
        
    $_POST['msg'] = htmlentities(addslashes($_POST['msg']), ENT_QUOTES);
        
    // comunque perche' addslashes ?

        
        
    $fp fopen("messages.txt""a");
        
    fwrite($fp"$_POST['name']|[--]|$_POST['msg']\n");
        
    // e se mettessi nel testo o nel nome questo ? |[--]|

        
    fclose($fp);

        
    header("Location: index.php");
    }
    else{
        
    $msg_db file("messages.txt");
        if(
    count($msg_db) == && $msg_db[0] == "") {
            echo 
    "non ci sono messaggi";
        }
        else{
            foreach(
    $msg_db as $line) {
                if(
    $line != "") {
                    
    $msg explode("|[--]|"$line);
                    echo 
    "
    Messaggio inviato da: 
    $msg[0]
    $msg[1]";
                }
            }
        }
        echo 
    "
    Lascia un messaggio!
    <form action='index.php' method='post'>
        Nome:<input type='text' name='name'>

        Messaggio:<textarea name='msg'></textarea>


        <input type='submit' value='Invia messaggio &gt;'>
        <input type='hidden' name='action' value='attach_msg'></form>"
    ;

    // questo else non chiude ???
    ?>
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

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.