controllo dati

KuroKami

Nuovo Utente
18 Mar 2014
4
0
0
salve a tutti :)
sto sviluppando uno script di registrazione in html, php js e ovviamente mysql
praticamente, non posto tutto il codice, solo la parte inerente al problema, nel form di registrazione ho messo dei controlli js per quasi ogni campo, in particolare email e username, impostando l'onblur con la funzione di controllo, così:
Codice:
<tr>
        <td><b>Email*</b><br /><small>Inserisci una mail per <br />convalidare la registrazione.</small></td>
        <td><input tabindex="0" id="email" type="email" name="email" required="required" autocomplete="on" onblur="emailControl()" /></td>
        <td class="error" id="errorEmail"></td>
</tr>
nella 3a colonna della tabella js mi stampa una frase, a seconda se i dati immessi vadano bene o meno, ecco il codice relativo al controllo js
Codice:
function emailControl()
{
	//controllo email
	var error = document.getElementById("errorEmail");
	var emailValue = document.registrazione.email.value;
	var emailControl = /^([a-zA-Z0-9.-_])+\@([a-zA-Z0-9.-_])+\.([a-zA-Z])+$/;
	jQuery.post('control.php', {email: emailValue}, function(result)
	{	
		if (result == 'false')
		{
			error.innerHTML = "<i style='color:#F00'>l'email inserita è già in uso</i>";
			document.getElementById('email').style.border =  '1px solid #F00';
			control[5] = 0;
			return false;
		}
		else if (result == 'true' && emailControl.test(emailValue))
		{
			error.innerHTML = "<i style='color:#0F0'>email valida</i>";
			document.getElementById('email').style.border =  '1px solid #0F0';
			control[5] = 1;
			return true;
		}
		else if (emailValue.length == 0)
		{
			error.innerHTML = "<i style='color:#F00'>il campo è vuoto!</i>";
			document.getElementById('email').style.border =  '1px solid #F00';
			control[5] = 0;
			return false;
		}
		else if (!emailControl.test(emailValue))
		{
			error.innerHTML = "<i style='color:#F00'>l'email inserita non ha un formato corretto</i>";
			document.getElementById('email').style.border =  '1px solid #F00';
			control[5] = 0;
			return false;
		}
	});
}
(chiedo scusa se è un po spartano ma sono alle prime armi, e vorrei arrivare da solo, col tempo, a migliorare lo script, ma più avanti, ora è importante finire il sito e far si che funzioni)
lo script, ne commento il funzionamento anche se sapete benissimo cosa fa xD, e lo passa allo script "control.php" (che posterò sotto il codice inerente alle email) tramite jquery, e mi fa tutti i vari controlli, con la reg exp, lunghezza ecc (il vettore control[] mi serve per una procedura nello script di registrazione, è irrilevante ora)
il codice inerente alla mail è questo
Codice:
else if ($_POST['email'])
{
	$query = "SELECT * FROM utenti";
	$result = mysql_query ($query, $db) or die (mysql_error($db));
	while ($row = mysql_fetch_assoc($result))
	{
		if (strtolower($row['email']) == strtolower($_POST['email']))
		{
			echo 'false';
			break;
		}
		else
                {
		        echo 'true';
                        break;
                 }
	}
}
ora non so se ho ben compreso lo script io, ma in sostanza prendo tutti i record nel db, li assegno a result, poi assegno al vettore row tutti i dati, con un ciclo while (detto grossolanamente)
quindi il while continuerà finche ci sono assegnazioni da fare
a ogni ciclo viene eseguito un test tra la mail presente nel db, convertita in minuscolo, e la mail inserita dall'utente, anche questa convertita in minuscolo
questi invece sono i record presenti nel db (solo 2 ovvero lol)
Codice:
VALUES
(1, 0, 'kuro', 'kami', 'KuroKami', 'df70f9b975b42116ee6c0231a7e6ead0bbb283aa', '[email protected]', 'maschio', 'girasoli', 'mestre', 'anime, giochi, programmazione, GIAPPONE', 1391610367, 1391610367, '0', 1, 0, 0),
(5, 0, 'Francesco', 'Losito', 'shinigami', '7f873de4dbf9caba1cbcba9799e821148e8d8bca', '[email protected]', 'maschio', 'primule', 'venezia', 'game and anime', 1391941782, 1391941782, '0', 1, 0, 0);
quindi il ciclo sopra descritto dovrebbe ciclare 2 volte controllando entrambe le email tramite l'if
bene ho fatto uno script ugual, e solo che invece dell'if ci ho messo un echo, per vedere se prendeva tutti i valori della tabella, ebbene lo fa, ecco lo script (scritto su una pagina bianca)
Codice:
$query = "SELECT * FROM utenti";
$result = mysql_query ($query, $db) or die (mysql_error($db));

