salve a tutti... ho scoperto questa pillola solo ora... io ho (provato) a creare un sistema di commenti basato su db testuale. Rispetto a quello presente in questa pillola ho aggiunto un "campo" all'inizio di ogni riga autoincrementante (tipo mysql) in modo da lavorarci meglio in caso di eliminazione di singolla riga o di modifica.
Vi faccio vedere come ho fatto.
Premetto: ciò che posto è tecnicamente funzionante (ma ho paura di bug nascosti).
Siccome sto studiando il php (tecnica: imparare facendo) se volete dagli uno sguardo sarei felicissimo di ricevere il vostro parere...
In questa sede posto solo lo script che inserisce i dati ne db, quello che elimina e quello che modifica
SCRIPT PER L'INSERIMENTO DI "RECORD"
SCRIPT DI ELIMINAZIONE DI "RECORD"Codice PHP:<?php
/*RICEVO I DATI - ho rimosso isset() e empty() per snellire il codice*/
$nome=$_POST['nome'];
$email=$_POST['email'];
$commento=$_POST['commento'];
$pagina=$_POST['pagina'];/campo hidden identificativo della pagina
$destinazione=$_POST['return'];/campo hidden del form con value=$_SERVER['PHP_SELF'];
/*IMPOSTO DATA ORA*/
$data = date("d-M-y");
$ora = date("G:i");
/*CREAZIONE NUOVO "RECORD" NEL DB*/
/*ID PROGRESSIVO RISPETTO A QUELLO PIU' GRANDE PRESENTE*/
$contenuto=file("db.txt");
$num_righe=count($contenuto);
for($i=0;$i<$num_righe;$i++) {
$singola_riga=explode("§-§",$contenuto[$i]);
$array_id=array();
array_push($array_id, $singola_riga[0]);
}
$max=max($array_id);
$new_id=$max+1;
/*NUOVO RECORD*/
$new_record="\r\n".$new_id."§-§".$nome."§-§".$email."§-§".$commento."§-§".$data."§-§".$ora."§-§".$pagina."§-§";
/*SCRIVO IL NUOVO RECORD NEL DB*/
$open=fopen("db.txt","a+");
fwrite($open, $new_record);
/*RITORNO DA DOVE SONO VENUTO*/
header("location: $destinazione");
?>
SCRIPT DI MODIFICAZIONE "RECORD" (praticamente è uguale all'elimina... cambia solo il secondo elemento dello str_replace che non è più "" ma contiene il record modificato)Codice PHP:<?php
$action=$_GET['action'];
$id=$_GET['id'];
if($action=="elimina")
{
/lettura di ogni riga
$contenuto=file("db.txt") or die ("problemi nelle lettura del db");
$num_righe=count($contenuto);
/le scorro tutte con for
for($i=0;$i<$num_righe;$i++)
{
/con explode estraggo isolo i vari campi
$singola_riga=explode("§-§",$contenuto[$i]);
/se il campo id coincide con quello inviato tramite get
if($id==$singola_riga[0])
{
/prendo il record che voglio eliminare
$vecchio_record=$id."§-§$singola_riga[1]§-§$singola_riga[2]§-§$singola_riga[3]§-§$singola_riga[4]§-§$singola_riga[5]§-§$singola_riga[6]§-§\r\n";
/prendo tutto il contenuto del db
$tutti_commenti=file_get_contents("db.txt") or die ("errore nella lettura del db");
/sostituisco il vecchio record con il nulla ""
$new_contenuto=str_replace($vecchio_record, "", $tutti_commenti);
/elimino il file
unlink("db.txt") or die ("errore di cancellazione");
/ne apro uno nuovo
$open=fopen("db.txt","a+");
/ci scrivo il contenuto nuovo
fwrite($open, $new_contenuto);
/chiudo il file
fclose($open);
}
}
/ritorno al pannello di amministrazione
header("location: admin.php");
}
?>
Giudicatemi ma nnn siate severi se ho fatto qualche grande fesseria...Codice PHP:
<?php
$action=$_GET['action'];
$id=$_GET['id'];
$nome=$_GET['nome_modificato'];
$commento=$_GET['commento_modificato'];
if($action=="modifica")
{
/lettura di ogni riga
$contenuto=file("db.txt") or die ("problemi nelle lettura del db");
$num_righe=count($contenuto);
/le scorro tutte con for
for($i=0;$i<$num_righe;$i++)
{
/con explode estraggo isolo i vari campi
$singola_riga=explode("§-§",$contenuto[$i]);
/se il campo id coincide con quello inviato tramite get
if($id==$singola_riga[0])
{
/prendo il record che voglio eliminare
$vecchio_record=$id."§-§$singola_riga[1]§-§$singola_riga[2]§-§$singola_riga[3]§-§$singola_riga[4]§-§$singola_riga[5]§-§$singola_riga[6]§-§\r\n";
/costruisco il nuovo record
$nuovo_record=$id."§-§".$nome."§-§$singola_riga[2]§-§".$commento."§-§$singola_riga[4]§-§$singola_riga[5]§-§$singola_riga[6]§-§";
/prendo tutto il contenuto del db
$tutti_commenti=file_get_contents("db.txt") or die ("errore nella lettura del db");
/sostituisco il vecchio record con il nuovo
$new_contenuto=str_replace($vecchio_record, $nuovo_record, $tutti_commenti);
/elimino il file
unlink("db.txt") or die ("errore di cancellazione");
/ne apro uno nuovo
$open=fopen("db.txt","a+");
/ci scrivo il contenuto nuovo
fwrite($open, $new_contenuto);
/chiudo il file
fclose($open);
}
}
/ritorno al pannello di amministrazione
header("location: admin.php");
}
?>

Rispondi quotando