Jump to content
php.lv forumi
  • 0

Username check


Question

Posted (edited)

Nezinu, kas par iemeslu kapēc nestrādā username check

Vislaik atgriež, ka lietotājvārds ir pieejams, lai gan mēģināju ierakstīt tādu, kas jau eksistē.

 

index.php

<script type="text/javascript" src="http://xxx.id.lv/js/jquery-1.5.1.min.js"></script>

 

register.php

<script type="text/javascript" language="javascript">
$(document).ready(function () {
   $("#username").blur(function () {
       $("#msgbox").removeClass().text('Pārbauda...').fadeIn("slow");
       $.post("check.php?action=user", {
           user: $(this).val()
       }, function (data) {
           if (data == 'no')
           {
               $("#msgbox").fadeTo(200, 0.1, function ()
               {
                   $(this).html('Šāds lietotājvārds jau ir reģistrēts').addClass('error').fadeTo(900, 1);
               });
           } else {
               $("#msgbox").fadeTo(200, 0.1, function ()
               {
                   $(this).html('Lietotājvārds ir pieejams').addClass('ok').fadeTo(900, 1);
               });
           }

       });    
   });
});
</script>
<input type="text" name="user" id="username" class="input" /> <span id="msgbox" style="display:none"></span>

 

check.php

<?php
switch($_GET["action"])
{
case 'user':
$user_name=$_POST['user'];
$uq = mysql_query("SELECT COUNT(*) FROM users WHERE username='".$user_name."'");
if (mysql_result($uq)>0)
{
echo "no";
} 
else
{
echo "yes";
}
break;
}
?>

Edited by eT`

14 answers to this question

Recommended Posts

  • 0
Posted (edited)

mysql_result vietā vienkārši nebūtu nočekot rindu skaitu, līdz ar to iegūtu esošu 1, ja lietotājvārds eksistē un ja neeksistē 0 ? Tā tu mierīgi iegūsi vēlamo rezultātu.

mysql_num_rows($variable);

+ jāizmanto ir:

mysql_real_escape_string($variable);

Edited by Kemito
  • 0
Posted (edited)

arī ar šādu neiet

 

case 'user':
$user_name=mysql_real_escape_string($_POST['user']);
$uq = mysql_query("SELECT id FROM users WHERE username='".$user_name."'");
if (mysql_num_rows($uq)>0)
{
echo "no";
} 
else
{
echo "yes";
}
break;

 

edit: mysql_real_escape_string() vēl nebiju pielicis, jo tikai testēju šo f-ju.

 

edit2: problēma laikam ir šijā vietā

if (data == 'no')

jo pieliekot else vietā else if kurš pārbauda vērtību yes, Pārbauda nepazūd [ nesakrīt ne viens no ifiem ]

Edited by eT`
  • 0
Posted (edited)

Esi pamēģinājis izvadīt $user saturu? Pamēģini pēc tam pa taisno no DB "SELECT id FROM users WHERE username='".$user_name."'" izpildīt ar izvadīto user.

 

Edit:too late

Edited by Zefirs
  • 0
Posted

Tā ir stulba atruna - "mysql_real_escape_string() vēl nebiju pielicis, jo tikai testēju šo f-ju."

Šādiem drošības aspektiem nedrīkst būt atruna - ai, gan jau vēlāk pielikšu, jo visdrīzāk arī aizmirsīsi.

 

Izmanto firebug consoles logu, tur var redzēt visus ajax pieprasījumus, nosūtītos datus un atbildes.

  • 0
Posted

mod_rewrite šo nevarētu ietekmēt?

 

pārliku to JS uz index <head>

nomainīju f-ju