while ($row = mysql_fetch_array($result))
{
	echo strtolower($row['email']) . " ";
}
effettivamente quindi mi stampa le 2 mail
ora succede questo: quando provo a inserire le email (o anche l'user, lo script è lo stesso), se metto [email protected] (o KuroKami) lo script mi restituisce false e relativo messaggio di errore, se invece inserisco [email protected] (o shinigami) mi dice che l'user è disponibile e mi restituisce true, quindi in sostanza non lo fa nemmeno il controllo
la mia domanda, è perchè si comporta così sto maledetto?
tengo a precisare che ho controllato con gli strumenti di sviluppo di firefox cosa succede nell'esecuzione, e appunto se non immetto il primo record, control.php mi restituisce true, ho provato anche a cambiare le funzioni di fetch, a usare un for invece del while, entrambi, ma nulla
un paio di settimane fa quando funzionava lo script era davvero semplice, era così:
Codice:
$query = "SELECT * FROM utenti";
$result = mysql_query ($query, $db) or die (mysql_error($db));
$row = mysql_fetch_assoc($result);
if (strtolower($row['email']) == strtolower($_POST['email']))
echo 'false';
else
echo 'true';
e funzionava, l'ho riprovto l'altro ieri ma nada quindi ho fatto varie modifiche
spero possiate essermi di aiuto in qualche modo, grazie mille
scusate se son stato prolisso xD
 

marino51

Utente Attivo
28 Feb 2013
3.204
207
63
Lombardia
forse non ho capito nulla ... o forse si

prova togliendo un "break" così

PHP:
		if (strtolower($row['email']) == strtolower($_POST['email']))
		{
			echo 'tovato';		// false
			break;
		}
		else
                {
		        echo 'non trovato';	// true
                }

ciao
Marino
 

KuroKami

Nuovo Utente
18 Mar 2014
4
0
0
già provato
ho testato lo script su IE, opera e firefox, tutti aggiornati all'ultima versione
il break server per uscire dal ciclo una volta trovato un valore false (con true non serve)
tecnicamente il ciclo parte ogni volta che si inserisce un nuovo utente e si attiva quindi la funzione di controllo
 

marino51

Utente Attivo
28 Feb 2013
3.204
207
63
Lombardia
PHP:
while ($row = mysql_fetch_assoc($result)) {
if (strtolower($row['email']) == strtolower($_POST['email']))
  { echo 'false'; break; }
else
  { echo 'true';  break; }
}
il ciclo while con i due break viene eseguito una sola volta !!! (scusa)
quindi restituirà false solo se, per caso, email capita nel primo record del db
altrimenti restuirà sempre true
inserisci un terzo record nel db e vedrai che anche in questo caso otterrai true
se per te va bene, vuol dire che è giusto così

un paio di settimane fa quando funzionava lo script era davvero semplice, era così:

PHP:
$query = "SELECT * FROM utenti";
$result = mysql_query ($query, $db) or die (mysql_error($db));
$row = mysql_fetch_assoc($result);
if (strtolower($row['email']) == strtolower($_POST['email']))
echo 'false';
else
echo 'true';
vale lo stesso discorso precedente, la select non contiene nessuna clausola where,
quindi legge tutto il contenuto della tabella e non esegui nessun ciclo per esaminare
tutti i record letti, fai il test solo sul primo record letto,
di conseguenza credo non abbia mai funzionato a meno che tu non facessi test con un solo record

quindi, o non ho capito niente, o proprio non va, o non conoscendo assolutamente mySQL,
quest' ultimo lavora diversamente da MS SQL che uso regolarmente,
... abbandono ...
ciao
Marino
 
Ultima modifica:

KuroKami

Nuovo Utente
18 Mar 2014
4
0
0
PHP:
while ($row = mysql_fetch_assoc($result)) {
if (strtolower($row['email']) == strtolower($_POST['email']))
  { echo 'false'; break; }
else
  { echo 'true';  break; }
}
il ciclo while con i due break viene eseguito una sola volta !!! (scusa)
quindi restituirà false solo se, per caso, email capita nel primo record del db
altrimenti restuirà sempre true
inserisci un terzo record nel db e vedrai che anche in questo caso otterrai true
se per te va bene, vuol dire che è giusto così

nel post precedente al tuo avevo detto che il break nel true non era necessario, l'ho tolto, apparte questo il funzionamento dovrebbe essere questo:
1) inserisco un valore (email o user) nella textbox del form
2) tale valore viene passato a control.php tramite jquery, una volta che l'utente è uscito dalla textbox, grazie all'associazione della funzione di controllo all'onblur del textbox
3) control.php controlla che tipo di valore entra, se email o username, e a seconda di quello che esce esegue uno dei 2 controlli
a - username
b - email
4) control.php ricerce il valore, fa una query di richiamo, dove prende tutto il contenuto della tabella, e assegna il risultato a $result
5) il ciclo while gira fino a quando ci sono assegnazioni dalla matrice $result al vettore $row
6) dentro al ciclo while c'è un if, che controlla i valori estratti dal vettore con quelli passati con jquery immessi dall'utente, tutti in lowercase
a - se c'è una corrispondenza, l'utente non puo usare quell'username, viene stampato false, in modo che jquery possa utilizzarlo per mostrare il messaggio di errore, e un brake interrompe il ciclo
b - se non ci sono corrispondenze mostra true, come sopra, fino alla fine del ciclo
7) una volta ottenuto il risultato voluto, lo script va in standby, ni attesa di altri valori passati da jquery
8) qualora l'utente fornisse un'altra email o user, lo script verrebbe richiamato partendo da 0, quindi anche se nel processo precedente si era intrrotto, richiamandolo di nuovo riparte da 0
quindi non vorrei sbagliare qualcosa nella logica, ma non importa quante volte io inserisca un valore, il ciclo ripartirà sempre da 0 e contiunerà o fino alla fine dando true, o fino al primo false con break finale
è sbagliato quanto detto?

