-
Problema lettura file
Buongiorno a tutto il forum. Il mio scopo e' quello di scrivere un file e controllare prima della scrittura se il nominativo e' presente. il Codice e' il seguente:
Codice PHP:
<html>
<head>
<title>
Opeazioni con i file
</title>
</head>
<body >
<h1>
Inserimento nomi
</h1>
<?
if (isset($_REQUEST['nascosto'])){
foreach($_REQUEST['strumento'] as $value)
{
$nome = $_REQUEST['nome'];
$cognome = $_REQUEST['cognome'];
$nome = ucfirst($nome);
$cognome = ucfirst($cognome);
$value = ucfirst($value);
if(leggifile($nome,$cognome,$value)){
scrivifile($nome,$cognome,$value);
}else{
echo "Nominativo Presente";
}
}
}else{
?>
<table border = "0" align = "center">
<form method = "post" action = "<? $_SERVER['PHP_SELF'];?>">
<tr>
<td>
Nome :
</td>
<td>
<input type = "text" size = "15" name = "nome">
</td>
</tr>
<tr>
<td>
Cognome :
</td>
<td>
<input type = "text" size = "15" name = "cognome">
</td>
</tr>
<tr>
<td>
Seleziona Strumento
</td>
<td>
<select name = "strumento[]">
<option>Flauto</option>
<option>Ottavino</option>
<option>Clarinetto</option>
<option>Clarinetto Contralto</option>
<option>Clarinetto Basso</option>
<option>Oboe</option>
<option>Sax Soprano</option>
<option>Sax Contralto</option>
<option>Sax Baritono</option>
<option>Sax Tenore</option>
<option>Flicorno Soprano</option>
<option>Flicorno Contralto</option>
<option>Flicornino</option>
<option>Corno</option>
<option>Basso in Sib</option>
<option>Trombone</option>
<option>Flicorno Tenore</option>
<option>Flicorno Baritono</option>
<option>Tromba</option>
<option>Batteria</option>
<option>Percussioni</option>
</select>
</td>
</tr>
<tr>
<td align = "center" colspan = "2">
<input type = "submit" value = "Inserisci">
<input type = "hidden" name = "nascosto">
</td>
</tr>
</form>
</table>
<?}?>
<?
function scrivifile($nome,$cognome,$value)
{
$file = fopen("anagrafica.txt","a");
$testo = "$nome $cognome $value \r\n";
if(fwrite($file,$testo) == FALSE){
echo "Inserimento Errato";
}else{
echo "Inserimento Effettuato";
}
}
function leggifile($nome,$cognome,$value)
{
$valoreritorno = TRUE;
$file = fopen("anagrafica.txt","r");
while($names = fscanf($file, "%s\t%s\t%s\n"))
{
list($primo,$secondo,$terzo) = $names;
echo "primo---------------> $primo <br>";
echo "secondo-------------> $secondo <br>";
echo "terzo---------------> $terzo <br>";
if ($primo == $nome && $secondo == $cognome && $terzo == $value){
$valoreritorno = FALSE;
break;
}
}
return $valoreritorno;
}
?>
</body>
</html>
Il problema nasce quando devo leggere il file prima della scrittura........a quanto pare non effettua il ciclo while. Premetto che il file che scrivo e' di questo tipo: pippo rossi flauto \n. Forse sbaglio nell'impostazione della stringa. Non lo so......aiutatemi. Grazie
-
Non è più comodo leggere il file in questo modo?
Codice PHP:
$file=file("anagrafica.txt");
for($i=0;$i<count($file);$i++) {
list($primo,$secondo,$terzo)=explode(" ",trim($righe[$i]));
...
-
Scusa la mia ignoranza, ma come testo i campi che passo alla funzione?
-
-
Come vedi dal form, una volta inseriti nome cognome e strumento, vado a vedere se e' gia' presente nel file, se e' presente mando un messaggio altrimento lo scrivo.
-
Ma se lo fai già, cosa ti serve in più?
-
Lo faccio ma non funziona, e' quello il problema. Dal codice sopra mi fa sempre l'inserimento.
-
Hai provato a utilizzare lo script che ti ho scritto prima?
-
Ho provato ma mi da errore tipo questo "Notice: Uninitialized string offset: 0 in c:\programmi\easyphp1-8\www\file\index.php on line 112". Forse sbaglio a scriverlo......va bene cosi'?
Codice PHP:
function leggifile($nome,$cognome,$value)
{
$valoreritorno = TRUE;
$file=file("anagrafica.txt");
for($i=0;$i<count($file);$i++) {
list($primo,$secondo,$terzo)=explode(" ",trim($righe[$i]));
echo $righe[i];
}
return $valoreritorno;
}
Solo che al posto di echo $righe[i](sempre se e' corretto, dovrei testare i campi $nome $cognome e $value.
-
Con il mio script tu dovresti sostituire:
Codice PHP:
$file = fopen("anagrafica.txt","r");
while($names = fscanf($file, "%s\t%s\t%s\n"))
{
list($primo,$secondo,$terzo) = $names;
Con:
Codice PHP:
$file=file("anagrafica.txt");
for($i=0;$i<count($file);$i++) {
list($primo,$secondo,$terzo)=explode(" ",trim($righe[$i]));
-
quello che ho fatto, ma poi.......
-
Non mi sembra che è quello che hai fatto visto ciò che hai scritto prima.
-
Allora non devo richiamare la funzione? Senti sto diventando pazzo....se no ti dispiace mi puoi dire come deve essere strutturata questa parte di codice?
Grazie per la pazienza.
-
Devi prendere il codice che hai scritto tu all'inizio e fare la sostituzione come ti ho spiegato prima.
-
Ho sostituito così
Codice PHP:
function leggifile($nome,$cognome,$value)
{
$valoreritorno = TRUE;
$file=file("anagrafica.txt");
for($i=0;$i<count($file);$i++) {
list($primo,$secondo,$terzo)=explode(" ",trim($righe[$i]));
if ($primo == $nome && $secondo == $cognome && $terzo == $value){
$valoreritorno = FALSE;
break;
}
}
return $valoreritorno;
}
Mi da una serie di errori tipo questi: " Undefined variable: righe in c:\programmi\easyphp1-8\www\file\index.php on line 112
Notice: Undefined offset: 2 in c:\programmi\easyphp1-8\www\file\index.php on line 112
Notice: Undefined offset: 1 in c:\programmi\easyphp1-8\www\file\index.php on line 112"
-
Modifica questa riga:
Codice PHP:
list($primo,$secondo,$terzo)=explode(" ",trim($righe[$i]));
In questo modo:
Codice PHP:
list($primo,$secondo,$terzo)=explode(" ",trim($file[$i]));
-
L'inserimento e il controllo se e' presente lo da, solamente da anche questi errori: Undefined offset: 2 in c:\programmi\easyphp1-8\www\file\index.php on line 112
Notice: Undefined offset: 1 in c:\programmi\easyphp1-8\www\file\index.php on line 112
-
Sembra che qualche riga non sia formattata bene. Prova a scrivere qui il contenuto del file.
-
Angelo Pellegrini Flauto
Angelo Gialli Flauto
Angelo Verdi Flauto
Questo e' quello che mi scrive nel file. Il dubbio mi viene, perche' all'inizio del file c'e' una riga bianca.
-
Se elimini la prima riga lo script non dovrebbe darti errori.
Nello script potresti modificare questa riga:
Codice PHP:
list($primo,$secondo,$terzo)=explode(" ",trim($file[$i]));
In questo modo:
Codice PHP:
$file[$i]=explode(" ",trim($file[$i]));
if (count($file[$i])!=3)
continue;
list($primo,$secondo,$terzo)=$file[$i];
-
Infatti eliminando la prima riga funziona benissimo. Approfitto per la tua bravura e pazienza. Dato che questo script che mi hai suggerito non mi e' mai capitato di applicarlo, ti chiedo troppo se me ne dai una delucidazione + approfondita? Grazie ancora
-
Intendi il pezzo che ti ho scritto nell'ultimo messaggio?
-
Anche......ma sopratutto quello prima
-
-
Molto gentile e grazie ancora