Jump to content
php.lv forumi
  • 0

Username check


eT`

Question

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`
Link to comment
Share on other sites

14 answers to this question

Recommended Posts

  • 0

Ko nez atgriež mysql_result?

http://php.net/manual/en/function.mysql-result.php

 

Un salabo arī savu sql injekciju, joprojām nevaru saprast, kāpēc tie "jauniņie" (vai šo tā varētu saukt - ar 279 postiem??) nevar iemācīties lietot mysql_real_escape_string()...

Edited by briedis
Link to comment
Share on other sites

  • 0

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
Link to comment
Share on other sites

  • 0

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`
Link to comment
Share on other sites

  • 0

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.

Link to comment
Share on other sites

  • 0

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>';
}

Link to comment
Share on other sites

  • 0

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
Link to comment
Share on other sites

  • 0

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.

Link to comment
Share on other sites

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...