- Home
- Categorie
- Coding e Sistemistica
- PHP
- Filtrare dati da DB testuali
-
Filtrare dati da DB testuali
Buongiorno a tutta la comunity, come da titolo e possibile creare una cosa del genere senza ricorrere a MySql. Ovviamente lo scopo per me è puramente didattico quindi, i problemi di sicurezza al momento, li tengo in secondo piano. Entro nel dettaglio:
1 Raccolgo i commenti da un form
<html><head> <link rel="stylesheet" href="style.css" type="text/css" /> </head> <body> <h2><a href="lettura.php">Torna alla lista degli articoli</a></h2> <form action="action.php" method="post"> <label for="nome">Nome</label> <input type="text" id="nome" name="nome" /> <label for="mail">La tua mail</label> <input type="text" id="mail" name="mail" /> <label for="commento">Inserisci il tuo comento</label> <input type="text" id="commento" name="commento" /> <input type="submit" name="scrivi" value="scrivi" /> </form> </body> </html>
2 invio ad action.php che mi salva i dati in un file *.txt
<?phpinclude("../testu_mio/setting.php"); /************************* SCRITTURA **************************/ if(isset($_POST['scrivi'])) { if(!is_writable($my_database_txt)){ exit("il file non ha i permessi di scrittura!"); } // riceviamo i dati e li filtriamo $bad_char = array("|", "\r\n", "\r", "\n"); $nome = str_replace($bad_char, "", $_POST['nome']); $mail = str_replace($bad_char, "", $_POST['mail']); $commento = str_replace($bad_char, "", $_POST['commento']); $ip = $_SERVER['REMOTE_ADDR']; // apriamo il file $open = fopen($my_database_txt, "a+"); // scriviamo i dati separati dal carattere separatore fwrite($open, $nome."|".$ip."|".$mail."|".$commento."\r\n"); // chiudiamo il file fclose($open); // ritorniamo nella pagina di visualizzazione header("location: lettura.php"); exit; } /************************* ELIMINARE UN RIGO **************************/ else if(isset($_GET['delete'])) { // creiamo l'array con tutti i righi $array_righi = file($my_database_txt); // eliminiamo dall'array il rigo unset($array_righi[$_GET['delete']]); // apriamo il file resettando il contenuto $open = fopen($my_database_txt, "w"); foreach($array_righi as $key => $value){ // ri-scriviamo tutti i righi (rimanenti) fwrite($open, $value); } fclose($open); // ritorniamo nella pagina di visualizzazione header("location: letturamod.php"); exit; } /************************ MODIFICARE UN RIGO *************************/ else if(isset($_POST['modifica']) AND isset($_POST['row_update'])) { // creiamo l'array con tutti i righi $array_righi = file($my_database_txt); // riceviamo i dati e li filtriamo $bad_char = array("|", "\r\n", "\r", "\n"); $nome = str_replace($bad_char, "", $_POST['nome']); $ip = str_replace($bad_char, "", $_POST['ip']); $mail = str_replace($bad_char, "", $_POST['mail']); $commento = str_replace($bad_char, "", $_POST['commento']); // ri-scriviamo il rigo (che sostituirà il precedente) $array_righi[$_POST['row_update']] = $nome."|".$ip."|".$mail."|".$commento."\r\n"; // apriamo il file resettando il contenuto $open = fopen($my_database_txt, "w"); foreach($array_righi as $key => $value){ // ri-scriviamo tutti i righi fwrite($open, $value); } fclose($open); // ritorniamo nella pagina di visualizzazione header("location: letturamod.php"); exit; } ?>
3 vado a leggere il contenuto del file *.txt
<html><head> <link rel="stylesheet" href="../testu_mio/style.css" type="text/css" /> </head> <body> <h1>GuestBook</h1> <h2><a href="../testu_mio/form_insert.php">Inserisci una nuova recensione</a></h2> <?php include('../testu_mio/setting.php'); $array_righi = file($my_database_txt); foreach($array_righi as $key => $commenti){ list($nome, $ip, $mail, $commento) = explode("|", $commenti); echo ' <p> Nome: ' .$nome. '<br /> Ip : ' .$ip. '<br /> Mail: ' .$mail. '<br /> Il Suo Commento: ' .$commento. '<br /> </p> <hr />'; } ?> </body> </html>
4 tramite un form di update volevo abilitare la lettura dei dati inseriti inserendo una spunta
<?phpinclude("setting.php"); if(!isset($_GET['row'])){ header("location: lettura.php"); exit; } $array_righi = file($my_database_txt); if(!isset($array_righi[$_GET['row']])){ exit('errore nella chiave dell\'array'); } list($nome, $ip, $mail, $commento) = explode("|", $array_righi[$_GET['row']]); ?> <html> <head> <link rel="stylesheet" href="style.css" type="text/css" /> </head> <body> <h2><a href="lettura.php">Torna alla lista degli articoli</a></h2> <form action="action.php" method="post"> <label for="nome">Nome</label> <input type="text" id="nome" name="nome" value="<?php echo htmlentities($nome, ENT_QUOTES); ?>" /> <label for="ip">Ip</label> <input type="text" id="ip" name="ip" value="<?php echo htmlentities($ip, ENT_QUOTES); ?>" /> <label for="mail">Mail</label> <input type="text" id="mail" name="mail" value="<?php echo htmlentities($mail, ENT_QUOTES); ?>" /> <label for="commento">Il suo Commento</label> <input type="text" id="commento" name="commento" value="<?php echo htmlentities($commento, ENT_QUOTES); ?>" /> <label for="abilita">Abilta commento</label> <input type="checkbox" name="online"> <input type="hidden" name="row_update" value="<?php echo $_GET['row']; ?>" /> <input type="submit" name="modifica" value="modifica" /> </form> </body> </html>
In conclusione vorrei che al passo 3 ( la lettura del file) vengano fuori solo i dati abilitati dal form update.
E' possibile, al momento l'unica via di uscita per me e MySql.Ringrazio in anticipo per la pazienza
happyman
-
Ciao happyman,
le modifiche che dovresti fare sono abbastanza semplici:
-
quando inserisci un commento, come valore di default, aggiungi 0 nella riga
simone|127.0.0.1|email|commento|0 -
aggiorna il form di update:
nella funzione list aggiungi una variabile $online.
$online sarà di tipo string quindi dovrai eliminare gli eventuali spazi e controllare il suo valore boolean (boolval) assegnandola ad una variabile ($is_online).
$is_online = $online ? "checked" : null;
se $online == 1, $is_online gli assegno come valore "checked", altrimenti nullaggiungi value="1" e stampa $is_online alla checkbox
quando invii il form avrai una variabile $_POST['online'] con valore 1 se selezionata, altrimenti NULL.- action.php
crea una variabile $abilita e se $_POST['online'] non è null assegni il valore 1 altrimenti 0.
aggiungi la variabile $abilita a $array_righi
$array_righi[$_POST['row_update']] = $nome."|".$ip."|".$mail."|".$commento."|".$abilita."\r\n";
- lettura.php
nel foreach aggiungi una variabile $online nella funzione list. anche qui, elimini gli spazi e controlli il valore dopodichè
se $online == false continue;
spero di essere stato chiaro
-