$(document).ready(function () {
   $("#username").blur(function () {
       $("#msgbox").removeClass().text('Pārbauda...').fadeIn("slow");
       $.post("pages/check.php?action=user", {
           user: $(this).val()
       }, function (data) {
           if (data == 'no')
           {
               $("#msgbox").fadeTo(200, 0.1, function ()
               {
                   $(this).html('Šāds lietotājvārds jau ir reģistrēts').addClass('error').fadeTo(900, 1);
               });
           } else {
               $("#msgbox").fadeTo(200, 0.1, function ()
               {
				alert(data)
                   $(this).html('Lietotājvārds ir pieejams').addClass('ok').fadeTo(900, 1);
               });
           }

       });    
   });
});

 

mans .htaccess

Options +FollowSymlinks 

RewriteEngine On 
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !^(.+)\.(css|js|jpg|gif|png|ico)$
RewriteRule ^(.*) index.php [QSA,L]

 

un index

$p=explode('/',$_SERVER['REQUEST_URI']);
if ($p[1]=='' || $p[1] == 'home') $p[1]='index';

if (file_exists($m = 'pages/'.$p[1].'.php')) {
 ob_start(); 
 require $m;
 $content = ob_get_contents(); 
 ob_end_clean(); 
} else {
 $content = '<h2>Lapa nav atrasta!</h2>';
}

  • 0
Posted

Derētu erroru redzēt varbūt pašā vaicājumā ar ?

$uq1 = "SELECT id FROM users WHERE username='".$user_name."'";
$uq = mysql_query($uq1) or die(mysql_error()); 

  • 0
Posted

Labot manu, ja kļūdos, bet viena gudra persona reiz teica, ka mysql_num_rows() nevajadzētu lietot, jo vairāk noslogo visu. True?

count(id) > mysql_num_rows()

  • 0
Posted (edited)

Labot manu, ja kļūdos, bet viena gudra persona reiz teica, ka mysql_num_rows() nevajadzētu lietot, jo vairāk noslogo visu. True?

count(id) > mysql_num_rows()

 

Nu nu, tautai jāzin savi varoņi :)

Es saku, ka uz kopējā kvērija izpildes fona mysql_num_rows vispār neko nenoslogo.

 

Protams, izmantot to, lai saskaitītu cik ierakstu ir tabulā vispār gan būtu stulbums.

 

Tā kā vajadzētu izšķirt problēmas būtību - nejau mysql_num_rows ir tas pudeles kakls, bet gan VISU ierakstu atlasīšana iekš DB.

 

Stulbi:

$data = mysql_query("SELECT * FROM table");
echo mysql_num_rows($data);

 

Pilnīgi pieņemami:

$data = mysql_query("SELECT COUNT(*) FROM table");
echo mysql_result($data, 0);

 

Normāli ir, ja mysql_num_rows izmanto, lai iznātu, vai vispār kvērijs kaut ko ir atgriezis.

Edited by briedis
  • 0
Posted

briedi, tieši par tavo "Stulbo" gadījumu ar runāju. Pašlaik, tieši šinī kodā tas tak tiek lietots.

Labāk ir otrais variants. Bet kādēļ count(*), ne count(id)?

  • 0
Posted

http://dev.mysql.com/doc/refman/5.1/en/group-by-functions.html#function_count

 

COUNT(*) neskrien cauri visiem atlasītajiem ierakstiem (MyISAM), bet uzreiz atgriež to skaitu. Ja tu lieto COUNT(`column`), jāiet cauri visiem atlasītajiem ierakstiem un jāpārbauda vai `column` vērtība nav NULL, jo NULL ieraksti netiek skaitīti.

 

Ja lietojam mysql_num_rows() PHP pusē, tad tiek atgriezti visi atlasītie ieraksti, PHP skrien tiem cauri un skaita. Šajā gadījumā tiek darītas vairākas pilnīgi liekas darbības.

  • 0
Posted

Vaina nav "virtuālajā direktorijā?" $.post("check.php?action=user"

ja Tu atrodies lapa.lv/webs/ tad jābūt $.post("/webs/check.php?action=user"

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...