Du vill ha ajax.
Jag undrar lite hur man enklast kollar om ett användarnamn är upptaget. Ska man loopa ut alla användarnamn i en js array och kolla om den finns med där eller finns det något bättre sätt?
16 svar · 1 647 visningar · startad av noshornin
Jag undrar lite hur man enklast kollar om ett användarnamn är upptaget. Ska man loopa ut alla användarnamn i en js array och kolla om den finns med där eller finns det något bättre sätt?
Du vill ha ajax.
Förlita dig aldrig på att göra den typen av kontroller på klientsidan! Det är snorlätt att ta sig runt. Du bör på ett eller annat sätt anropa serversidan och göra ett databasanrop. Detta kan antingen ske genom AJAX eller genom att formuläret postas som vanligt och att ett felmeddelande skrivs ut. Att skicka hela listan med användarnamn blir inte bara tungt om sidan har många medlemmar, men du kanske inte vill att alla ska kunna se hela medlemslistan.
Du vill ha ajax.
Jag har aldrig jobbat med det typ. Skulle du kunna länka till något som går igenom hur man skulle kunna göra detta?
Förlita dig aldrig på att göra den typen av kontroller på klientsidan! Det är snorlätt att ta sig runt. Du bör på ett eller annat sätt anropa serversidan och göra ett databasanrop. Detta kan antingen ske genom AJAX eller genom att formuläret postas som vanligt och att ett felmeddelande skrivs ut. Att skicka hela listan med användarnamn blir inte bara tungt om sidan har många medlemmar, men du kanske inte vill att alla ska kunna se hela medlemslistan.
jag hade tänkt att kontrollera allting med php efter att formuläret hade skickats. Men jag vet hur jobbigt det är att fylla i ett formulär och sedan behöva gå tillbaka och göra om allting för att man har skrivit något fel. Därför ville jag göra någon lösning i js. Ska kolla upp lite mer om ajax, det verkar inte egentligt så komplicerat
Men jag vet hur jobbigt det är att fylla i ett formulär och sedan behöva gå tillbaka och göra om allting för att man har skrivit något fel.
Det är därför sidan som skriver ut felmeddelandet också ska skriva ut hela formuläret igen, med alla värden ifyllda. :)
Det är därför sidan som skriver ut felmeddelandet också ska skriva ut hela formuläret igen, med alla värden ifyllda. :)
Hur fånigt det än låter har jag aldrig tänkt på att man kan göra så. Men hur som helst försöker jag fixa den här funktionen i ajax. Jag förstår inte riktigt hur ajax fungerar. Jag tänkte att jag kunde lägga upp koden här.
Det jag vill är att om användarnamnet är upptaget så ska bilden kryss visas:
document.usernameImg.src="bilder/kryss.png";
Om den inte är upptagen ska bilden check visas:
document.usernameImg.src="bilder/check.png";
. så här ser functionen ut:
function checkUsername(usernameValue){
var usernameValue = usernameValue;
if (usernameValue.length < 5){
document.usernameImg.src="bilder/kryss.png";
return;
}
if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}else{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200){
[U]document.usernameImg.src=xmlhttp.responseText;[/U]
}
}
xmlhttp.open("GET","test2.php?q="+usernameValue,true);
xmlhttp.send();
}
test2.php:
<?php
/* Connect to a MySQL server */
$mysqli = new mysqli('***', '****', '****', '*****');
if (mysqli_connect_errno()) {
printf("Can't connect to MySQL Server. Errorcode: %s\n", mysqli_connect_error());
exit;
}
$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";
}
?>
Jag får felmeddelandet: Detaljerad information om felet på webbsidan
Meddelande: Ogiltigt egenskapsvärde.
Rad: 55
Tecken: 4
Kod: 0
rad 55 är den understrukna raden
Stort H i Http
om det nu spelar nån roll..
vart då?
Det funkar nu i opera men inte i ie7.
vart då?
Det funkar nu i opera men inte i ie7.
rad 55, men jag megachansade bara :D då jag såg den stavningen nån annanstans.
xmlHttp.responseText
rad 55, men jag megachansade bara :D då jag såg den stavningen nån annanstans.
xmlHttp.responseText
tyvärr :(, jag bytte ut alla till stort h men det hjälpte inte.
Nu helt plötsligt funkar det.
Istället för AJAX varför inte göra kolumnen för användarnamn unik i databasen? Sedan är det en smal sak av att hantera SQL-fel vilket du ändå bör göra. AJAX-varianten är främst bra om du vill ge tjänsten att informera användaren om felet innan formuläret skickas, du bör ändå alltid kontrollera allting på servern när du tar emot det.
Istället för AJAX varför inte göra kolumnen för användarnamn unik i databasen? Sedan är det en smal sak av att hantera SQL-fel vilket du ändå bör göra. AJAX-varianten är främst bra om du vill ge tjänsten att informera användaren om felet innan formuläret skickas, du bör ändå alltid kontrollera allting på servern när du tar emot det.
Det är ju det jag gör m8. Kontrollerar om det är upptaget innan formuläret skickas.
När det gäller såna här viktiga grejer är det inte dumt att göra kontroller på serversidan också. Vad händer om man har JavaScript avstängt i browsern?
Det är ju det jag gör m8. Kontrollerar om det är upptaget innan formuläret skickas.
Du bör nog också kolla det när formuläret skickas och du skall skapa användaren.
Om två användare sammtidigt vill skapa ett konto, så kommer bägge att få att det inte finns och om du då inte kollar när kontot skapas så kommer du få två konton med samma namn, alternativ den som skickar först får kontot och den andra får förhoppningsvis något fel tillbaka.
Du bör nog också kolla det när formuläret skickas och du skall skapa användaren.
Om två användare sammtidigt vill skapa ett konto, så kommer bägge att få att det inte finns och om du då inte kollar när kontot skapas så kommer du få två konton med samma namn, alternativ den som skickar först får kontot och den andra får förhoppningsvis något fel tillbaka.
jag är medveten om det. Jag hade tänkt att kontrollera allting igen innan det läggs till.