Salve,
data la disponibilità e la competenza dimostrata da questa comunità nell'aiutare anche un utente inesperto come me vi sottopongo un altro problema che ho riscontrato..
sto creando una semplice applicazione che mi consenta di modificare o cancellare i dati inseriti in un database di testo mediante un form..
la parte relativa all'azione cancella funziona bene mentre non mi riesce di far funzionare il modifica..
quando lo lancio come risultato mi ritrovo l'intero database cancellato ed esclusione della prima riga..
vi posto il mio codice sperando nel vostro aiuto..
utenti.txt (è il database di testo nel quale andare a fare le modifiche)
---------------
1|Roberto|Bianconi|Robysdc|roby@libero.it||Underda rk|no
2|Roberto|Bianconi|Robysdc|roby@libero.it||Underda rk|no
3|max|teo|max|max@libero.it|s|Harbinger|no
4|erik|pettinari|lillo|lillo@tin.it|Guild|Dragoney e|si
visualizza.php (è la pagina che recupera i dati dal database. li visualizza e consente di scegliere se modificare o cancellare la riga)
Codice PHP:
<table>
<td valign="top" background="immagini/Aberrations_r3_c1.jpg"><p align="center"></p></p><table width="750" p align="center" border="0" cellpadding="0" cellspacing="0" bordercolor="#000000">
<tr>
<td><?php
$textfile=fopen("utenti.txt", "r");
while ($rigafile=fgets($textfile,1024)) {
$campiriga=explode("|", $rigafile);
$idID=$campiriga[0];
$idnome=$campiriga[1];
$idcognome=$campiriga[2];
$idnick=$campiriga[3];
$idmail=$campiriga[4];
$idversione=$campiriga[5];
$idpreferito=$campiriga[6];
$idcontinua=$campiriga[7];
echo "<tr><td>$idID</td> <td>$idnome</td> <td>$idcognome</td> <td>$idnick</td> <td>$idmail</td> <td>$idversione</td> <td>$idpreferito</td> <td>$idcontinua</td> <td>[url='admin.php?row=$idID&action=modifica']modifica[/url]</td> <td>[url='admin.php?row=$idID&action=cancella']cancella[/url]</td></tr>";
}
fclose($textfile);
?></td>
</tr>
</table>
admin.php (il file che gestisce le operazioni di cancellazione e modifica)
---------------------
Codice PHP:
<?php
$azione=$_GET["action"];
$riga=$_GET["row"];
if ($azione=='cancella'){
$textfile = fopen("utenti.txt", "r");
$textfile_new = fopen("utenti_new.txt", "a");
while ($rigafile = fgets($textfile,1024)) {
$campiriga = explode("|", $rigafile);
$idriga = $campiriga[0];
if ($idriga <> $riga) {
fwrite($textfile_new, $rigafile);
}
}
fclose($textfile);
fclose($textfile_new);
unlink("utenti.txt");
rename("utenti_new.txt","utenti.txt");
echo "Cancellazione eseguita con successo
";
}
if ($azione=='modifica'){
$textfile = fopen("utenti.txt", "r");
while ($rigafile = fgets($textfile,1024)) {
$campiriga = explode("|", $rigafile);
$idriga = $campiriga[0];
if ($idriga == $riga) {
$idID=$campiriga[0];
$idnome=$campiriga[1];
$idcognome=$campiriga[2];
$idnick=$campiriga[3];
$idmail=$campiriga[4];
}
}
fclose($textfile);
echo "
<html>
<head>
<tr>
<td></td>
<td valign='top' ><p align='center'></p>
<p align='center'></p>
<p align='center'></p>
<p align='center'>PANNELLO DI AMMINISTRAZIONE</p>
<table width='750' border='0' align='center' cellpadding='0' cellspacing='0' bgcolor='#CCCCCC'>
<tr>
<td>
<form method='post' action='update.php'>
<div align='center'>
<span class='Stile45'>
ID: <input name='id' type='text' size='5' value='$idID'>
NOME: <input name='nome' type='text' size='10' value='$idnome'>
COGNOME: <input name='cognome' type='text'size='10' value='$idcognome'>
NICK: <input name='nick' type='text'size='10' value='$idnick'>
EMAIL: <input name='email' type='text' id='email' size='10' value='$idmail'></p>
<p align='center' class='Stile45'>
<p align='center'> <input type='submit' name='invia' value='Modifica'>
</p>
</div>
</form></td>
</tr> </table>
<p align='center'></p>
<p align='center'></p>
<p align='center'></p>
<p align='center'></p>
<p align='center'></p>
<p align='center'></p>
<table>
<tr></tr>
</table>
</body>
</html>";
}
?>
update.php (il motore che dovrebbe modificare il database testuale...)
-------------------
Codice PHP:
<?php
$riga=$_POST["id"];
// DEBUG echo "l'ID è: $riga"; fin qui il codice funziona e mi riconosce l'ID della riga da cancellare
$textfile = fopen("utenti.txt", "r");
$textfile_new = fopen("utenti_new.txt", "a");
while ($rigafile = fgets($textfile,1024)) {
$campiriga = explode("|", $rigafile);
$idriga = $campiriga[0];
if ($idriga == $riga) {
$cID=$_POST["id"];
$cnome=$_POST["nome"];
$ccognome=$_POST["cognome"];
$cnick=$_POST["nick"];
$cmail=$_POST["email"];
$nuovariga="$cID|$cnome|$ccognome|$cnick|$cmail \n";
// DEBUG echo $nuovariga;
// ERRORE... non mi scrive questo echo quindi credo che $idriga == $riga è sempre falsa....
fwrite($textfile_new, $nuovariga);
} else {
fwrite($textfile_new, $rigafile);
}
fclose($textfile);
fclose($textfile_new);
unlink("utenti.txt");
rename("utenti_new.txt","utenti.txt");
echo "Aggiornamento eseguito con successo
";
}
?>
come vi dicevo, quando clicco sul link modifica (dal file visualizza.php), l'applicazione (admin.php) recupera la giusta riga dal database (utenti.txt) e la mostra nel form;
a questo punto quando dal form, modificati i valori cerco di riscrivere sul database i valori modificati l'applicazione (update.php) mi dice "Aggiornamento eseguito con successo" ma in realtà mi ritrovo con un database contenente soltanto la prima riga.. in pratica perdo tutte le righe fatta eccezione per la prima..
ho provato una sorta di debug rozzo di update.php ma nn ne sono venuto a capo
spero possiate aiutarmi spiegandomi magari in maniera semplice (sono davvero un novellino...) dove sbaglio
Grazie anticipatamente a tutti voi