Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Trasformare una riga "messaggio" in variabili distinte

    Mi spiego un pochino meglio.
    Ho costruito un guestbook che usa un file txt per salvare i messaggi.
    Prendo i dati che scrive l'ospite e li salvo nel file txt, poi prendi i dati dal file e li stampo a video.
    E il tutto funziona.
    Facendo così però, riesco a trattare (e quindi a formattare) i dati che inserisce l'ospite (nome, località e data) solo come stringa unica.
    Quindi, se volessi mettere in grassetto solo il nome non mi è possibile, in quanto anche gli altri dati prenderebbero il grassetto.

    L'ideale sarebbe, riuscire ad estrapolare dal file txt, la riga suddividendola in più parti
    Si può fare o è troppo complesso?

    PS. lo so che usando il database è più semplice, ma volevo farlo usand un file txt.

    grazie

    posto il codice:

    scrivi.php
    Codice PHP:
    <?php
    //recupero i dati da form modulo.php
    $nome=$_POST['Nome'];
    $citta=$_POST['Citta'];
    $messaggio=$_POST['Mex'];

    //verifico che tutti i campi del form siano pieni

    if (empty($nome) || empty($citta) || empty($messaggio) ){
      echo 
    'Uno o più campi obbligatori sono vuoti!
    '

      echo 
    '[url="guest.php"]Torna indietro[/url]'
    }

    //se pieni
    else {
    //variabili per la data: giorno, mese, anno
    $data_gdate("d");
    $data_mdate("m");
    $data_adate("y");

    echo 
    "Grazie per aver firmato il Guest book"."
    "
    ;
    echo 
    "<a href=\"guest.php\">Ritorna al Guestbook</a>";

    //apro il file in scrittura, scrivo la stringa e chiudo il file
    $scrivi_file=fopen("messaggi.txt","a");
    $stringa="<".$nome." da"." ".$citta.":"." ".$messaggio." ("."$data_g"."/"."$data_m"."/"."$data_a".")";


    $fwfwrite($scrivi_file,$stringa."\r\n");
    fclose($scrivi_file);
    }
    ?>
    La parte di codice inserita in Guest.php, che mi visualizza il messaggio a video.
    Codice PHP:
    <?php

         
    // parametri di configurazione
        
    $filename="messaggi.txt";  // file delle frasi
        
    $delim="<";             // delimitatore di frase
        
        // apri il file delle frasi
        
    $fd=fopen($filename,"r");
        
        
    //conta il totale delle righe, quindi dei messaggi
        
    $totMex=count(file($filename));
        
        
    // legge il file
        
    $contents fread ($fdfilesize ($filename));

           
    //estrae per riga
          
    $fraseexplode($delim,$contents);

          
    //in ordine inverso i messaggi
          
    $frase_reversearray_reverse($frase);


    if (
    sizeof($frase) <= "1")
    {
    echo 
    "$PHP_SELF: Errore, nessun array, sto uscendo...";
    exit;
    }
    foreach (
    $frase_reverse as $valore) {

    ?>
    <table width="100%">
    <tr>
    <td bgcolor="#666666">
    <?php echo "<left>$valore

    </left>"
    ?>
    </td>
    </tr>
    </table>
    <?php
    }

    // chiude il file
    fclose ($fd);
        
    ?>

  2. #2
    Perchè non usi un database visto che sono nati per questo?

  3. #3
    L'ho già fatto con il database, ma volevo farne uno che usa un file txt.
    In questo modo risulta più semplice da installare ad altre persone che non non "masticano" troppo di PHP e che magari non hanno il database nel proprio spazio web.

  4. #4
    Certo, se poi non sanno cosa sono i privilegi e come settarli, sei punto e a capo.

  5. #5

    Re: Trasformare una riga "messaggio" in variabili distinte

    Se ho capito cosa cerchi forse ti converrebbe inserire nel file di testo solo i dati inviati intervallati da qualche carattere... tipo

    Codice PHP:
    $scrivi_file=fopen("messaggi.txt","a"); 
    $stringa="$nome#$citta#$messaggio#$data_g#$data_m#$data_a\n"
    $fwfwrite($scrivi_file,$stringa); 
    fclose($scrivi_file); 
    Poi leggi il file con file(), fai l'explode di ogni riga e hai le variabili pronte da formattare come più ti aggrada. Es.

    Codice PHP:
    $lettura=file('messaggi.txt');
    foreach(
    $file as $post) {
      list(
    $nome,$citta,$messaggio,$data_g,$data_m,$data_a)=explode('#',$post);
      
    // qui stampi i valori con la formattazione che vuoi
      

    firma in costruzione

  6. #6
    provo a fare come mi dici e ti faccio sapere.

    grazie


  7. #7
    modificato, ora funziona ma in coda ai messaggi mi da questo errore:

    Notice: Undefined offset: 2 in c:\program files\easyphp 2.0b1\www\aaaaaa\guest.php on line 63

    Notice: Undefined offset: 1 in c:\program files\easyphp 2.0b1\www\aaaaaa\guest.php on line 63

    La riga 63 è questa:
    list($nome, $citta, $messaggio)= explode('#', $valore);


    Inserisco i file che ho modificato:

    scrivi.php
    Codice PHP:
    <?php
    //recupero i dati da form modulo.php
    $nome=$_POST['Nome'];
    $citta=$_POST['Citta'];
    $messaggio=$_POST['Mex'];

    //verifico che tutti i campi del form siano pieni

    if (empty($nome) || empty($citta) || empty($messaggio) ){
      echo 
    'Uno o più campi obbligatori sono vuoti!
    '

      echo 
    '[url="guest.php"]Torna indietro[/url]'
    }

    //se pieni
    else {

    echo 
    "Grazie per aver firmato il Guest book"."
    "
    ;
    echo 
    "<a href=\"guest.php\">Ritorna al Guestbook</a>";

    //apro il file in scrittura, scrivo la stringa e chiudo il file
    $scrivi_file=fopen("messaggi.txt","a");
    $stringa="<".$nome."#"." da"." ".$citta.":"."#".$messaggio."#";

    $fwfwrite($scrivi_file,$stringa."\r\n");
    fclose($scrivi_file);
    }
    ?>
    e la parte del guest:

    Codice PHP:
    <?php

         
    // parametri di configurazione
        
    $filename="messaggi.txt";  // file delle frasi
        
    $delim="<";             // delimitatore di frase
        
        // apri il file delle frasi
        
    $fd=fopen($filename,"r");
        
        
    //conta il totale delle righe, quindi dei messaggi
        
    $totMex=count(file($filename));
        
        
    // legge il file
        
    $contents fread ($fdfilesize ($filename));

        
    //estrae per riga
        
    $fraseexplode($delim,$contents);

        
    //in ordine inverso i messaggi
        
    $frase_reversearray_reverse($frase);

    if (
    sizeof($frase) <= "1")
    {
    echo 
    "$PHP_SELF: Errore, nessun array, sto uscendo...";
    exit;
    }
    foreach (
    $frase_reverse as $valore) {
    list(
    $nome$citta$messaggio)= explode('#'$valore);

    $nome=ucfirst ($nome);
    $citta=ucfirst ($citta);
    $messaggio=ucfirst ($messaggio);

    ?>
    <table width="100%" cellpadding="0" cellspacing="0">
    <tr>
    <td  bgcolor="#999999"><?php echo $nome$citta?></td>
    </tr>
    </table>

    <table width="100%" height="30" cellpadding="0" cellspacing="0">
    <tr>
    <td bgcolor="#CCCCCC"><?php echo $messaggio?></td>
    </tr>
    </table>





    <?php
    }

    // chiude il file
    fclose ($fd);
        
    ?>
    PS. ho tolto le variabili della data che non mi servivano più.

    Qualche idea per eliminare l'errore?

  8. #8
    ciao! la pagina guest.php te l'ho modificata così:

    Codice PHP:
    <?php
     
    // parametri di configurazione
        
    $filename="messaggi.txt";  // file delle frasi
        
    $delim="<";             // delimitatore di frase

        // apri il file delle frasi
        
    $fd=fopen($filename,"r");

        
    //conta il totale delle righe, quindi dei messaggi
        
    $totMex=count(file($filename));

        
    // legge il file
        
    $contents fread ($fdfilesize ($filename));

        
    //estrae per riga
        
    $fraseexplode($delim,$contents);

        
    //in ordine inverso i messaggi
        
    $frase_reversearray_reverse($frase);

    if (
    sizeof($frase) <= "1")
    {
    echo 
    "$PHP_SELF: Errore, nessun array, sto uscendo...";
    exit;
    }
      echo 
    count($frase);
    for(
    $i=0;$i<count($frase)-1;$i++)
    {
     
    $val[$i]=explode('#'$frase_reverse[$i]);




    $nome[$i]=ucfirst ($val[$i][0]);
    $citta[$i]=ucfirst ($val[$i][1]);
    $messaggio[$i]=ucfirst ($val[$i][2]);

    $table='<table width="100%" cellpadding="0" cellspacing="0">
    <tr>
    <td  bgcolor="#999999">'
    $nome[$i]. $citta[$i].'</td>
    </tr>
    </table>

    <table width="100%" height="30" cellpadding="0" cellspacing="0">
    <tr>
    <td bgcolor="#CCCCCC">'
    $messaggio[$i].'</td>
    </tr>
    </table>



    '
    ;

      echo 
    $table;
    }

    // chiude il file
    fclose ($fd);

    ?>
    fammi sapere se tutto va bene!!

  9. #9
    Ora funziona alla grande, grazie.
    Non ho capito il perchè del -1 nel ciclo for:

    for($i=0;$i<count($frase)-1;$i++)

    ciao

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.