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

kontrol af nye brugernavne

Hej

Jeg er igang med at lave bruger oprettelse mulighed på min hjemmeside.

Det der er problemet er at jeg ikke vil have at to bruger kan få det sammen brugernavn og når den nye bruger skal vælge hvilket brugernavn har gerne vil have, skal han/hun allerede der kunne se om det er optaget eller ledigt.
Indtil videre har jeg lavet følgende:

opret_bruger3.php

<head>
    <script type="text/javascript">
function showUser(str)
{
if (str=="")
  {
  document.getElementById("txtHint").innerHTML="";
  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)
    {
    document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","../../kontrol/kontrol-brugernavn.php?q="+str,true);
xmlhttp.send();
}
</script>
       
</head>
<body>
                    <div class="left1">
                        <div id="myDiv"></div>
                       
                        <?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" onblur="showUser(this.value)" 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 id="txtHint" class="err"></div>
                            <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>   

kontrol-brugernavn.php


<?php
$q=$_GET["q"];

$con = mysql_connect("localhost", "root", "");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("loginsystem", $con);


$sql="SELECT brugernavn FROM brugere WHERE brugernavn = '".$q."'";

$resultat = mysql_query($sql);



while ($post = mysql_fetch_array($resultat)) {

  echo "<td>" . "Brugernavnet <b>" . $post['brugernavn'] . "</b> er optaget" . "</td>";
  }


mysql_close($con);
?>


Resultat af det jeg har lavet er: hvis bruger vælger et brugernavn som er optaget, vil han kunne se det. hvis ikke sker der ingenting. HVILKET ER SOM JEG GERNE VIL HAVE DET.

Problemet er bare, at det ikke forhindre ham i at gå videre til næste side med det brugernavn.

Så det jeg gerne vil have er, at når han vælger et brugernavn som er optaget, skal han ikke kunne gå til opret_bruger4.php

Håber jeg har forklaret mig forståeligt nok.
Avatar billede majbom Novice
25. juni 2011 - 21:10 #1
hvis du vil have hjælp, tror jeg at du skal til at tænke over hvordan du lukker dine spørgsmål!
Avatar billede MadsDue Nybegynder
25. juni 2011 - 21:18 #2
okay. gør jeg ikke det rigtigt nok? da
Avatar billede majbom Novice
25. juni 2011 - 21:30 #3
det synes jeg ikke du gør her: http://www.eksperten.dk/spm/939660 !
Avatar billede MadsDue Nybegynder
25. juni 2011 - 21:53 #4
det kan jeg da godt se.. kan du angive svar der inde?
Avatar billede majbom Novice
25. juni 2011 - 21:57 #5
nej, du har accepteret dit eget...
Avatar billede MadsDue Nybegynder
25. juni 2011 - 22:00 #6
det beklager jeg altså meget.. skal nok være mere opmærksom på det
Avatar billede MadsDue Nybegynder
25. juni 2011 - 23:12 #7
Lidt ligesom når man opretter en google konto. bare uden at man selv skal trykke kontroller. så gør den det automatisk ligeså snart man har taste noget i boksen
Avatar billede olsensweb.dk Ekspert
26. juni 2011 - 12:21 #8
efter en velfortjent repremande, for din sags/point håndtering, i denne og tidligere tråde, de sidste par dage er her lidt hjælp.

jeg har lavet lidt om i dine filer:
kontrol-brugernavn.php:
indsat db charset (mysql_set_charset('utf8',$con);), så der er styr på hvilke charset du kører med, jeg vil klart anbefale din kun at kører UTF-8.
der er ingen grund til at have en while løkke når du ved der kun kan være 1 post, der retuneres nu kun rå data, da alt html formatering hører til clienside.

opret_bruger3.php:
indsat id på dit brugernavn, da id er nemmere at håndterer js
indsat id, og disabled på din submit knap, knappen bliver først enablet når valid brugernavn fundet.
omskrevet din showUser function lidt, så den html formaterer svaret, laver lidt farvelade, og enabler knappen.

jeg undre mig lidt over du udskriver fejlbeskeden til txtHint jeg ville bruge err_brugernavn istedet, men det ville være hurtigt rettet
ændre
document.getElementById("txtHint").innerHTML
til
document.getElementById("err_brugernavn").innerHTML

og så slette denne linje
<div id="txtHint" class="err"></div>

opret_bruger3.php
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <title></title>
    <style type="text/css">    </style>
    <script type="text/javascript">
    function showUser(str){
        if (str=="")  {
            document.getElementById("txtHint").innerHTML="";
            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){
                var submitbutton = document.getElementById("godkend");               
                // http://stackoverflow.com/questions/3449316/how-to-compare-xmlhttp-responsetext
                var response = xmlhttp.responseText.trim();               
                if(response == str){                   
                    var html = "bruger navnet <b>" + str + "<\/b> er allerede taget";
                    document.getElementById("txtHint").innerHTML=html;
                    var elm = document.getElementById("idbrugernavn");
                    elm.style.background = "yellow";
                    elm.value = "";
                    elm.focus();
                    submitbutton.disabled="disabled";                   
                }
                else{
                    document.getElementById("txtHint").innerHTML=""; // sletter fejl beskeden hvis der har stået noget
                    document.getElementById("idbrugernavn").style.background = "white";
                    submitbutton.disabled="";
                }               
            }
        }
        xmlhttp.open("GET","../../kontrol/kontrol-brugernavn.php?q="+str,true);       
        xmlhttp.send();
    }
    </script>
</head>
<body>
    <div class="left1">
        <div id="myDiv"></div>                     
        <?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']
                $_SESSION['nr']= $_REQUEST['nr']
                $_SESSION['postnummer']= $_REQUEST['postnummer']
                $_SESSION['by']= $_REQUEST['by']
                $_SESSION['telefon1']= $_REQUEST['telefon1']
           
            ?>                   
            <div class="brugernavn">Brugernavn</div><br/>
            <div id="err_brugernavn" class="err">&nbsp;</div>
            <input id ="idbrugernavn" type="text" size="20" class="brugernavn" onblur="showUser(this.value)" 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 id="txtHint" class="err"></div>           
            <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 id="godkend" type="Submit" class="videre3" value="Videre" disabled="disabled" />
        </form>
    </div> 
</body>
</html>


kontrol-brugernavn.php
<?php
$q=$_GET["q"];
$con = mysql_connect("localhost", "root", "");
if (!$con)  {
  die('Could not connect: ' . mysql_error());
}
mysql_select_db("loginsystem", $con);
mysql_set_charset('utf8',$con);
$sql="SELECT brugernavn FROM brugere WHERE brugernavn = '".$q."'";
$resultat = mysql_query($sql);
if($resultat){
    $row = mysql_fetch_assoc($resultat);
    $name =  $row['brugernavn'];
}
else $name="";
echo $name;   
mysql_close($con);
?>


nb: dine indlæg vl blive nemmere at læse / overskue, hvis du indrammer din code i en blå box, jeg bruger altid disse 2 bb tags til code
(div)(pre)
her ville alting stå i en blå box, med en scroll bar i bunden, hvis der er behov for det, forudsat jeg havde brugt firkant paranteser istedet for runde paranteser, læs denne guide om bb tags på E http://www.eksperten.dk/guide/1325
(/pre)(/div)
Avatar billede MadsDue Nybegynder
26. juni 2011 - 14:17 #9
okay. det simpelhen fantastisk.

Men..

Den ser forskel på små og står bogstaver.

Så den vil spærre denne:
MadsDue

Men ikke

madsdue.

Det skal den også kunne
Avatar billede olsensweb.dk Ekspert
26. juni 2011 - 16:22 #11
kan du ikke bare convaterer str til lowercase ??
http://wwt.w3schools.com/jsref/jsref_tolowercase.asp

function showUser(str){
    str = str.toLowerCase();
        if (str=="")  {
        .......


og kun gemme den i lowercase i db
Avatar billede MadsDue Nybegynder
26. juni 2011 - 20:56 #12
Nej, så vil det jo også være lowercase, hvis jeg henter det igen fra databasen.

Der må være en måde, men mange tak for forslaget.
Avatar billede MadsDue Nybegynder
26. juni 2011 - 21:08 #13
Tror du at man kan gøre noget med følgende:

mysql_query(\"SELECT * FROM links WHERE url LIKE \'%$soegstor%\');
Avatar billede olsensweb.dk Ekspert
26. juni 2011 - 22:37 #14
http://www.techonthenet.com/sql/like.php
mysql_query("SELECT * FROM links WHERE url LIKE '%".$soegstor."%'"); 
vil retunerer alle de poster hvor url indeholder $soegstor et eller andet sted

mysql_query("SELECT * FROM links WHERE url LIKE '".$soegstor."%'");
vil retunerer alle de poster hvor url starter med $soegstor

mysql_query("SELECT * FROM links WHERE url LIKE '%".$soegstor."'");
vil retunerer alle de poster hvor url ender med $soegstor

mysql_query("SELECT * FROM links WHERE url LIKE '".$soegstor."'");
vil retunerer alle de poster hvor url er $soegstor

prøv noget ala denne 
mysql_query("SELECT * FROM links WHERE url LIKE '".$soegstor."'");
Avatar billede olsensweb.dk Ekspert
27. juni 2011 - 10:05 #15
med udgangspunkt i min code i #8 og dit ønske i #9

hvis den skal værer case insensitive kan du lave din sql om 
i kontrol-brugernavn.php
fra:
$sql="SELECT brugernavn FROM brugere WHERE brugernavn = '".$q."'";

til:
$sql="SELECT brugernavn FROM brugere WHERE brugernavn LIKE '".$q."'";


i opret_bruger3.php
din test på retur svaret skal laves om
fra
if(response == str ){

til
if(response.toLowerCase() == str.toLowerCase() ){

da sammenligningen skal være med sammen case

er tested, og så skulle den ged være barberet
Avatar billede MadsDue Nybegynder
27. juni 2011 - 20:45 #16
super. mange tak for hjælpen.

er helt vild med den måde du viser det på, Mange tak
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
Kurser inden for grundlæggende programmering

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