PDA

View Full Version : [PHP]Errore compilazione su una action


starmar
14-02-2011, 13:45
Salve a tutti ho un file di testo su cui ho salvato i miei utenti come nome e pwd separati da uno spazio. Adesso ho bisogno che tramite un form e una actio su di essa verifichi se l'utente inserito è effettivamente registrato oppure no.
Il codice è:


<?php
session_start();
ob_start();
$utente2=$_POST["utente"];
$chiave2=$_POST["chiave"];
if (!$apri = fopen("users.txt","r")) {
echo "Spiacente, non posso aprire il file users.txt";
exit;
}
else {
$apri='users.txt';
#controllo che il file sia accessibile
$apri=fopen("users.txt","r");
# e sul file scrivo utente e vado a capo,la chiave e vado a capo
$futenti=file_get_contents('users.txt');
fclose($apri);
$utenti=explode("\n",$futenti);
foreach($utenti as $user=>$password){
list($us,$pa)= explode(" ",$user);
if (!strcmp($us,$utente2)&&(!strcmp($pa,$chiave2))){
$found = true;
break;
}
if(isset($found)) {
echo "Login corretto";
}
}
?> ---->line 28




errore:

\Warning: Unexpected character in input: '' (ASCII=30) state=1 in /Sites/PHP/PROGETTO/config.php on line 5

\Warning: Unexpected character in input: '' (ASCII=29) state=1 in /Sites/PHP/PROGETTO/config.php on line 5

\Parse error: syntax error, unexpected send in /Sites/PHP/PROGETTO/config.php on line 28

Non riesco a capire,il codice non si compila nonostante a livello di sintassi mi sembri tutto corretto. Vi ringrazio.

bobbytre
15-02-2011, 01:43
Ti manca una parentesi graffa a chiudere il blocco ELSE del primo IF

indentando il codice in maniera pulita questi errori si evitano da soli oltre che il tutto risulta molto piu facile da leggere


<?php

session_start();
ob_start();
$utente2=$_POST["utente"];
$chiave2=$_POST["chiave"];

if (!$apri = fopen("users.txt","r"))
{
echo "Spiacente, non posso aprire il file users.txt";
exit;
}
else
{
$apri='users.txt';
#controllo che il file sia accessibile
$apri=fopen("users.txt","r");
# e sul file scrivo utente e vado a capo,la chiave e vado a capo
$futenti=file_get_contents('users.txt');
fclose($apri);
$utenti=explode("\n",$futenti);

foreach($utenti as $user=>$password)
{
list($us,$pa)= explode(" ",$user);

if (!strcmp($us,$utente2)&&(!strcmp($pa,$chiave2)))
{
$found = true;
break;
}
if(isset($found))
{
echo "Login corretto";
}
}
}


In oltre il blocco else mi sembra che contenga diversi errori ( fopen seguito da file_get_contents seguito da fclose ??? )

cosi come anche il foreach non fa assolutamente quello vorresti.
$user=>$password : $user contiene l'indice dell'array non il nome utente e $password l'intera riga del file di testo
non gestisci il carattere di fine linea quindi difficilmente la comparazione successiva puo avere esito positivo

e ammesso che correggi gli errori e trovi la corrispondeza user-password arrivati a questo punto

if (!strcmp($us,$utente2)&&(!strcmp($pa,$chiave2))){
$found = true;
break;
}
if(isset($found)) {
echo "Login corretto";
}

in nessun caso riusciresti a visualizzare "Login Corretto"