un paio di settimane fa quando funzionava lo script era davvero semplice, era così:

PHP:
$query = "SELECT * FROM utenti";
$result = mysql_query ($query, $db) or die (mysql_error($db));
$row = mysql_fetch_assoc($result);
if (strtolower($row['email']) == strtolower($_POST['email']))
echo 'false';
else
echo 'true';
vale lo stesso discorso precedente, la select non contiene nessuna clausola where,
quindi legge tutto il contenuto della tabella e non esegui nessun ciclo per esaminare
tutti i record letti, fai il test solo sul primo record letto,
di conseguenza credo non abbia mai funzionato a meno che tu non facessi test con un solo record

quindi, o non ho capito niente, o proprio non va, o non conoscendo assolutamente mySQL,
quest' ultimo lavora diversamente da MS SQL che uso regolarmente,
... abbandono ...
ciao
Marino

quando l'ho testato la prima volta, sia che mettevo shinigami, sia che mettevo kurokami, mi restituiva false, con lo script sopra descritto, puo sembrare strano ma succedeva
comunque grazie per l'aiuto
 
Discussioni simili
Autore Titolo Forum Risposte Data
S [MySQL] Controllo dati di una tabella in tempo reale MySQL 0
F Controllo dati sui campi di input tramite php PHP 1
M [PHP] controllo inserimento dati un un form PHP 4
L Query di controllo dati già presenti PHP 1
P invio form non corretto dopo controllo dati PHP 8
K Controllo esistenza dati e inserimento in db ASP.NET 2
P Non funziona il controllo dati con ajax PHP 4
T problema strano con procedura di controllo da database, di dati immessi in un form asp Classic ASP 5
L form controllo con il for "Tutti i dati sono richiesti". PHP 2
S Controllo dati MS Access 0
K Controllo FORM e invio dati al DB PHP 43
P controllo dati form con jquery e php PHP 8
P controllo dati mentre s'inseriscono nel form PHP 17
P controllo dati immediati HTML e CSS 4
P Controllo inserimento dati Javascript 6
A Controllo dati su MYSQL per non sovrascrivere PHP 1
pup3770 Controllo sulla presenza di dati presenti su altra tabella PHP 5
T Impostare un controllo da database, di dati immessi in un form asp Classic ASP 6
T impostare il controllo dei dati immessi dagli utenti su form asp Classic ASP 8
L Controllo dati PHP 2
emanuelevt controllo dati provenienti da tinymce PHP 4
G [Access 2003] Crere un controllo per dati già presenti MS Access 2
L MVC-Controllo Inserimento Dati PHP 6
L Controllo e confronto dati immessi in 2 campi Data in un form (mysql) PHP 1
B Controllo inserimento dati in Campi PHP 0
M pulsante per aprire una maschera che contiene controllo schede MS Access 0
G [PHP] Creare script di prenotazione con controllo disponibilità. PHP 7
Z Controllo giorni MYSQL PHP 0
M Problema con controllo form in real time jQuery 6
MarcoGrazia jquery validate() controllo checkbox jQuery 2
M Controllo del codice fiscale/partita iva PHP 11
S Software windows10 per controllo contenuti web Windows e Software 6
S Controllo appuntamenti disponibili sul db PHP 5
L input (controllo se è stato modificato o no). PHP 1
W Controllo competitors serp SEO e Posizionamento 2
bubino8 [Javascript] popup di controllo elimina dopo window.print(); Javascript 0
M [MS Access] controllo valido se MS Access 8
MarkRed Come indicare, in una maschera, il primo controllo d'input, tipo "SetFocus" jQuery 9
C [PHP] Controllo <select> comportamento anomalo PHP 2
elpirata [Javascript] Controllo campi required non effettuato Javascript 2
A [PHP] Controllo nome utente form di registrazione PHP 4
L [PHP] controllo dimensione immagine per il resize PHP 2
M [ASP] Upload file da form controllo Classic ASP 5
P [PHP] Controllo al checkbox privacy PHP 6
T [php] controllo su estensione file PHP 7
M [PHP] Script per controllo disponibilitá negozio in citta PHP 4
I Recupero accesso pannello di controllo dominio Leggi, Normative e Fisco 2
R [MS Access] CONDIZIONE CHE CAMBIA PROPRIETA' DI UNA CONTROLLO MS Access 7
M [PHP] Dubbio controllo IF PHP 15
M [PHP] Controllo campo cap con trattino oltre ai numeri PHP 3

Discussioni simili