Jag vill validera ett formulär innan det skickas. När jag validerar det så kollar jag om användarnamnet är upptaget med hjälp av jquery $.get(). Men jag får det inte riktigt att fungera. Lite hjälp skulle uppskattas.
Felet är att formuläret aldrig skickas. Om allting är rätt ifyllt, kommer alert rutan upp med texten: "du har fyllt i allting rätt". Men formuläret submitas ändå inte.
Se själva: ....
För det första: Validera all din kod innan du gör din GET, inte efter din GET är färdig, du få ju inget tillbaka ifrån test2.php?q= vad gör du i den?
Alltså användarnamnet är menat att skickas med och den kollar sedan om användarnamnet redan existerar i databasen. Den returnerar "bilder/kryss.png" eller "bilder/check.png" beroende på om användarnamnet är upptaget eller inte.
Jag ska validera koden.
Jag får aldrig en response ifrån ditt AJAX callback, vad har du egentligen i filen?
Jag tror inte det är felet. Den fungerar för mig. Men här är koden:
$user = $_GET["q"];
$sql = "SELECT username FROM medlemmar where username = ? LIMIT 1";
if ($stmt = $mysqli->prepare($sql))
{
$stmt->bind_param("s", $user);
$stmt->execute();
$stmt->bind_result($username);
$stmt->fetch();
$stmt->close();
}
if($username == ""){
echo "bilder/check.png";
}else{
echo "bilder/kryss.png";
}
För att förklara lite bättre vad jag tror problemet är. Här är valideringskoden:
$(document).ready(function(){
/* Validerar innan publicering */
$("#skapa_en_blogg").submit(function(e){
var epost_value = $("#epost").val();
var blogg_adress_value = $("#blogg_adress").val();
var password_value = $("#password").val();
var repeat_password_value = $("#repeat_password").val();
var return_var = false;
$.get("test2.php?q="+blogg_adress_value, function(result){
if(/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/.test(epost_value) && result == "bilder/check.png" && /^[a-zA-Z0-9]{5,}$/.test(blogg_adress_value) && /^[a-zA-Z0-9]{5,}$/.test(repeat_password_value) && repeat_password_value == password_value){
[B]alert("Du har fyllt i allting rätt");[/B]
return_var = true;
}else{
alert("Du har fyllt i någon uppgift fel");
}
});
[B]return return_var;[/B]
});
});
"alert("Du har fyllt i allting rätt");" körs. Men "return return_var;" returnar av någon anledning ändå false.
testa med: http://vitorm.se/test/test2.php?q= så ser du att du behöver fixar din PHP kod om man inte ha något värde i q
Vad skall jag skriva för att inte få en validerad formulär, jag är inte direkt intressserad över att registera ett konto hos dig.
noshornin skrev:
För att förklara lite bättre vad jag tror problemet är. Här är valideringskoden:
$(document).ready(function(){
/* Validerar innan publicering */
$("#skapa_en_blogg").submit(function(e){
var epost_value = $("#epost").val();
var blogg_adress_value = $("#blogg_adress").val();
var password_value = $("#password").val();
var repeat_password_value = $("#repeat_password").val();
var return_var = false;
$.get("test2.php?q="+blogg_adress_value, function(result){
if(/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/.test(epost_value) && result == "bilder/check.png" && /^[a-zA-Z0-9]{5,}$/.test(blogg_adress_value) && /^[a-zA-Z0-9]{5,}$/.test(repeat_password_value) && repeat_password_value == password_value){
[B]alert("Du har fyllt i allting rätt");[/B]
return_var = true;
}else{
alert("Du har fyllt i någon uppgift fel");
}
});
[B]return return_var;[/B]
});
});
"alert("Du har fyllt i allting rätt");" körs. Men "return return_var;" returnar av någon anledning ändå false.
Ja? Läs hur AJAX fungera, första A:et i AJAX betyder: Asynchronous.
din JS kod körs inte uppifrån och ner utan den kör metoden färdig och sen om AJAX koden hinner bli färdig innan du kör formuläret, då retunera den din message box... men den har inget med din submit att göra om hur den skall retuneras.
Du kommer inte bli medlem. Registrerings filen existerar inte. Du kommer bara få ett 404 error meddelande.
Skriv in ett anvädnarnamn och lösen som är längre än 5 bokstäver. och en epost som är typ: "lala@lala.la"
$("#skapa_en_blogg").bind("submit.reg", function ( e ) {
var that = this;
var epost_value = $("#epost").val();
var blogg_adress_value = $("#blogg_adress").val();
var password_value = $("#password").val();
var repeat_password_value = $("#repeat_password").val();
$.get("test2.php?q="+blogg_adress_value, function(result){
if(/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/.test(epost_value) && result == "bilder/check.png" && /^[a-zA-Z0-9]{5,}$/.test(blogg_adress_value) && /^[a-zA-Z0-9]{5,}$/.test(repeat_password_value) && repeat_password_value == password_value){
alert("Du har fyllt i allting rätt");
that.submit();
}else{
alert("Du har fyllt i någon uppgift fel");
}
});
return false;
});
voigtann1 skrev:
Ja? Läs hur AJAX fungera, första A:et i AJAX betyder: Asynchronous.
din JS kod körs inte uppifrån och ner utan den kör metoden färdig och sen om AJAX koden hinner bli färdig innan du kör formuläret, då retunera den din message box... men den har inget med din submit att göra om hur den skall retuneras.
Jag förstår inte riktigt vad du menar! Hur kan jag då få "return return_var;" att köras efter allt annat?
noshornin skrev:
Jag förstår inte riktigt vad du menar! Hur kan jag då få "return return_var;" att köras efter allt annat?
Det vill du inte göra, då låser du webbläsaren tills. Du få ett svar, vilket inte ge alls det önskade resultatet