eT` Posted March 17, 2011 Report Share Posted March 17, 2011 (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 March 17, 2011 by eT` Quote Link to comment Share on other sites More sharing options...
0 briedis Posted March 17, 2011 Report Share Posted March 17, 2011 (edited) 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 March 17, 2011 by briedis Quote Link to comment Share on other sites More sharing options...
0 Kemito Posted March 17, 2011 Report Share Posted March 17, 2011 (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 March 17, 2011 by Kemito Quote Link to comment Share on other sites More sharing options...
0 eT` Posted March 17, 2011 Author Report Share Posted March 17, 2011 (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 March 17, 2011 by eT` Quote Link to comment Share on other sites More sharing options...
0 Zefirs Posted March 17, 2011 Report Share Posted March 17, 2011 (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 March 17, 2011 by Zefirs Quote Link to comment Share on other sites More sharing options...
0 briedis Posted March 17, 2011 Report Share Posted March 17, 2011 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. Quote Link to comment Share on other sites More sharing options...
0 eT` Posted March 17, 2011 Author Report Share Posted March 17, 2011 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>'; } Quote Link to comment Share on other sites More sharing options...
0 Kemito Posted March 17, 2011 Report Share Posted March 17, 2011 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()); Quote Link to comment Share on other sites More sharing options...
0 Vecteevs Posted March 17, 2011 Report Share Posted March 17, 2011 tu mekle tikai ID, bet pashu lietotaja vardu nemeklē Quote Link to comment Share on other sites More sharing options...
0 Aiviss Posted March 17, 2011 Report Share Posted March 17, 2011 tu mekle tikai ID, bet pashu lietotaja vardu nemeklē ID parasti ir unikāls Quote Link to comment Share on other sites More sharing options...
0 anonīms Posted March 17, 2011 Report Share Posted March 17, 2011 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() Quote Link to comment Share on other sites More sharing options...
0 briedis Posted March 17, 2011 Report Share Posted March 17, 2011 (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 March 17, 2011 by briedis Quote Link to comment Share on other sites More sharing options...
0 anonīms Posted March 18, 2011 Report Share Posted March 18, 2011 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)? Quote Link to comment Share on other sites More sharing options...
0 marcis Posted March 19, 2011 Report Share Posted March 19, 2011 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. Quote Link to comment Share on other sites More sharing options...
0 ezis Posted March 19, 2011 Report Share Posted March 19, 2011 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" Quote Link to comment Share on other sites More sharing options...
Question
eT`
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
register.php
check.php
Edited by eT`Link to comment
Share on other sites
14 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.