Avatar billede tobrukDk Novice
05. oktober 2012 - 07:17 Der er 15 kommentarer og
1 løsning

check brugernavn - i stede for at php skal gøre det.

Hej

Det er sådan at jeg vil gerne have at ajax eller js finder ud af for mig om det brugernavn er ind i databasen. eller ej..

det er bare sådan at jeg har fundt en på nette som du kan se her

http://youhack.me/2010/05/04/username-availability-check-in-registration-form-using-jqueryphp/


Det er kode til js eller hvad man kalder det her


$(document).ready(function()//When the dom is ready
{
    $("#username").change(function()
    { //if theres a change in the username textbox

    var username = $("#username").val();//Get the value in the username textbox
    if(username.length > 3)//if the lenght greater than 3 characters
    {
    $("#availability_status").html('Kontrol af tilgængeligheden');
    //Add a loading image in the span id="availability_status"

    $.ajax({  //Make the Ajax Request
    type: "POST",
    url: "ajax_check_username.php",  //file name
    data: "username="+ username,  //data
    success: function(server_response){

    $("#availability_status").ajaxComplete(function(event, request){

    if(server_response == '0')//if ajax_check_username.php return value "0"
    {
    $("#availability_status").html('<font color="Green">Tilgængelig</font>');
    //add this image to the span with id "availability_status"
    }
    else  if(server_response == '1')//if it returns "1"
    {
    $("#availability_status").html('<font color="red">Ikke tilgængelig</font>');
    }

    });
    }

    });

    }
    else
    {

    $("#availability_status").html('<font color="#cc0000">Username too short</font>');
    //if in case the username is less than or equal 3 characters only
    }
    return false;
    });
});



Så den der php fil ha jeg her..


<?php
include ("inc/db/db.php");

    if($stmt = $mysqli->prepare('SELECT NULL FROM `bruger` WHERE `brugernavn` = ?'))
    {
        $stmt->bind_param('s', $brugernavn);
        $brugernavn = $_POST["brugernavn"];
        $stmt->execute();
        $stmt->store_result();
        $count = $stmt->num_rows;
        $stmt->close();
        if($count == 0)
        {
            echo '0';
        }
        else
        {
            echo '1';
        }
    }
?>


her er min html hvor lige ved siden af skal brugernavn finde ude af om det er i databasen eller om det er helt nyt for bruger :)


<tr>
                        <td><p>Brugernavn</p></td>
                        <td><input type="text" name="brugernavn" id="username"></td>
                        <td><span id="availability_status"></span></td>
                    </tr>


Det er sådan havde jeg havde tænkt mig at det skulle være på

http://youhack.me/demo/live%20username%20availability/register.php


Det er helt iorden hvis du laver om i koden og gøre den mindre eller ligne det vil nok hjælp en store del hvis det er :) jeg få mange besøge på siden.. :)



Du er velkommen til at spørger hvis der er noget du gerne vil vide eller ligne.
Avatar billede olsensweb.dk Ekspert
05. oktober 2012 - 13:02 #1
>Det er kode til js eller hvad man kalder det her
det er js nærmere betegnet jquery, det kræver du includerer jquery lib (100K), men hvis du bruger jquery på siden i forvejen så har du includeret den

hvad sker der der ??
hvad sker der der IKKE ??
for du fejl ??
Avatar billede tobrukDk Novice
05. oktober 2012 - 15:47 #2
Har intet link hvor jeg henter noget til jquery eller ligne.. :)

Der ske intet noget som helst. den kommer ikke frem og sige noget overhovedet


jeg få ingen fejl den siger intet
Avatar billede olsensweb.dk Ekspert
05. oktober 2012 - 16:37 #3
det første der skriger i øjene er
i din php
$brugernavn = $_POST["brugernavn"];

skal være
$brugernavn = $_POST["username"];  // data: "username="+ username,  //data


brug udviklings værktøjet i din browser feks firebug add on til FireFox, i fanen header response (guld værd)
Avatar billede tobrukDk Novice
05. oktober 2012 - 17:09 #4
Ja, det er bare det nu har jeg sidde i google browser i lang tid, osv.. hvis man kender til det



<tr>
                        <td><p>Brugernavn</p></td>
                        <td><input type="text" name="brugernavn" id="brugernavn"></td>
                        <td><span id="availability_status"></span></td>
                    </tr>



og js er her


