Πρόβλημα ελεγχου username και email με AJAX και post

Κώδικας, πληροφορίες, ερωτήσεις και απαντήσεις σχετικές με την JavaScript.

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Άβαταρ μέλους
george_r1977
Δημοσιεύσεις: 9
Εγγραφή: 15 Αύγ 2007 15:30

Πρόβλημα ελεγχου username και email με AJAX και post

Δημοσίευση από george_r1977 » 01 Μαρ 2009 13:27

Καλησπέρα, πρόσφατα αποφάσισα να ασχοληθώ με ajax και έχω μερικά κολλήματα,απορίες,δυσλειτουργίες που ελπίζω να βρώ απαντήσεις από εδω.

Έχω μια φόρμα εγγραφής μελών και θέλω να γίνεται ο έλεγχος του username και του email πριν από το post της φόρμας. Βάζω :

<form name="myForm" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<input name="username" type="text" id="username" style="background-color:#FFFFFF"/>
<input name="email" type="text" id="email" style="background-color:#FFFFFF"/>
<input id="username_verification" type="hidden" />
<input id="email_verification" type="hidden" />
<input type="submit" name="submit" id="submit" onclick="return doWork();"/>

Η javascript function doWork() είναι :

function doWork(){
if (window.ActiveXObject) {
httpObject = new ActiveXObject("Microsoft.XMLHTTP");
} //telos if
else if (window.XMLHttpRequest) {
httpObject = new XMLHttpRequest();
} //TELOS ELSE IF
// ORISA TO OBJECT GIA TON IE kai GIA TOUS ALLOUS BROWSERS

httpObject.open("GET", "get_username.php?username="+document.getElementById("username").value, true);

httpObject.onreadystatechange = function() {
if (httpObject.readyState == 4 && httpObject.status==200)
{
document.getElementById("username_verification").value = httpObject.responseText; }
} // telos xmlhttp.onreadystatechange

httpObject.send(null);
}
Η αντίστοιχη PHP σελίδα είναι :

if (isset($_GET['username'])){
$username=$_GET['username']; }
include ("connect.php");
$q1=mysql_query("select username from users where binary username='$username' ") or die('ff');
$num=mysql_num_rows($q1);
if ($num==1){
?>1<?php }
else {?>0<?php }

?>


1) Ποια ειναι η σωστή σειρά ? Πρώτα open,μετά οnreadychange και τελος send ? γιατί έχω δει άλλοι να γράφουν open,send και μετά to function onreadystatechange.

Επίσης, έχω παρατηρήσει πως μερικές φορές αργούν να μου επιστραφούν αποτελέσματα στο hidden box username_verification, με αποτέλεσμα να μην γίνεται ο έλεγχος που θέλω.

κανονικά, θα έπρεπε να βάλω (νομίζω) μέσα στο javascript το εξής (και μετά το send) :

if (document.getElementById("username_verification").value == '1'){
alert ("user exists!");
return false;}

Άλλα λόγω της καθυστέρησης που ανέφερα, αμέσως μετά το send καλω τη συνάρτηση some() με κάποια χρονική καθυστερήση.

setTimeout("some()", 600);
}

function some(){
if (document.getElementById("username_verification").value == '1'){
alert ("user exists!");
return false;}
}

Υπάρχει σωστότερος και καλύτερος τρόπος για να μην έχω αυτή την καθυστέρηση στο αποτέλεσμα και άρα στον έλεγχο ?

2)Επίσης μετά το setTimeout("some()", 600);
δεν μπορώ να εκτελέσω το submit. Αν βάλω return false;
προφανώς δεν εκτελείται το submit, αλλά γίνεται ο έλεγχος. Αν δεν βάλω το return false ή αν βάλω return true, γίνεται το submit αλλά δεν γίνεται ο έλεγχος!!! Που κάνω λάθος ???

