webForumDet fria alternativet

Kolla om användarnamnet är upptaget

JavaScript

16 svar · 1 647 visningar · startad av noshornin

Medlem sedan aug. 2008815 inlägg
Frågan#1

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?

Medlem sedan juni 200032 967 inlägg
#2

Du vill ha ajax.

Medlem sedan aug. 20039 340 inlägg
#3

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.

Medlem sedan aug. 2008815 inlägg
#4

@nders skrev:

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?

Medlem sedan aug. 2008815 inlägg
#5

nitro2k01 skrev:

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

Medlem sedan aug. 20039 340 inlägg
#6

noshornin skrev:

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. :)

Medlem sedan aug. 2008815 inlägg
#7

nitro2k01 skrev:

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

Medlem sedan mars 2004485 inlägg
#8

Stort H i Http

om det nu spelar nån roll..

Medlem sedan aug. 2008815 inlägg
#9

aron skrev:

Stort H i Http

om det nu spelar nån roll..

vart då?

Det funkar nu i opera men inte i ie7.

Medlem sedan mars 2004485 inlägg
#10

noshornin skrev:

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
Medlem sedan aug. 2008815 inlägg
#11

aron skrev:

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.

Medlem sedan aug. 2008815 inlägg
#12

Nu helt plötsligt funkar det.

Medlem sedan maj 2010117 inlägg
#13

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.

Medlem sedan aug. 2008815 inlägg
#14

newseed skrev:

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.

Medlem sedan juni 200032 967 inlägg
#15

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?

Medlem sedan juni 20014 290 inlägg
#16

noshornin skrev:

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.

Medlem sedan aug. 2008815 inlägg
#17

GunnarD skrev:

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.

265 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)