$(document).ready(function()//When the dom is ready
{
    $("#brugernavn").change(function()
    { //if theres a change in the username textbox

    var username = $("#brugernavn").val();//Get the value in the username textbox
    if(username.length > 3)//if the lenght greater than 3 characters
    {
    $("#availability_status").html('Kontrol af tilgængeligheden');
    //Add a loading image in the span id="availability_status"

    $.ajax({  //Make the Ajax Request
    type: "POST",
    url: "ajax_check_username.php",  //file name
    data: "brugernavn="+ brugernavn,  //data
    success: function(server_response){

    $("#availability_status").ajaxComplete(function(event, request){

    if(server_response == '0')//if ajax_check_username.php return value "0"
    {
    $("#availability_status").html('<font color="Green">Tilgængelig</font>');
    //add this image to the span with id "availability_status"
    }
    else  if(server_response == '1')//if it returns "1"
    {
    $("#availability_status").html('<font color="red">Ikke tilgængelig</font>');
    }

    });
    }

    });

    }
    else
    {

    $("#availability_status").html('<font color="#cc0000">Username too short</font>');
    //if in case the username is less than or equal 3 characters only
    }
    return false;
    });
});
Avatar billede olsensweb.dk Ekspert
05. oktober 2012 - 23:02 #5
>Ja, det er bare det nu har jeg sidde i google browser i lang tid,
jeg har det modsat, jeg har siddet i FF i lang tid og er vant til dens udviklings værktøjer
men lær udviklings værktøjerne til den browser du anvender

er du sikker på din modtagne string er korrekt ??
jeg ville modtage den som int (parseint) og behandle den derefter

success: function(server_response){                    
    val = parseInt(server_response);
    var html = (val == 0) ? '<font color="Green">Tilgængelig</font>' : '<font color="red">Ikke tilgængelig</font>';
    $("#availability_status").html(html);                                               
}



og så bør du tænke over hvordan du anvender tabeller, tabeller er til tabulærer data ikke til design

du kan lave en test php side der retunerer 1 eller 0 så du kan se om din clientside fungerer

test fil
ajax_check_username.php
<?php
// kun en af disse linjer må værer aktive
echo 0; // denne skulle gerne skrive tilgængelig
// echo 1; // denne skulle gerne skrive IKKE tilgængelig
?

hvis det virker med denne fil, og det ikke virker med den rigtige ajax_check_username.php så har du en fejl serverside.
hvilke du også ville kunne se hvis du kigger på udviklings værktøjet til din browser
Avatar billede tobrukDk Novice
11. oktober 2012 - 14:58 #6
Så det skal være sådan her


$(document).ready(function()//When the dom is ready
{
    $("#brugernavn").change(function()
    { //if theres a change in the username textbox

    var username = $("#brugernavn").val();//Get the value in the username textbox
    if(username.length > 3)//if the lenght greater than 3 characters
    {
    $("#availability_status").html('Kontrol af tilgængeligheden');
    //Add a loading image in the span id="availability_status"

    $.ajax({  //Make the Ajax Request
    type: "POST",
    url: "ajax_check_username.php",  //file name
    data: "brugernavn="+ brugernavn,  //data
   
    success: function(server_response){                   
    val = parseInt(server_response);
    var html = (val == 0) ? '<font color="Green">Tilgængelig</font>' : '<font color="red">Ikke tilgængelig</font>';
    $("#availability_status").html(html);                                               
    }

    });

    });

    }
    else
    {

    $("#availability_status").html('<font color="#cc0000">Username too short</font>');
    //if in case the username is less than or equal 3 characters only
    }
    return false;
    });
});
Avatar billede olsensweb.dk Ekspert
11. oktober 2012 - 15:18 #7
umildbartser det rigtigt ud, denne er afprøvet
html fil
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
    <title></title>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>   
    <style type="text/css">
    </style>
    <script type="text/javascript">
    $(document).ready(function(){ //When the dom is ready   
        $("#brugernavn").change(function(){ //if theres a change in the username textbox
            var username = $("#brugernavn").val();//Get the value in the username textbox
            if(username.length > 3){//if the lenght greater than 3 characters           
                $("#availability_status").html('Kontrol af tilgængeligheden');
                //Add a loading image in the span id="availability_status"
                $.ajax({  //Make the Ajax Request
                    type: "POST",
                    url: "ajax_check_username.php",  //file name
                    data: "brugernavn="+ brugernavn,  //data
                    success: function(server_response){                           
                        val = parseInt(server_response);
                        var html = (val == 0) ? '<font color="Green">Tilgængelig</font>' : '<font color="red">Ikke tilgængelig</font>';
                        $("#availability_status").html(html);                                               
                    }                       
                });
            }
            else{
                $("#availability_status").html('<font color="#cc0000">Username too short</font>');
                //if in case the username is less than or equal 3 characters only
            }
            return false;
        });
    });
    </script>
</head>
<body>

<table>
<tr>
    <td><p>Brugernavn</p></td>
    <td><input type="text" name="brugernavn" id="brugernavn"></td>
    <td><span id="availability_status"></span></td>
</tr>
</table>
</body>
</html>