3) Αν θέλω μετά τον έλεγχο username, να κάνω έλεγχο του email, πρέπει να φτιάξω ένα δεύτερο XMLHttpRequest object ?π.χ. httpObject2 και να στέλνω με get σε δεύτερο αρχείο php?? Γιατί δοκίμασα στο ίδιο με if (isset($_GET['something'])){do this}
else if (isset($_GET['somethingelse'])) {do that} και δεν δούλεψε κανένα από τα δύο.

Σας γράφω και τον πλήρη κώδικα, όπως ακριβώς το έχω γραμμένο για να με βοηθήσετε.
Ευχαριστώ,

<body>
<script language="javascript" type="text/javascript">
function doWork(){
if (window.ActiveXObject) {
httpObject = new ActiveXObject("Microsoft.XMLHTTP");
} //telos if
else if (window.XMLHttpRequest) {
httpObject = new XMLHttpRequest();
} //TELOS ELSE IF
// ORISA TO OBJECT GIA TON IE kai GIA TOUS ALLOUS BROWSERS

httpObject.open("GET", "get_username.php?username="+document.getElementById("username").value, true);
httpObject.send(null);

httpObject.onreadystatechange = function() {
if (httpObject.readyState == 4 && httpObject.status==200)
{
document.getElementById("username_verification").value = httpObject.responseText;
}
} // telos xmlhttp.onreadystatechange


setTimeout("some()", 600);

return false;
}

function some(){
if (document.getElementById("username_verification").value == '1'){
alert ("user exists!");
return false;}
}
</script>


<form name="myForm" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<input name="username" type="text" id="username" style="background-color:#FFFFFF"/>
<input name="email" type="text" id="email" style="background-color:#FFFFFF"/>
<input id="username_verification" type="text" />
<input id="email_verification" type="text" />

<input type="submit" name="submit" id="submit" onclick="return doWork();"/>
</form>

<?php if (isset($_POST['submit'])){
echo 'YES!'; }
?>
</body>

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6230
Εγγραφή: 30 Νοέμ 2004 03:09

Πρόβλημα ελεγχου username και email με AJAX και post

Δημοσίευση από fafos » 01 Μαρ 2009 15:09

sthn forma xrhsimopoieis method=post kai sto ajax zhtas ta dedomena me GET... diorthose to gia arxh..
Οι πάνες και οι πολιτικοί πρέπει να αλλάζονται συχνά για τον ίδιο λόγο...

Άβαταρ μέλους
george_r1977
Δημοσιεύσεις: 9
Εγγραφή: 15 Αύγ 2007 15:30

Πρόβλημα ελεγχου username και email με AJAX και post

Δημοσίευση από george_r1977 » 01 Μαρ 2009 16:09

efxaristw gia thn apanthsh,alla den einai to ena asxeto me to allo ? to post ginetai meta thn epistrofh apotelesmaton toy ajax. epishs pes pos den exo post,to thema na ginetai elegxos mono otan eimai sigouros oti exoun epistrafei apotelesmata pos lynetai?

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6230
Εγγραφή: 30 Νοέμ 2004 03:09

Πρόβλημα ελεγχου username και email με AJAX και post

Δημοσίευση από fafos » 01 Μαρ 2009 16:38

george_r1977 έγραψε:efxaristw gia thn apanthsh,alla den einai to ena asxeto me to allo ? to post ginetai meta thn epistrofh apotelesmaton toy ajax. epishs pes pos den exo post,to thema na ginetai elegxos mono otan eimai sigouros oti exoun epistrafei apotelesmata pos lynetai?
agou zhtas ta apotelesmata me GET, pos einai dynaton na ta vrei mia forma pou stelnei POST?

tha se symvouleua na to psakseis me jquery... des auto: http://www.downloadjavascripts.com/list ... tails.aspx
Οι πάνες και οι πολιτικοί πρέπει να αλλάζονται συχνά για τον ίδιο λόγο...

Άβαταρ μέλους
george_r1977
Δημοσιεύσεις: 9
Εγγραφή: 15 Αύγ 2007 15:30

Πρόβλημα ελεγχου username και email με AJAX και post

Δημοσίευση από george_r1977 » 01 Μαρ 2009 18:07

