I hope I don't make your eyes bleed by puting all the code here but
there is no other way to show it to you.
I made change only in one place of the code to gather "login" value:
{login:value}
Oryginaly it was: {name:value}.

 $.post("{{=URL(r=request,c='default',f='ajaxuserexist')}}",
{login:value},function(result){

Below is the whole content of index.html

{{extend 'layout.html'}}

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd";>
<html>
<head>
    <meta http-equiv="Content-type" content="text/html;
charset=utf-8">
    <title>Ajax User Validation with web2py by Martin Sagastume</
title>
    <style type="text/css">
    <!--
    body { font-family:Arial,Verdana,Sans-serif; }

    input[type=text]{
        font-size:12px;
        color:#666666;
        background-color:#ffffff;
        padding-top:5px;
        width:200px;
        height:20px;
        border:1px solid #999999;
    }

    #resultbox { font-size:11px; }
    .msg { color:blue; }
    .success { color:green; }
    .error { color:red; }
    //-->
    </style>
    <script type="text/javascript"
src="{{=URL(r=request,c='static',f='jquery.js')}}"></script>
    <script type="text/javascript">

    var submit = false;
    $(document).ready(function(){
        $("form").submit(function() {
            return submit;
        });
    });

    function getData(value){
        if(value != ""){
            $
("#resultbox").removeClass().addClass('msg').text('Validating...').fadeIn(10);
            $.post("{{=URL(r=request,c='default',f='ajaxuserexist')}}",
{login:value},function(result){
                if(result=='yes'){
                    $
("#resultbox").removeClass().addClass('error').text('Login already
taken').fadeTo(900,1);
                    submit = false;
                }else{
                    $
("#resultbox").removeClass().addClass('success').text('Login is
available for registration!').fadeTo(900,1);
                    submit = true;
                }
            });
        }else{
            $("#resultbox").removeClass().addClass('msg').text('This
field is required');
        }
    }

    </script>
</head>
<body>
    <form id="form1" method="post" action="page2">
        <label for="country">Login:</label><br />
        <input type="text" id="login" name="login"
onblur="getData(this.value)" /><br />
        <div id="resultbox" class="msg"></div><br />
        <input type="submit" id="bsubmit" name="bsubmit"
value="Submit" />
    </form>
</body>
</html>




On 30 Cze, 22:12, mdipierro <mdipie...@cs.depaul.edu> wrote:
> This should give you an error because the print(username) is outside
> the funciton the function that defines username, after the function
> returns. How are you passing the username to the ajax call? Did you
> check with firebug that is calls the correct url?
>
> On 30 Giu, 15:01, elfuego1 <elfue...@gmail.com> wrote:
>
> > There was NO error messages. The code just didn't work.
> > After inserting:
> > print repr(username) to default.py I got:
>
> > # -*- coding: utf-8 -*-
>
> > #########################################################################
> > ## This is a samples controller
> > ## - index is the default action of any application
> > ## - user is required for authentication and authorization
> > ## - download is for downloading files uploaded in the db (does
> > streaming)
> > ## - call exposes all registered services (none by default)
> > #########################################################################
>
> > def index():
> >     """
> >     example action using the internationalization operator T and flash
> >     rendered by views/default/index.html or views/generic.html
> >     """
> >     response.flash = T('Welcome to web2py')
> >     return dict(message=T('Hello World'))
>
> > def user():
> >     """
> >     exposes:
> >    http://..../[app]/default/user/login
> >    http://..../[app]/default/user/logout
> >    http://..../[app]/default/user/register
> >    http://..../[app]/default/user/profile
> >    http://..../[app]/default/user/retrieve_password
> >    http://..../[app]/default/user/change_password
> >     use @auth.requires_login()
> >         @auth.requires_membership('group name')
> >         @auth.requires_permission('read','table name',record_id)
> >     to decorate functions that need access control
> >     """
> >     return dict(form=auth())
>
> > def download():
> >     """
> >     allows downloading of uploaded files
> >    http://..../[app]/default/download/[filename]
> >     """
> >     return response.download(request,db)
>
> > def call():
> >     """
> >     exposes services. for example:
> >    http://..../[app]/default/call/jsonrpc
> >     decorate with @services.jsonrpc the functions to expose
> >     supports xml, json, xmlrpc, jsonrpc, amfrpc, rss, csv
> >     """
> >     session.forget()
> >     return service()
>
> > def page2():
> >     name = request.vars.login
> >     #db.auth_user.insert(name=name)
> >     return dict(name=name)
>
> > def ajaxuserexist():
> >       username = request.vars.values()[0]
> >       return  db(db.auth_user.login==username).count() and 'yes' or
> > 'no'
>
> > print repr(username)
> > response._vars=response._caller(index)
>
> > On 30 Cze, 21:51, mdipierro <mdipie...@cs.depaul.edu> wrote:
>
> > > You can simplify it a bit
>
> > > def ajaxuserexist():
> > >       username = request.vars.values()[0]
> > >       return  db(db.auth_user.login==username).count() and 'yes' or
> > > 'no'
>
> > > although it will not solve your problem.
> > > There is nothing special in table auth_user so the problem is
> > > somewhere else.
>
> > > I suggest you insert a print repr(username).
> > > Do you get any thicket? What does it say?
>
> > > massimo
>
> > > On 30 Giu, 14:29, elfuego1 <elfue...@gmail.com> wrote:
>
> > > > During registration I want to check on the fly, if login chosen by the
> > > > user is already in use or is it not in db and available to be used.
>
> > > > def ajaxuserexist():
> > > >     username = request.vars.values()[0]
> > > >     query = (db.auth_user.login==username)
> > > >     numres = db(query).count()
> > > >     if numres > 0 :
> > > >        return 'yes'
> > > >     else:
> > > >         return 'no'
>
> > > > When I test it on any other table that doesn't have prefix auth_ then
> > > > the above code works, but unfortunatelly I need to test auth_user
> > > > table :-(
>
> > > > On 30 Cze, 21:19, Chris S <sanders.ch...@gmail.com> wrote:
>
> > > > > Probably a dumb question, but what are you checking the user against?
>
> > > > > Both my and your example above are checking for username and you
> > > > > didn't define a username in your auth_user.
>
> > > > > Your query then is not working as:
>
> > > > > def userexist(emailcheck):
> > > > >     if db(db.auth_user.email==emailcheck).count() > 0:
> > > > >         return 'yes'
> > > > >     else:
> > > > >         return 'no'
>
> > > > > I know I've returned searches on auth_user it's no different than
> > > > > other tables.  Just gotta find whey your getting no results.  Might
> > > > > help if you post the exact search code that goes with the above
> > > > > auth_user and the error message that's generated.
>
> > > > > On Jun 30, 2:12 pm, elfuego1 <elfue...@gmail.com> wrote:
>
> > > > > > Since I had added some fields (and intend to customize it further) 
> > > > > > to
> > > > > > my auth_user table the code for auth_user in db.py looks like that:
>
> > > > > > from gluon.tools import *
> > > > > > auth=Auth(globals(),db)
>
> > > > > > db.define_table('auth_user',
> > > > > >     SQLField('login', 'string', length=50, default=''),
> > > > > >     SQLField('password', 'password', length=512, readable=False,
> > > > > > label='Password'),
> > > > > >     SQLField('registration_key', length=512, default= '',
> > > > > > writable=False, readable=False),
> > > > > >     SQLField('reset_password_key', length=512, default='',
> > > > > > writable=False, readable=False),
> > > > > >     SQLField('first_name', length=128,default=''),
> > > > > >     SQLField('last_name', length=128,default=''),
> > > > > >     SQLField('email', length=128,default='', unique=True),
> > > > > >     SQLField('phone', 'string', length=30, default=''),
> > > > > > )
>
> > > > > > On 30 Cze, 20:59, Chris S <sanders.ch...@gmail.com> wrote:
>
> > > > > > > And you've defined auth in db.py with:
>
> > > > > > > from gluon.tools import Auth
> > > > > > > auth = Auth(globals(), db)
> > > > > > > auth.define_tables()
>
> > > > > > > I've done searches on auth_user before... I think.
>
> > > > > > > On Jun 30, 1:44 pm, elfuego1 <elfue...@gmail.com> wrote:
>
> > > > > > > > Unfortunatelly it doesn't.
> > > > > > > > I can access any other table that's available through my 
> > > > > > > > application
> > > > > > > > but I can't get any value out of auth_user table.
> > > > > > > > Is it somehow protected?
> > > > > > > > Do I need to add some extra piece of code to expose them in my
> > > > > > > > application in order to be able to acqiure any value out of 
> > > > > > > > them?
>
> > > > > > > > Desperate searcher.
>
> > > > > > > > On 30 Cze, 06:25, Chris S <sanders.ch...@gmail.com> wrote:
>
> > > > > > > > > I don't guess I follow.  Isn't that the same as:
>
> > > > > > > > > def userexist(namecheck):
> > > > > > > > >     if db(db.auth_user.username==namecheck).count() > 0:
> > > > > > > > >         return 'yes'
> > > > > > > > >     else:
> > > > > > > > >         return 'no'
>
> > > > > > > > > So I"m saying your querry should be:
> > > > > > > > > query = (db.auth_user.username==username)
>
> > > > > > > > > Hope that helps
>
> > > > > > > > > On Jun 29, 5:34 pm, elfuego1 <elfue...@gmail.com> wrote:
>
> > > > > > > > > > Hello,
>
> > > > > > > > > > On this 
> > > > > > > > > > page:http://web2pyslices.com/main/slices/take_slice/53Ihave
> > > > > > > > > > found a great pice of code  which allows to check on the 
> > > > > > > > > > fly if there
> > > > > > > > > > is an exact value already in database.
>
> > > > > > > > > > Oryginal code:
>
> > > > > > > > > > def ajaxuserexist():
> > > > > > > > > >     username = request.vars.values()[0]
> > > > > > > > > >     query = db.users.name.like(username)
> > > > > > > > > >     numres = db(query).count()
> > > > > > > > > >     if numres > 0 :
> > > > > > > > > >         return 'yes'
>
> > > > > > > > > >     return 'no'
>
> > > > > > > > > > But when I try to implement the same solution on auth_user 
> > > > > > > > > > table for
> > > > > > > > > > login column it stops working:
>
> > > > > > > > > >     query = db.auth_users.login.like(username)
>
> > > > > > > > > > Do you know some solution/workaround to this problem?
>
> > > > > > > > > > Best regards.

Reply via email to