Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 22
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    58

    Copiare txt esistente dopo correzione o controllo textarea

    Ciao ragazzi,
    prima di tutto ben tornati dalle vostre vacanze, secondo veniamo al dunque!

    Attraverso un form mi inviano dei messaggi (una sorta di bacheca) i quali vengono memorizzati in un file .txt e da questo li stampo a video su una pagina. Tutto ok.
    Il problema mi si presenta nel momento in cui qualcuno scrive delle parole non proprio carine.
    2 penso potrebbero essere le soluzioni:
    - o trovo un sistema per cercare di bloccare a monte l'invio di messaggi con tutte queste belle paroline;
    - o prima di stamparle a video mi leggo i messaggi e cancello quelli offensivi.

    Nel primo caso, non ho idea di come si possa fare.
    Nel secondo caso, invece, ho pensato bene di crearmi una sorta di pagina di gestione della "bacheca" nella quale visualizzo i messaggi e o li modifico o li cancello

    Ovviamente, però, nella pagina in cui stampo a video i messaggi, questi rimangono finchè non intervengo io.
    Io ho:
    - messaggi.txt (file di testo in cui vengono memorizzati i messaggi inviati dagli utenti)
    - bacheca.php (dove stampo a video i messaggi)
    - gestione_bacheca.php (dove visualizzo, in area riservata, i messaggio con la possibilità di modificarli o cancellarli)
    - modifica_riga.php (file che mi serve per modificare ogni singolo messaggio)
    - cancella_riga.php (file che mi serve per cancellare ogni singolo messaggio)
    - aggiorna_riga.php (file richiamato dal file modifica_riga.php che mi serve per aggiornare ogni singolo messaggio)

    Come posso fare per aggiungere un comando es. "Pubblica" nel file gestione_bacheca.php in modo da creare un nuovo file .txt, con solo la riga corrispondente e le altre che chiaramente vengono aggiunte, da usare per stampare a video i messaggi, diciamo, puliti?

    Vi ringrazio anticipatamente

    Vi allego i codici dei file:
    MESSAGGI.TXT
    1|ORIGINE|NOME|EMAIL|MESSAGGIO|

    BACHECA.PHP
    Codice PHP:
    <?php
    $contatore 
    0;
    $textfile fopen("public/bacheca/db/messaggi.txt""r");
    while (
    $rigafile fgets($textfile,1024)) {
    $campiriga explode("|"$rigafile);
    echo 
    "-&nbsp$campiriga[1]-$campiriga[4]-[b]$campiriga[2][/b]
    "
    ;
    }

    fclose($textfile);
    ?>
    GESTIONE_BACHECA.PHP
    Codice PHP:
    <?php
    $contatore 
    0;
    $textfile fopen("db/messaggi.txt""r");
    while (
    $rigafile fgets($textfile,1024)) {
    $campiriga explode("|"$rigafile);
    echo 
    "<tr><td>$campiriga[0]</td><td>$campiriga[2]</td><td>$campiriga[4]</td><td>$campiriga[1]</td><td>$campiriga[3]</td><td><a href=\"modifica_riga.php?id=$campiriga[0]\">Mod</a> | <a href=\"cancella_riga.php?id=$campiriga[0]\">Canc</a></td></tr>";
    }

    fclose($textfile);
    ?>
    MODIFICA_RIGA.PHP
    Codice PHP:
    <?php
    $id 
    $_GET["id"];
    $textfile fopen("db/messaggi.txt""r");

    while ( 
    $rigafile fgets($textfile,1024)) {
     
    $campiriga explode("|"$rigafile);
     
    $idriga $campiriga[0];

     if (
    $idriga == $id) {
      
    $cid $campiriga[0];
    $ccorso $campiriga[1];
    $cnome $campiriga[2];
    $cemail $campiriga[3];
    $cmessaggio $campiriga[4];
     }

    }
    fclose($textfile);
    ?>
    ...
    ...
    ...
    <form method="post" action="aggiorna_riga.php">
    <div align="left"><strong class="Stile3">Idriga[/b]
    <input name="id" type="text" class="Stile10" value="<?=$cid?>" size="5">

    <span class="Stile3">[b]Origine[/b]</span>
    <input name="origine" type="text" class="Stile4" value="<?=$ccorso?>" size="60">

    <strong class="Stile3">Nome[/b]
    <input name="nome" type="text" class="Stile4" value="<?=$cnome?>" size="25">

    <strong class="Stile3">Email[/b]
    <input name="email" type="text" class="Stile4" value="<?=$cemail?>" size="30">

    <strong class="Stile3">Messaggio[/b]
    <textarea name="messaggio" cols="60" class="Stile4"><?=$cmessaggio?></textarea>



    <input type="submit" value="Modifica" name="submit">
    </div></form>
    CANCELLA_RIGA.PHP
    Codice PHP:
    <?php
    $utente 
    $_GET["id"];
    $textfile fopen("db/messaggi.txt""r");
    $textfile_new fopen("db/messaggi_new.txt""a");
     while (
    $rigafile fgets($textfile,1024)) {
     
    $campiriga explode("|"$rigafile);
     
    $idriga $campiriga[0];
     if (
    $idriga <> $utente) {
      
    fwrite($textfile_new$rigafile);
     }
    }
    fclose($textfile);
    fclose($textfile_new);
    unlink("db/messaggi.txt");
    rename("db/messaggi_new.txt","db/messaggi.txt");

    ?>
    AGGIORNA_RIGA.PHP
    Codice PHP:
    <?php
    $id 
    $_POST["id"];
    $textfile fopen("db/messaggi.txt""r");
    $textfile_new fopen("db/messaggi_new.txt""a");
     while (
    $rigafile fgets($textfile,1024)) {
     
    $campiriga explode("|"$rigafile);
     
    $idriga $campiriga[0];
     if (
    $idriga == $id) {
    $ccorso $_POST["corso"];
    $cnome $_POST["nome"];
    $cemail $_POST["email"];
    $cmessaggio $_POST["messaggio"];

    $nuovariga "$idriga|$ccorso|$cnome|$cemail|$cmessaggio|\n";

      
    fwrite($textfile_new$nuovariga);
     } else {
      
    fwrite($textfile_new$rigafile);
     }
    }
    fclose($textfile);
    fclose($textfile_new);
    unlink("db/messaggi.txt");
    rename("db/messaggi_new.txt","db/messaggi.txt");

    ?>
    Se siete arrivati fin qui significa che avete avuto molta pazienza e forse ho qualche speranza di avere un vostro aiuto.
    Grazie ancora,
    Cicileu

  2. #2
    Utente di HTML.it L'avatar di DydBoy
    Registrato dal
    Jul 2005
    Messaggi
    165
    In primis rispondo al tuo nick dicendo : eu

    Potresti implementare una blacklist di parole, si fa spesso con le stopwords nei motori di ricerca.
    Una cosa del genere, questo è codice che scrissi un paio d'anni fa ma forse fa al caso tuo:

    Codice PHP:


    //load list of common words
    $common file('stopwords.txt');
    $total count($common);    
    for (
    $x=0$x<= $total$x++)
        
    $common[$x] = trim(strtolower($common[$x]));


    function 
    stopWords($term)
        {
          global 
    $common;
       
          
    $term ereg_replace("[[:punct:]]"," ",$term);
            
            
    $_terms explode(" "$term);
        
            foreach (
    $_terms as $line)
            {
                if (
    in_array(strtolower(trim($line)), $common))
                {                
                    
    $removeKey array_search($line$_terms);
                    unset(
    $_terms[$removeKey]);                
                }
                else
                  
    $clean_term .= " ".$line;
               
            }
            return 
    $clean_term;    
        } 
    Praticamente passi banalmente a stopwords la stringa con il messaggio, te la esplode sugli spazi e ti fa un banale check con un array di parole "non volute". La funzione restituisce quindi la stringa pulita.
    Potresti ottimizzarla magari aggiungendo un "XXXX" alla parola censurata o hai altri mille modi per risolvere il problema.

    Rimango a disposizione,ciao.

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    58
    Grazie DydBoy,
    conosci il Salento?
    Praticamente dovrei implementarla in BACHECA.PHP prima dell'echo?
    La stringa che dovrei passare è $campiriga[4] al posto $common, giusto?
    Ti ringrazio ancora.
    Se sbaglio qualcosa ti prego scrivimelo.
    Ciao,
    Cicileu

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    58
    Ah, scusa, come implemento la censura XXXX?
    Grazie ancora

  5. #5
    Utente di HTML.it L'avatar di DydBoy
    Registrato dal
    Jul 2005
    Messaggi
    165
    Codice PHP:
    <?php

    //load list of common words
    $common file('stopwords.txt');
    $total count($common);    
    for (
    $x=0$x<= $total$x++)
        
    $common[$x] = trim(strtolower($common[$x]));


    function 
    stopWords($term)
        {
          global 
    $common;
       
          
    $term ereg_replace("[[:punct:]]"," ",$term);
            
            
    $_terms explode(" "$term);
        
            foreach (
    $_terms as $line)
            {
                if (
    in_array(strtolower(trim($line)), $common))
                  
    $clean_term .= " XXXXX ";
               else
                  
    $clean_term .= " ".$line;
               
            }
            return 
    $clean_term;    
        }

    $contatore 0;
    $textfile fopen("public/bacheca/db/messaggi.txt""r");

    while (
    $rigafile fgets($textfile,1024)) 
    {
    $campiriga explode("|"$rigafile);
    $messaggioCensuratostopWords($campiriga[4]);

    echo 
    "-&nbsp$campiriga[1]-$messaggioCensurato-[b]$campiriga[2][/b]
    "
    ;
    }

    fclose($textfile);
    ?>
    Avevo amici salentini
    Cosí dovrebbe andare, ricordati che in stopwords.txt ci devi mettere tutte le parole che non vuoi siano scritte nel formato :

    Parola1
    Parola2
    Parola3

    ok ?

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    58
    Mannaggia!!!
    Mi da questi errori
    Notice: Undefined offset: 3 in D:\webroot\www.danthea.it\bacheca.php on line 322
    Codice PHP:
    $common[$x] = trim(strtolower($common[$x])); 
    Notice: Undefined variable: clean_term in D:\webroot\www.danthea.it\bacheca.php on line 338
    - Origine A - Questa è una prova di invio messaggio in bacheca XXXXX Dovrebbe essere ok XXXXX
    Codice PHP:
    $clean_term .= " ".$line
    Tra l'altro mi cambia i . con XXXXX.
    Mi sai dire qualcosa?
    Ciao

  7. #7
    Utente di HTML.it L'avatar di DydBoy
    Registrato dal
    Jul 2005
    Messaggi
    165
    Codice PHP:
    //load list of common words
    $common file('stopwords.txt');

    $total count($common);    

    for (
    $x=0$x $total$x++)
        
    $common[$x] = trim(strtolower($common[$x])); 

    function 
    stopWords($term)
        {
          global 
    $common;

          
    $clean_term '';

          
    $term ereg_replace("[[:punct:]]"," ",$term);
            
            
    $_terms explode(" "$term);
        
            foreach (
    $_terms as $line)
            {
                if (
    in_array(strtolower(trim($line)), $common))
                  
    $clean_term .= " XXXXX ";
               else
                  
    $clean_term .= " ".$line;
               
            }
            return 
    $clean_term;    
        } 

    $contatore 0;
    $textfile fopen("public/bacheca/db/messaggi.txt""r");

    while (
    $rigafile fgets($textfile,1024))
    {
    $campiriga explode("|"$rigafile);
    $messaggioCensuratostopWords($campiriga[4]);

    echo 
    "-&nbsp$campiriga[1]-$messaggioCensurato-[b]$campiriga[2][/b]
    "
    ;
    }

    fclose($textfile);
    ?> 
    Sono notifiche, non errori.
    Non ho capito quello del punto trasformato in XXX.
    Fammi un esempio di un messaggio, le parole che hai messo nel file txt e del risultato.

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    58
    Ciao DydBoy, grazie ancora per la tua disponibilità.
    Allora, notice non ce ne sono più, pare che funzioni, l'unica cosa che non capisco è perchè quando inserisco un messaggio tipo:

    Ciao, questa è una prova. Speriamo che vada bene!

    me la stampa:

    Ciao questa è una prova Speriamo che vada bene

    ossia, senza punteggiatura!!!

    Non sarà qui l'inghippo?
    Codice PHP:
    $term ereg_replace("[[:punct:]]"," ",$term); 
    E poi, se inserisco delle parolacce, contenute in stopwords.txt, ma con una lettera in più o attaccate ad altra parola, me la stampa lo stesso!

    Allora, cazzocazzo sei una zoccolaa!

    me la stampa

    Allora cazzocazzo sei una zoccolaa

    Non c'è nessun modo per riuscire a far fare il check a tutte le parole all'interno del messaggio che possono contenere una delle parole proibite?

    Grazie ancora,
    Cicileu

  9. #9
    Utente di HTML.it L'avatar di DydBoy
    Registrato dal
    Jul 2005
    Messaggi
    165
    Vediamo un pó...
    Perdona i ritardi, sono a lavoro, il tuo nuovo bacheca.php.
    Non posso provarlo ma dovrebbe funzionare.
    Codice PHP:
    <?
    $common 
    file('stopwords.txt');

    $total count($common);    

    for (
    $x=0$x $total$x++)
        
    $common[$x] = trim(strtolower($common[$x]));

    $contatore 0;
    $textfile fopen("public/bacheca/db/messaggi.txt""r");

    while (
    $rigafile fgets($textfile,1024))
    {
    $campiriga explode("|"$rigafile);
    $messaggioCensuratopreg_replace("/$common/i"'XXXX'$campiriga[4]);

    echo 
    "-&nbsp$campiriga[1]-$messaggioCensurato-[b]$campiriga[2][/b]
    "
    ;
    }

    fclose($textfile);
    ?>

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    58
    Ciao,
    Punteggiatura ok tranne ' e " che me lo stampa così:

    Facciamo una prova, mettiamo un po\' di punteggiatura. Allora , : @ \"ciao\"!

    La barra tra il po e l'apostrofo qui sul forum non la visualizza però a me si, ecco perchè te lo sto specificando.

    Credo che il problema sia all'inizio cioè quando invio il form e questo memorizza i dati nel txt, è lì che dovrei fare qualcosa o posso risolverlo anche prima di stamparlo a video?

    Questo è il file a cui indirizza il form:
    Codice PHP:
    <?php
    $numrighe 
    0;
    $textfile fopen("../db/messaggi.txt""r");
    while ( 
    fgets($textfile,1024) ) {
     
    $numrighe $numrighe +1;
    }
    fclose($textfile);

    $textfile fopen("../db/messaggi.txt""a");
    $idriga $numrighe 1;
    $ccorso $_POST["corso"];
    $cnome $_POST["nome"];
    $cemail $_POST["email"];
    $cmessaggio $_POST["messaggio_bac"];
    $cmessaggio_ok=EREG_REPLACE("\r\n"," ",$cmessaggio);

    $datiform "$idriga|$ccorso|$cnome|$cemail|$cmessaggio_ok|\n";
    fwrite($textfile$datiform);
    fclose($textfile);

    $nome=$_POST["nome"];
    $email=$_POST["email"];
    $corso=$_POST["corso"];
    $messaggio_bac=$_POST["messaggio_bac"];
    ...
    ...
    ...
    ?>
    Per quanto riguarda le parole proibite, ora non copre più nulla!
    Ho notato che hai tagliato parecchio codice, come mai?
    Ciao e grazie ancora,
    Cicileu

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.