Eksakoluthow na pistevw pos to na pairnw me GET metavlites pou erxontai me selida pou anoigw 'krifa' me ajax kai na epistrefw tis times sta pedia mias formas, einai asxeto me to oti h forma h idia exei methodo POST. Kai afto giati akoma den exw xrhsimopoieisei to submit ths formas gia na einai POST 'h GET. Aplos allazw times sta pedia me getElementById('something') prin akoma kanw otidipote me thn forma.

Des se parakalw afto to paradeigma pou doulevei KANONIKA:
--------------------------------------------------------------------------
<script language="javascript" type="text/javascript">
function doWork(){
if (window.ActiveXObject) {
httpObject = new ActiveXObject("Microsoft.XMLHTTP");
} //telos if
else if (window.XMLHttpRequest) {
httpObject = new XMLHttpRequest();
} //TELOS ELSE IF
// ORISA TO OBJECT GIA TON IE kai GIA TOUS ALLOUS BROWSERS
httpObject.open("GET", "artist.php?artist="+document.getElementById("artist").value, true);

httpObject.onreadystatechange = function() {
if (httpObject.readyState == 1)
{
document.getElementById("t-shirt").options[0].text = "Loading...";
document.getElementById("t-shirt").disabled=true;
}
else if (httpObject.readyState == 4 && httpObject.status==200)
{
document.getElementById("t-shirt").disabled=false;
document.getElementById("t-shirt").innerHTML = httpObject.responseText;
}
} // telos xmlhttp.onreadystatechange

httpObject.send(null);

setTimeout("dowork2()", 600);

}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
function dowork2(){
if (window.ActiveXObject) { httpObject2 = new ActiveXObject("Microsoft.XMLHTTP");
} //telos if
else if (window.XMLHttpRequest) {
httpObject2 = new XMLHttpRequest();
} //TELOS ELSE IF
// ORISA TO OBJECT GIA TON IE kai GIA TOUS ALLOUS BROWSERS

httpObject2.open("GET", "t-shirt.php?t_shirtid="+document.getElementById("t-shirt").value, true);

httpObject2.onreadystatechange = function() {
if (httpObject2.readyState == 1)
{
document.getElementById("size").options[0].text = "Loading...";
document.getElementById("size").disabled=true;
}
else if (httpObject2.readyState == 4 && httpObject2.status==200)
{
document.getElementById("size").disabled=false;
document.getElementById("size").innerHTML = httpObject2.responseText;
}
} // telos xmlhttp.onreadystatechange

httpObject2.send(null);
document.myForm.submit.disabled=false;
}
</script>

<?php
include ("connect.php");
$q=mysql_query ("select artist from t_shirts group by artist") or die (mysql_error());
?>

<form name="myForm" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">

<select id="artist" name="artist_name" onchange="doWork();">
<option value="" id="kk">Pls select Artist</option>
<?php while ($res=mysql_fetch_array($q)){?>
<option value="<?php echo $res[0]; ?>"><?php echo $res[0];?></option>
<?php } ?>
</select>

<select id="t-shirt" name="t-shirt" disabled="disabled" onchange="dowork2();">
<option value="" >Pls select artist first</option>
</select>

<select id="size" name="size" disabled="disabled" >
<option value="" >Pls select t-shirt first</option>
</select>
<input type="submit" name="submit" disabled="disabled" onclick="return click_me();"/>
</form>

<?php if (isset($_POST['submit'])){
$artist_name=$_POST['artist_name'];
$t_shirtid=$_POST['t-shirt'];
$size=$_POST['size'];

$q2=mysql_query("select title from t_shirts where t_shirtid='$t_shirtid'");
$res2=mysql_fetch_array($q2);
$title=$res2[0];

echo "you selected ".$artist_name." with t-shirt ".$title."and size=".$size;
}
?>

To provlima mou einai pos An den kanw setTimeout(), den prolavainei na epistrepsei h timh kai gia na kanw ton aparaithto elegxo.
Einai sosth afth h methodos me to settimeout??? Pos allios mporw na sinexisw na ektelw ton kodika afou omos prota exw parei ta apotelesmata??

