[PHP]lettura stringa da file e riconoscimento caratteri
Salve a tutti... sto facendo un progetto in cui acquisisco dati da un form e li salvo su un .txt, (resgistrazione) ma quando tento di fare il login ho problemi con la verifica dell'account. Devo controllare infatti che il nomeutente e la pwd coincidano nel mio file di testo ... Ho scritto i 2 campi in linea separati da uno spazio e avrei bisogno di una funzione che mi divide in due la stringa quando trova uno spazio, in modo che io possa riconoscere la parte prima come il nomeutente e la seconda come la relativa pwd
xxxxxx_yyyyyy
xxxxxx--->nomeutente
yyyyy--->pwd
come posso fare?? ho provato con implode ed explode ma non credo di aver risolto, grazie.
xxxxxx_yyyyyy
xxxxxx--->nomeutente
yyyyy--->pwd
come posso fare?? ho provato con implode ed explode ma non credo di aver risolto, grazie.
Risposte
"starsuper":
Ho scritto i 2 campi in linea separati da uno spazio
Uhu? Che intendi dire?
Ma usare due edit field (username e password) separati non ti va bene?
"starsuper":
avrei bisogno di una funzione che mi divide in due la stringa
Se explode() non ti va bene, magari strtok()
http://it.php.net/manual/en/function.strtok.php
Però mi sembra una complicazione inutile.
edit field separati? scusami ma sono novizio.
I campi nel file di testo risultano come:
mario ciao
Magari va bene anche exlpode ma non capisco come farla funzionare secondo le mie esigenze. Vorrei una funz che prende (dollarostringa," ") e mi divide la stringa in due parti che io userò a mio piacimento.
I campi nel file di testo risultano come:
mario ciao
Magari va bene anche exlpode ma non capisco come farla funzionare secondo le mie esigenze. Vorrei una funz che prende (dollarostringa," ") e mi divide la stringa in due parti che io userò a mio piacimento.
Ora mi torna. Credo explode() vada benissimo, magari in questo modo
così eviti di usare/creare un array.
list(\$username, \$password)=explode(" ", \$line);
così eviti di usare/creare un array.
Forse ho capito male io ma anzichè dividere la riga del txt, non è più semplice unire i due campi provenienti nel form e poi confrontare riga per riga?
Per unire ti basta il . (se non ricordo male), per dividere ti serve una fuzione.
Per unire ti basta il . (se non ricordo male), per dividere ti serve una fuzione.
@hee136
Il tuo approccio è ugualmente corretto: direi che nell'altro modo il tutto è più "pulito". Considera per esempio il caso in cui, nel file di testo, ci siano due (o più) spazi fra username e password; insomma ogni modo ha pro e contro.
Il tuo approccio è ugualmente corretto: direi che nell'altro modo il tutto è più "pulito". Considera per esempio il caso in cui, nel file di testo, ci siano due (o più) spazi fra username e password; insomma ogni modo ha pro e contro.
Ho fatto cosi
exit;
dove $utente=$_POST['utente'][/code]
Ma non funziona il controllo !!
questa è la pagina di action sul form della regsitrazione, cioè se registro un utente e non esiste lo scrive altrimenti dovrebbe dare un messaggio di errore ! Per inciso la scrittura su file è corretta (riscontro su miofile.txt) e viene effettuata subito prima di $futenti.
per vedere il codice quotate, non so perche ma anche tra i tag non lo riconosce.
$futenti=file_get_contents('miofile.txt'); $utenti=explode("\n",$futenti); foreach($utenti as $user){ list($us,$pa)= explode(" ",$user); if ($us==$utente){ echo "utente già inserito"; }
exit;
dove $utente=$_POST['utente'][/code]
Ma non funziona il controllo !!
questa è la pagina di action sul form della regsitrazione, cioè se registro un utente e non esiste lo scrive altrimenti dovrebbe dare un messaggio di errore ! Per inciso la scrittura su file è corretta (riscontro su miofile.txt) e viene effettuata subito prima di $futenti.
per vedere il codice quotate, non so perche ma anche tra i tag non lo riconosce.
Per vedere il carattere \$ devi metterci un \ davanti, poiché il dollaro è il format-tag delle formule.
Io non userei l'operatore di confronto == con le stringhe, è sempre infido (beh, comunque è questione di gusti), magari è meglio strcmp() o qualcosa del genere.
\$futenti=file_get_contents('miofile.txt'); \$utenti=explode("\n",\$futenti); foreach(\$utenti as \$user){ list(\$us,\$pa)= explode(" ",\$user); if (\$us==\$utente){ echo "utente già inserito"; exit; }
Io non userei l'operatore di confronto == con le stringhe, è sempre infido (beh, comunque è questione di gusti), magari è meglio strcmp() o qualcosa del genere.
puo essere quello la causa del problema?
Può essere; metti un po' di codice debug:
o qualcosa di simile, subito prima di if()...
echo "trovata linea '\$user', composta da '\$us' e '\$pa'"
o qualcosa di simile, subito prima di if()...
HO risolto traimte una flag...
ho bisogno di nuovo di voi, stavolta è il login sul file degli utenti registrati che mi crea problemi, non compila e non capisco il perche:
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
ho bisogno di nuovo di voi, stavolta è il login sul file degli utenti registrati che mi crea problemi, non compila e non capisco il perche:
<?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
Penso sia un errore di copiatura o di distrazione.
Quando vuoi accedere ai valori POST, devi fare:
_POST["chiave"]
Ora devo uscire, più tardi darò un'occhiata meglio.
Quando vuoi accedere ai valori POST, devi fare:
Ora devo uscire, più tardi darò un'occhiata meglio.
Perchè alcune righe iniziano con lo slash?
Scusa ma non capisco la seguente istruzione:
Scusa ma non capisco la seguente istruzione:
if (!a≺i=fopen(users.txt,r))
per vedere il codice originale, premi su quote