men du skla selvføgelig stadig checke det serverside inden du opretter brugeren.
brugeren kan jo have slået js fra, manipuleret med js, eller programmøren kan have begået en fejl, så js ignores

så selve checket der laves serverside vil jeg lave som en function
Avatar billede tobrukDk Novice
11. oktober 2012 - 15:40 #8
jeg har også prøve at gøre sådan her ligesom han viser i video her : http://www.youtube.com/watch?v=kSxOpN-Ahfg



if(isset($_POST["name2check"]) && $_POST["name2check"] != "")
{
    include_once 'inc/db/db.php';
    $brugernavn = preg_replace('#[^a-z0-9]#i', '', $_POST["name2check"]);
    if($stmt = $mysqli->prepare('SELECT NULL FROM `bruger` WHERE `brugernavn` = ?'))
    {
        $stmt->bind_param('s', $brugernavn);
        $brugernavn = $_POST["brugernavn"];
        $stmt->execute();
        $stmt->store_result();
        $count = $stmt->num_rows;
        $stmt->close();
        if(strlen($brugernavn) < 4)
        {
            echo "Brugernavn på 4 til 20 tak";
            exit();
        }
        if(is_numeric($brugernavn[0]))
        {
            echo "Bruger skal ikke start med et tal!";
            exit();
        }
        if($count < 1)
        {   
            echo "<strong>" . $brugernavn . "</strong> er okay";
            exit();
        }
        else
        {
            echo "<strong>" . $brugernavn . "</strong> er taget!. Finde et nyt";
            exit();
        }
    }
}



javascript indhold eller hvad man siger


<script type="text/javascript">
function checkbrugernavn() {
    var status = document.getElementById("brugernavnstatus");
    var u = document.getElementById("brugernavn").value;
    if(u != ""){
        status.innerHTML = "Checking...";
        var hr = new XMLHttpRequest();
        hr.open("POST", "opret-bruger.php", true);
        hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        hr.onreadystatechange = function() {
            if(hr.readyState == 4 && hr.status == 200){
                status.innerHTML = hr.responseText;
            }
        }
    var v = "name2check"=+u
    hr.send(v);
    }
}
</script>



det er min html så


<tr>
                        <td><p>Brugernavn</p></td>
                        <td><input type="text" name="brugernavn" onblur="checkbrugernavn()" maxlength="20"></td>
                        <td><span id="brugernavnstatus"></span></td>
                    </tr>
Avatar billede tobrukDk Novice
11. oktober 2012 - 15:42 #9
#ronols


har du mulighed for at ligge den op på din side så har jeg bedre mulighed for at hente der link til ajax google ligne link. :)

det vil være super hvis du gider?
Avatar billede olsensweb.dk Ekspert
11. oktober 2012 - 16:15 #10
#8
det er imod princippet for AJAX at retunerer html code, der er desværre mange guides på nettet der gør det

#9
det er jo bare at rette alle link manuelt :( dvs højre på link kopier, og rette url encodet karaktere, da E smadre link, det er en medvirkende årsag til jeg hellere vil bruge udvikleren.dk
bægge filer er pakket ned her , jeg har dog ikke tested sql sætningen
Avatar billede tobrukDk Novice
11. oktober 2012 - 16:21 #11
#10, okay ;)

#10 :) okay super :), det er klart Ronsols! :) men lige et svar!
Avatar billede tobrukDk Novice
11. oktober 2012 - 16:22 #12
Okay, ;) jeg kigger lige på det men vil du ikke lige et svar :) som tak for hjælp
Avatar billede olsensweb.dk Ekspert
11. oktober 2012 - 16:30 #13
får du her
der er det nemmere på udvikleren.dk, hvor der bare tildeles karma, istedet for disse tåbelige svar indlæg.
men det ved du jo godt, da du også er der.
Avatar billede tobrukDk Novice
11. oktober 2012 - 16:32 #14
Det er sådan at admin findes i databasen men det gøre jesper ikke. men den siger kun "Ikke tilgængelig"
Avatar billede tobrukDk Novice
11. oktober 2012 - 16:32 #15
Vi kan bare tag den videre på udvikleren.dk,
Avatar billede olsensweb.dk Ekspert
11. oktober 2012 - 16:47 #16
sådan bør din IsUserCreated se ud:,
(utested)
function IsUserCreated($mysqli, $username){
    if($stmt = $mysqli->prepare('SELECT id FROM `bruger` WHERE `brugernavn` = ?')){
        $stmt->bind_param('s', $username);       
        $stmt->execute();
        $stmt->store_result();
        $stmt->bind_result($id);
        $count = $stmt->num_rows;
        $stmt->close();   
        return ($count == 0)? 0 : $id; 
    }
}
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

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