An deis, to POST doulevei kanonika, asxeta me to an se ajax pairnw times me GET.

Opoiadipote voithia efrposdekth

Άβαταρ μέλους
george_r1977
Δημοσιεύσεις: 9
Εγγραφή: 15 Αύγ 2007 15:30

Πρόβλημα ελεγχου username και email με AJAX και post

Δημοσίευση από george_r1977 » 02 Μαρ 2009 03:14

Telika to vrika monos mou!

To provlima epaize me to submit button pou to eixa id='submit' kai name='submit'. kapou ta epaize to javascript.

Gia osous endiaferontai 'h exoun paromoio provlima :

<form name="myForm" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" >

Username : <input name="username" type="text" id="username" style="background-color:#FFFFFF"/><br />
<input id="username_verification" type="hidden" /><br />
<input type="button" onclick="return doWork();"/ value="ClickMe">
</form>

kai to antistoixo js:

<script language="javascript" type="text/javascript">
function doWork(){
if (window.ActiveXObject) {
httpObject = new ActiveXObject("Microsoft.XMLHTTP");
} //telos if
else if (window.XMLHttpRequest) {
httpObject = new XMLHttpRequest();
} //TELOS ELSE IF
// ORISA TO OBJECT GIA TON IE kai GIA TOUS ALLOUS BROWSERS
httpObject.open("GET", "get_all.php?username="+document.getElementById("username").value, true);

httpObject.onreadystatechange = function() {
if (httpObject.readyState == 1)
{
document.getElementById("username_verification").value = "wait";
}
else if (httpObject.readyState == 4 && httpObject.status==200)
{
document.getElementById("username_verification").value = httpObject.responseText;
}
} // telos xmlhttp.onreadystatechange

httpObject.send(null);


setTimeout("some()", 1000);

}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
function some(){

if (document.getElementById("username_verification").value =='1'){
document.getElementById("username").style.backgroundColor="#FFFF99";
alert ("username exists!");
document.getElementById("username").focus();
return false;
} // KLEINEI TO IF



else {
alert ("DEN YPARXEI TO USERNAME!");
document.myForm.submit();
} // KLEINEI TO IF

} // KLEINEI TO SOME
</script>

// PAROLA AFTA ENW DOULEVEI KANONIKA, DEN KSERW GIATI DEN DOULEVEI XORIS TO setTimeout. Kapoia voithia se afto ????

Άβαταρ μέλους
Basilakis
PHP Moderator
Δημοσιεύσεις: 8574
Εγγραφή: 17 Νοέμ 2003 13:03
Τοποθεσία: Womans' Brain
Επικοινωνία:

Πρόβλημα ελεγχου username και email με AJAX και post

Δημοσίευση από Basilakis » 02 Μαρ 2009 12:31

Θα ήταν καλό να χρησιμοποιούμε το

Κώδικας: Επιλογή όλων

 bbcode όταν περιέχουμε κώδικα μέσα στο κείμενο μας, για να μπορούμε να το διαβάσουμε καλύτερα

Άβαταρ μέλους
george_r1977
Δημοσιεύσεις: 9
Εγγραφή: 15 Αύγ 2007 15:30

Πρόβλημα ελεγχου username και email με AJAX και post

Δημοσίευση από george_r1977 » 02 Μαρ 2009 20:39

Thanx, alla den kserw pos ginetai afto (peri BBcode). An mou peis tha to kanw apo edw kai pera

Άβαταρ μέλους
Basilakis
PHP Moderator
Δημοσιεύσεις: 8574
Εγγραφή: 17 Νοέμ 2003 13:03
Τοποθεσία: Womans' Brain
Επικοινωνία:

Πρόβλημα ελεγχου username και email με AJAX και post

Δημοσίευση από Basilakis » 02 Μαρ 2009 21:04

otan dimosieveis ton kwdika sou grafe proigoumenos

[ code] kai sto telos to kwdika [/code]

xwris space to prwto :)

Απάντηση

Επιστροφή στο “JavaScript και Frameworks”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες