Avatar billede MadsDue Nybegynder
15. juni 2011 - 20:45 Der er 27 kommentarer og
1 løsning

kun en bruger per brugernavn

hej

Når en bruger opretter sig på mit site, så skal han/hun ikke kunne vælge et brugernavn der i forvejen er taget.

Hvordan kan jeg bedst mulig undgå det?
indtil videre har jeg lavet følgende;

<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
            <title></title>
            <style type="text/css">
            </style>
            <script type="text/javascript">
           
    function ValidateString(elm, antal) {   
        var lng = elm.value.length;       
        var str = elm.value.split("");
        if (lng<antal) return false;               
        else {
            for(var i=0;i<lng;i++){                   
                if (! IsValidChar(str[i]) ) return false;
            }
        }           
        return true;
    }
    function IsValidChar(val) {       
        var regstr ="[a-z0-9_.-]"; 
        var pattern = new RegExp(regstr,"gi");
        if (!pattern.test(val)) {       
            return false;
        }
        return true;
    }   
 
    function validate(){
        var error = 0;
        var err_fld;
        var defaultcolor = "white";
        var errorcolor = "white";       
        var frm1 = document.getElementById('frm');


        err_fld = document.getElementById('err_'+"brugernavn");
        err_fld.firstChild.nodeValue = "";
        frm1.brugernavn.style.backgroundColor = defaultcolor;
        if (frm1.brugernavn.value == '' || frm1.brugernavn.value == null || frm1.brugernavn.value== ''){           
            err_fld.firstChild.nodeValue = "Brugernavn er ikke udfyldt.";           
            frm1.brugernavn.style.backgroundColor = errorcolor;
            error = 1;           
        }       
        else if(ValidateString(document.frm.brugernavn, 6) == false){
            err_fld.firstChild.nodeValue = "Dit brugernavn er for kort eller indeholder ulovlige karakterer";         
            document.frm.brugernavn.style.backgroundColor = errorcolor;           
            error = 1;
        }
        err_fld = document.getElementById('err_'+"kode1");
        err_fld.firstChild.nodeValue = "";
        frm1.kode1.style.backgroundColor = defaultcolor;
        if (frm1.kode1.value == '' || frm1.kode1.value == null || frm1.kode1.value!=frm1.kode12.value || frm1.kode1.value== 'password'){           
            err_fld.firstChild.nodeValue = "Dine koder er ikke rigtige";           
            frm1.kode1.style.backgroundColor = errorcolor;
            error = 1;           
        }       
        else if(ValidateString(document.frm.kode1, 8) == false){
            err_fld.firstChild.nodeValue = "Dit password er for kort, kræver 8 tegn";         
            document.frm.kode1.style.backgroundColor = errorcolor;       
            error = 1;
        }


        return (error)? false : true;       
    }
    </script>
   
</head>


<body>
<div class="left1">
<?php include("../../loginsystem/database.php"); ?>

<form action="../../sider/opret_brugere/opret_bruger4.php" method="post" name="frm" id="frm" onsubmit="return validate()">

                                <?php
                                $_SESSION['adresse']= $_REQUEST['vejnavn']
?>
                                <?php
                                $_SESSION['nr']= $_REQUEST['nr']
?>
                                <?php
                                $_SESSION['postnummer']= $_REQUEST['postnummer']
?>
                                <?php
                                $_SESSION['by']= $_REQUEST['by']
?>
                                <?php
                                $_SESSION['telefon1']= $_REQUEST['telefon1']
?>
                       
<div class="brugernavn">Brugernavn</div><br/>
<div id="err_brugernavn" class="err">&nbsp;</div>
<input type="text" size="20" class="brugernavn" title="undgå at bruge andre tegn ind - . _"name="brugernavn" value="Min. 4 Bogstaver" onfocus="if (this.value=='Min. 4 Bogstaver') this.value = ''" onblur="if (this.value=='') this.value = 'Min. 4 Bogstaver'"/>
                           
<div class="kode" title="HUSK at lave en personlig adgangskode">Adgangskode</div><br/>
div id="err_kode1" class="err">&nbsp;</div><div id="err_kode12" class="err">&nbsp;</div>
<input type="password" title="HUSK at lave en personlig adgangskode" size="20" class="kode1" name="kode1" value="password" onfocus="if (this.value=='password') this.value = ''" onblur="if (this.value=='') this.value = 'password'"/>
<br/> <br/>
<input type="password" title="Gentag din adgangskode"size="20" class="kode12" name="kode12" value="password" onfocus="if (this.value=='password') this.value = ''" onblur="if (this.value=='') this.value = 'password'"/>


               
                                <div class="tilbage3">
                                    <a href="../../sider/opret_brugere/opret_bruger2.php" title=""><img width="" height="" src="../../billeder/opret_bruger/tilbage.png" alt="" /></a>
                                </div>
                           
                           
<input type="Submit" class="videre3" value=" Videre " />
</form>
</div>

</body>

Kan i hjælpe med deT?
Avatar billede pstidsen Novice
15. juni 2011 - 20:51 #1
Nu er jeg ikke så godt til php, og jeg er ikke sikker på at det hjælper men er det ikke bare noget if used echo "Brugernavnet er optager"??
Avatar billede MadsDue Nybegynder
15. juni 2011 - 20:52 #2
gid det bare var det :)
Avatar billede pstidsen Novice
15. juni 2011 - 20:58 #3
men så held og lykke i hvert fald! :)
Avatar billede rix Praktikant
15. juni 2011 - 21:00 #4
du skal da bare søge efter bruger navn og se om der er en hvis der er en skal du bare stoppe resten
en lille hurtig måde

  $brugernavn = mysql_query("SELECT COUNT(*) FROM DIN_TABLE WHERE USERNAME='".$_POST['brugernavn]."'") OR DIE(mysql_error());
if(mysql_result($brugernavn,0) != 0){
der findes allerede en bruger
}

er det sådan noget du søger efter?
Avatar billede olsensweb.dk Ekspert
15. juni 2011 - 21:18 #5
<?php
function IsUserCreated($username, $conn){       
    $sql = "select ID from TblUser where username = '$username'";
    $rs = mysql_query($sql, $conn);
    if ($rs){
        $row = mysql_fetch_assoc($rs);
        $id = $row['ID'];       
    }       
    if (strlen($id)==0) $id = 0;
    return $id;   
}

$UserId = IsUserCreated($brugernavn, $conn);
if( ! $UserId) {
        // kode til at oprette bruger
}
else{
    echo "brugernavn optaget";
}
?>
Avatar billede repox Seniormester
15. juni 2011 - 21:30 #6
Er det kun mig der synes at de her spørgsmål hører til ovre i http://www.eksperten.dk/spm/Programmering/Script/PHP/ og ikke her under Opgaver?
Avatar billede pstidsen Novice
15. juni 2011 - 21:31 #7
#6 nææ
15. juni 2011 - 21:31 #8
Først et spørgsmål:  Hvor gemmer du de oprettede brugernavne?  Du har (ser det ud til) en side opret_bruger4.php som modtager inputtet fra den formular du viser (hvis validated), og der må du have noget kode der indsætter blandt andet brugernavn i en database tabel.  Jeg skal nu gøre den antagelse, at tabellen hedder 'Brugere' og har et felt der hedder 'navn' og at det er der du gemmer de oprettede brugernavne.

For så at se, om et nyt brugernavn allerede eksisterer, må du naturligvis forespørgenden tabel, for eksempel: 

$result = mysql_query("SELECT * FROM Brugere WHERE navn = $bruger");

og så se om du får noget resultat af forespørgselen

$number = mysql_num_rows($result);

Hvis forespørgslen giver resultat - if($number > 0) -
så består brugernavnet allerede.  Hvad skal der så ske?  For eksempel:


if($number > 0) echo "Brugernavn $bruger består allerede.  Gå tilbage og vælg et andet brugernavn.";

Nu ligger det således, at du er nødt til at forespørge databasen via serveren.  Funktionen validate() er skrevet i javascript der, som et client-side sprog, ikke snakker med serveren.  Så du er nok nødt til at checke for duplikat brugernavn på siden opret_bruger.php.  Noget i retning af:

opret_bruger.php

<?php
$bruger = $_POST['brugernavn'];
$result = mysql_query("SELECT * FROM Brugere WHERE navn = $bruger");
$number = mysql_num_rows($result);
if($number > 0) echo "Brugernavn $bruger består allerede.  Gå tilbage og vælg et andet brugernavn.";

Jeg opretter dette som svar i det håb, at det vil være dig tin nytte og bringe dig videre.
15. juni 2011 - 21:34 #9
Jeg så ikke #4, #5, og #6 før jeg sendte mit indlæg.  Jeg kikker lige.
15. juni 2011 - 21:35 #10
....men der ser ud til at #4 og #5 stort set siger det samme som jeg.
Avatar billede MadsDue Nybegynder
15. juni 2011 - 21:38 #11
okay. skal de indsættes i Body eller i head?
Avatar billede rix Praktikant
15. juni 2011 - 21:45 #12
#10 jep :D
#11 hvis jeg var dig ville jeg sætte det oven over <head> :D
Avatar billede MadsDue Nybegynder
15. juni 2011 - 21:59 #13
<?php include("../../loginsystem/database.php"); ?>

<form action="../../sider/opret_brugere/opret_bruger4.php" method="post" name="frm" id="frm" onsubmit="return validate()">

                                <?php
                                $_SESSION['adresse']= $_REQUEST['vejnavn']
?>
                                <?php
                                $_SESSION['nr']= $_REQUEST['nr']
?>
                                <?php
                                $_SESSION['postnummer']= $_REQUEST['postnummer']
?>
                                <?php
                                $_SESSION['by']= $_REQUEST['by']
?>
                                <?php
                                $_SESSION['telefon1']= $_REQUEST['telefon1']
?>
                       
<div class="brugernavn">Brugernavn</div><br/>
<div id="err_brugernavn" class="err">&nbsp;</div>
<input type="text" size="20" class="brugernavn" title="undgå at bruge andre tegn ind - . _"name="brugernavn" value="Min. 4 bogstaver" onfocus="if (this.value=='Min. 4 bogstaver') this.value = ''" onblur="if (this.value=='') this.value = 'Min. 4 bogstaver'"/>
<?php
                            $brugernavn = $_REQUEST["brugernavn"];
                           
$result = mysql_query("SELECT * FROM brugere WHERE brugernavn = $brugernavn");
$number = mysql_num_rows($result);
                            if($number > 0) echo "Brugernavn $brugernavn består allerede.  Gå tilbage og vælg et andet brugernavn.";
                           
?>

Det har jeg tastet. så kommer følgende fejl:

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\Sider\Opret_brugere\opret_bruger3.php on line 186

Dette er line 186:
$number = mysql_num_rows($result);

Min DB hedder loginsystem og den er Connect, ved hjælp af denne her:
<?php include("../../loginsystem/database.php"); ?>

Tablen hedder: brugere
brugernavn hedder: brugernavn //i tablen.


Hvad gør jeg forkert?
Avatar billede rix Praktikant
15. juni 2011 - 22:04 #14

<?php include("../../loginsystem/database.php"); ?>

<form action="../../sider/opret_brugere/opret_bruger4.php" method="post" name="frm" id="frm" onsubmit="return validate()">

                                <?php
                                $_SESSION['adresse']= $_REQUEST['vejnavn']
?>
                                <?php
                                $_SESSION['nr']= $_REQUEST['nr']
?>
                                <?php
                                $_SESSION['postnummer']= $_REQUEST['postnummer']
?>
                                <?php
                                $_SESSION['by']= $_REQUEST['by']
?>
                                <?php
                                $_SESSION['telefon1']= $_REQUEST['telefon1']
?>
                     
<div class="brugernavn">Brugernavn</div><br/>
<div id="err_brugernavn" class="err">&nbsp;</div>
<input type="text" size="20" class="brugernavn" title="undgå at bruge andre tegn ind - . _"name="brugernavn" value="Min. 4 bogstaver" onfocus="if (this.value=='Min. 4 bogstaver') this.value = ''" onblur="if (this.value=='') this.value = 'Min. 4 bogstaver'"/>
<?php
                            $brugernavn = $_REQUEST["brugernavn"];
                         
$result = mysql_query("SELECT * FROM brugere WHERE brugernavn = '".$brugernavn."'");
$number = mysql_num_rows($result);
                            if($number > 0) echo "Brugernavn $brugernavn består allerede.  Gå tilbage og vælg et andet brugernavn.";
                         
?>

prøv dette her
Avatar billede MadsDue Nybegynder
15. juni 2011 - 22:12 #15
Det hjælp ikke.
Avatar billede MadsDue Nybegynder
15. juni 2011 - 22:12 #16
desværre
Avatar billede webweaver Praktikant
16. juni 2011 - 01:02 #17
$result = mysql_query("SELECT * FROM brugere WHERE brugernavn = '$brugernavn'") or die(mysql_error());

$number = mysql_num_rows($result);
                         
if ($number > 0) {

echo "Brugernavn" . $brugernavn . " består allerede.  Gå tilbage og vælg et andet brugernavn.";

}


Prøv det en gang ...

Hvis du i øvrigt vil udskrive noget til brugeren, som det ser ud til at du vil med din echo i if sætningen, skal du placere det nede i body, da det er hvad der vises i browseren. Du går ikke at have en echo oppe i din <head></head>
Avatar billede MadsDue Nybegynder
16. juni 2011 - 19:09 #18
Den virker heller ikke
Avatar billede MadsDue Nybegynder
16. juni 2011 - 19:28 #19
har placeret det hele i body
16. juni 2011 - 21:43 #20
MadsDue, gad vide, om vi diskuterer det samme problem.  Dit oprindelige spørgsmål var, hvordan du kunne undgå, at to brugere oprettede det samme brugernavn.  Det forudsætter, at du kan oprette brugere og gemme brugernavnet i databasen.  Det er ikke noget problem.  Problemet er udelukkende at undgå at oprette og gemme duplikat brugernavne.

Men er det således?  Når vi går tilbage til koden i dit oprindelige spørgsmål, kan brugerne så oprette sig med brugernavn?  Så er koden du viste i hvert fald ikke komplet.  Ud over den kode du viser må der være en anden php side som ifølge action på din formular skal hedde noget med "../../sider/opret_brugere/opret_bruger4.php" som blandt andet indeholder kode til at insætte brugernavn i databasen.

Så hvis du med din oprindelige kode kan oprette brugernavne i databasen, så vis os den kode du bruger til at oprette brugernavnene i databasen.

Hvis det på den anden side ligger således at du ikke kan oprette brugere (duplikerede eller ej), så fortæl os det.  I såfald har vi prøvet at finde løsning til det forkerte problem.
Avatar billede MadsDue Nybegynder
16. juni 2011 - 21:53 #21
Du har helt ret i at jeg indsender data til db i et andet script.

Men vil gerne have, at allerede på denne side, hvor brugeren skal indtaste et ønsket brugernavn, kan få at vide. om det er optaget eller ledigt så han/hun kan bruge det.
17. juni 2011 - 06:29 #22
Jamen så har vi snakket forbi hinanden.  Dette spørgsmål OG de to følgende http://www.eksperten.dk/spm/941190 og http://www.eksperten.dk/spm/941198 går udelukkende på at at stoppe brugere fra at tage brugernavn der i forvejen er taget, og ikke et ord om den begrænsning, at det skal ske uden at skifte side.  På spørgsmålet som stillet fortalte jeg i #8, at det ikke kan gøres i javascript.  Javascript er et client-side script der ikke, som php, kan henvende sig til serveren for at forespørge databasen for oprettede brugernavne.  Jeg foreslog derfor, at du placerede database forespørgslen på den samme side, som du allerede bruger til at updatere databasen, når en ny bruger opretter sig.

Så hvis dit problem er dette: "Når en bruger vil oprette sig med et brugernavn, hvordan kan det så undersøges, om dette brugernavn allerede består?" så er mit svar dette:  "ved at forespørge databasen efter at brugeren har forsøgt at oprette sig."  Det kender jeg ikke nogen løsning på i javascript, og der er åbenbart heller ingen andre der gør.

Hvis du ikke kan bruge mit svar (eller de andres,) så vil jeg bede dig lukke spørgsmålet (ved selv at oprette og acceptere et svar) så det i det mindste ikke længere står som åbent.
Avatar billede webweaver Praktikant
17. juni 2011 - 12:12 #23
Hvis du ønsker at gøre det du vil, skal du enten flytte den del, som du ikke kan få til at virke over på siden med formen og så lave endnu en if sætning, der for tæller, at hvis brugernavnet er opdateret at den skal blive på samme side ved tryk på submit og hvis brugernavnet ikke er optaget, går den videre til den side, du bruger nu til at oprette brugeren.

Eller også skal du flytte det hele over i filen med formen og oprette og validere brugerinput deri. Det er min anbefalelse.
Avatar billede MadsDue Nybegynder
18. juni 2011 - 11:52 #24
Luk
18. juni 2011 - 12:07 #25
Det er ikke noget særligt heldigt indtryk du har gjort her på Eksperten.  Du opretter tre spørgsmål hvor du for det første ikke forklarer ordenligt hvad du vil (såsom at undgå sideskift) og når så en masse medlemmer prøver at hjælpe dig med at forklare, at det ikke kan lade sig gøre på din måde men fortæller hvad du kan gøre i stedet for, så har du ikke engang et ord som tak, men kun 'luk.'  Det opfordrer ikke til at prøve at hjælpe med fremtidige spørgsmål fra din side.
Avatar billede webweaver Praktikant
18. juni 2011 - 14:22 #26
Må give Christian_Belgien ret.
Det bliver man hurtigt træt af.

Så der røg en mere på blacklisten.
Avatar billede the_guru Nybegynder
09. februar 2012 - 23:28 #27
den nemmeste måde at undgå klon brugere er ved at benytte mobilnumre som brugernavne. Det eneste det kræver er sms-validering ... implementerer det dagligt og det fungerer ganske glimrende, også globalt
Avatar billede the_guru Nybegynder
09. februar 2012 - 23:28 #28
by the highway... sql er stoneage, for langsomt! gal kode
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester