[PHP]lettura stringa da file e riconoscimento caratteri

starsuper
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.

Risposte
Rggb1
"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.

starsuper
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.

Rggb1
Ora mi torna. Credo explode() vada benissimo, magari in questo modo
list(\$username, \$password)=explode(" ", \$line);

così eviti di usare/creare un array.

hee136
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.

Rggb1
@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.

starsuper
Ho fatto cosi

$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.

Rggb1
Per vedere il carattere \$ devi metterci un \ davanti, poiché il dollaro è il format-tag delle formule.
\$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.

starsuper
puo essere quello la causa del problema?

Rggb1
Può essere; metti un po' di codice debug:
echo "trovata linea '\$user', composta da '\$us' e '\$pa'"

o qualcosa di simile, subito prima di if()...

starsuper
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:
<?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

hee136
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.

hee136
Perchè alcune righe iniziano con lo slash?

Scusa ma non capisco la seguente istruzione:
if (!a≺i=fopen(users.txt,r))

starsuper
per vedere il codice originale, premi su quote ;)

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.