Ciao a tutti ho bisogno di aiuto per il codice che ho postato.
Il codice nel contesto fa egregiamente il suo lavoro per l’eliminazione delle righe in base alla ricerca della prima parte del testo.
In pratica se il testo contiene ad esempio:
Arancia,aaa,rrr
il programma ricerca la parola > Arancia < e da qui viene eliminata tutta la riga contenete la suddetta parola.
Fino a qui tutto ok. L'eliminazione della riga viene effettuata tramite pulsante radio posto accanto alla riga.
Una volta selezionata premendo l'apposito pulsante posto in basso, si elimina.
Il MALFUNZIONAMENTO avviene solo quando si elimina l'ultima riga, o meglio la riga viene eliminata regolarmente e correttamente, ma rimane il pulsante radio anche se a sinistra non è più presente la riga effettivamente eliminata.
Personalmente ho il dubbio che sia un problema di php versione 8.
Prima di chiedere il vostro aiuto ho ribaltato una trentina di volte il codice, ma il risultato è sempre lo stesso, eliminazione ok, ma pulsante radio solo per l'ultimo elemento sempre presente anche dopo il delete.
Perché succede questo?
Come si può ovviare all'inconveniente?
Grazie in anticipo.
Il codice seguente è solo una piccola parte di un progetto più complesso.
Il file deve avere come nome ---> prova.php
codice:
<!DOCTYPE HTML>
<html lang="it">
<head>
<title>selezione - elimina - aggiungi</title>
<style>
table {
font-family: verdana, sans-serif;
/* border-collapse: collapse; */
text-align: center;
width: 450px;
border: 1px solid black;
td {
border: 1px solid #dddddd;
text-align: center;
padding: 8px;
}
.styled {
--width: 150px;
--height: calc(var(--width) / 5);
width: var(--width);
height: var(--height);
position: relative;
display: inline-block;
border: 0;
padding: 0 15px;
font-size: 15px;
text-align: center;
color: #fff;
background-color: rgba(0, 0, 0, 1);
}
}
</style>
</head>
<?php
if(isset($_POST["delete_data"])){
$filename = "data.txt";
$riga = $_POST['delete'];
$delete = $riga;
$divider = explode(",", $riga); // questa istruzione serve per prendere solo il primo elemento contenente il nome
$delete = $divider[0]; // altrimenti non funziona correttamente
if ($delete != "") { // Controlla se la stringa è vuota
eliminaLinea($filename,$delete);
}
}
function eliminaLinea($file,$string)
{
// echo "-----a------";
$i = 0; $j = 0; $array = array();
$i = 0; $array = array();
$read = fopen($file, "r") or die("can't open the file");
while(!feof($read)) {
$array[$i] = fgets($read);
// echo $array[$i]; echo "<br>";
++$i;
}
// print '<pre>'; // Stampa gli array
// print_r($array);
// print '</pre>';
fclose($read);
echo "<br>";
$write = fopen($file, "w") or die("can't open the file");
foreach($array as $a) {
if(!strstr($a,$string)) {
fwrite($write,$a);
// echo $a; echo "<br>";
}
// echo $write; echo "<br>"; // questo stampa ---> Resource id #
}
// print '<pre>'; // Stampa gli array
// print_r($array);
// print '</pre>';
fclose($write);
}
?>
<body>
<form action="prova.php" method="post">
<table>
<th style="width:70%">Dato da eliminare</th>
<th style="width:30%" >Seleziona</th>
<?php
$f = @fopen('data.txt', 'r');
while(@!feof($f)){
$riga = fgets($f);
// print '<pre>'; // Stampa gli array
// print_r($riga);
// print '</pre>';
?>
<tr>
<td><?php echo $riga; ?>
</td>
<td><input type="radio" name="delete" value="<?php echo $riga; ?>">
</td>
</tr>
<?php
}
?>
<tr>
<td>
<input class="favorite styled" type="submit" name="delete_data" value="Elimina riga">
</td>
<td>
</td>
</tr>
</table>
</form>
</body>
</html>
file di testo deve avere come nome ---> data.txt
Il formato del teso deve essere così con il ritorno a capo per ogni riga, ogni riga ha come separatore la virgola.
codice:
Pesca,ppp,eee
Arancia,aaa,rrr
Mela,mmm,eee
Susina.sss,uuu
Albicocca,aaa,lll
Anguria,aaa,nnn
Frutto della passione.fff,rrr
Pera.ppp,eee