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ì:
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
(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
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)
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)
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ì:
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
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>
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;
}
});
}
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;
}
}
}
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);
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']) . " ";
}
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';
spero possiate essermi di aiuto in qualche modo, grazie mille
scusate se son stato prolisso xD