Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Zwracać prawdę bądz fałsz
Forum PHP.pl > Forum > Przedszkole
Piotrwusek
Jakie zrobić zapytanie do bazy danych które jako wynik poda mi prawdę bądź fałsz.

Jeżeli taki użytkownik jest w bazie to niech zwróci fałsz, jeżeli nie ma to niech zwróci prawdę.
webdice
Zrób to po prostu tak:
  1. <?php
  2. $query = mysql_query ("SELECT COUNT(*) as `count` FROM `users` WHERE `nazwa` = 'nazwa użytkownika'"); // bądź wyszukuj po innym polu
  3.  
  4. $row = musql_fetch_assoc ($query);
  5.  
  6. if ($row['count'] == 0)
  7. {
  8. // nie ma uzytkownika
  9. }
  10. else
  11. {
  12. // jest użytkownik
  13. }
  14. ?>
Lion_87
może zapytaj o count?
sniezny_wilk
Inna wersja:

  1. <?php
  2. $query = mysql_query ("SELECT * FROM `users` WHERE `nazwa` = 'nazwa użytkownika'"); 
  3.  
  4. $count = mysql_num_rows($query); 
  5.  
  6. echo( $count );
  7. //wyświetli "1" (prawda) - jak jest user, lub "0" (fałsz) jeśli takiego nie ma.
  8. ?>
Piotrwusek
A na jakiej zasadzie działa rejestracja na nasza-klasa.pl

http://nasza-klasa.pl/register

Że odrazu po wpisaniu loginu i przeniesieniu kursora w inne miejsce sprawdza czy istnieje podany login.
webdice
Poczytaj o AJAX'ie.

~sniezny_wilk mysql_num_rows" title="Zobacz w manualu PHP" target="_manual nie powinno się używać, jest o wiele wolniejsze od count, nie wspominam juz o tym że w PDO nie ma takiej funkcji.
sniezny_wilk
Zapewne jest to oparte na AJAX'ie i jakimś skrypcie sprawdzającym bazę. Po przeniesieniu kursora odpalana jest funkcja wysyłająca podany login do php, ten sprawdza w bazie (może być podobnie jak to o co pytałeś) czy istnieje i zwraca 0, 1. Po przeczytaniu tej informacji wystarczy JS'em wyświetlić konkretny komunikat.

@webdicepl wg. moich testów dla pojedynczego zapytania obydwie metody są tak samo szybkie (średnie czasy wykonywania). Założyłem, że Piotrwusek, chce dostać jak najprostszą metodę i tak jako pierwsza wpadła mi do głowy.
webdice
Napisane z nudów smile.gif.

  1. <title>check login</title>
  2.  
  3.  
  4. function checkLogin (name)
  5. {
  6. var ajaxRequest = false;
  7.  
  8. if (window.XMLHttpRequest)
  9. {
  10. ajaxRequest = new XMLHttpRequest ();
  11.  
  12. if (ajaxRequest.overrideMimeType)
  13. {
  14. ajaxRequest.overrideMimeType ('text/xml');
  15. }
  16. }
  17. else if (window.ActiveXObject)
  18. {
  19. try
  20. {
  21. ajaxRequest = new ActiveXObject ("Msxml2.XMLHTTP");
  22. }
  23. catch (exception)
  24. {
  25. ajaxRequest = new ActiveXObject ("Microsoft.XMLHTTP");
  26. }
  27. }
  28.  
  29. ajaxRequest.open ('GET', 'check.php?login=' + name, true);
  30.  
  31. ajaxRequest.onreadystatechange = function ()
  32. {
  33. if (ajaxRequest.readyState == 1)
  34. {
  35. alert ('SPRZAWDZANIE...');
  36. }
  37. else if (ajaxRequest.readyState == 4)
  38. {
  39. if (ajaxRequest.status == 200)
  40. {
  41. if (ajaxRequest.responseText == 'YES')
  42. {
  43. alert ('PODANY LOGIN ISTNIEJE');
  44. }
  45. else if (ajaxRequest.responseText == 'NO')
  46. {
  47. alert ('PODANY LOGIN NIE ISTNIJE');
  48. }
  49. else
  50. {
  51. alert ('BLAD2');
  52. }
  53. }
  54. else
  55. {
  56. alert ('BLAD3');
  57. }
  58. };
  59.  
  60. ajaxRequest.send (null);
  61. }
  62.  
  63. </script>
  64. </head>
  65.  
  66. <form name="form" method="POST">
  67. <input onBlur="checkLogin (this.value);" type="text" name="login" />
  68. </form>
  69.  
  70. </body>
  71. </html>


  1. <?php
  2.  
  3. $query = mysql_query ("SELECT COUNT(*) as `count` FROM `users` WHERE `login` = '" . $_GET['login'] . "'") or die (mysql_error ());
  4.  
  5. $row = mysql_fetch_assoc ($query);
  6.  
  7. if ($row['count'] == 0)
  8. {
  9. print 'NO';
  10. }
  11. else
  12. {
  13. print 'YES';
  14. }
  15.  
  16. ?>


Jest kilka rzeczy do poprawienia, ale to zostawiam Tobie.
Piotrwusek
Dzięki, właśnie czytałem kilka kursów o ajax (znalazłem coś w google), a ty przyszyłeś mi z pomocą.


No, ale teraz jest problem

Zrobiłem check.php - to mam dobrze bo mi dobrze wyświetla
Ale z tym mi nie idzie - nic nie zmieniałem jeszcze chociaż próbuje cały czas

Nic mi się nie robi.

Pomórzcie mi zarzucić wędkę, a ryb spróbuje sobie złowić i się podzielić. smile.gif
webdice
Najpierw sprawdź czy plik check.php zwraca Ci samo YES lub NO (oczywiście musisz dodać mysql_connect" title="Zobacz w manualu PHP" target="_manual oraz mysql_select_db" title="Zobacz w manualu PHP" target="_manual).

Następnie sprawdź co zwraca Ci plik html. Nie zapominaj że nie możesz otworzyć pliku lokalnie, tylko przez apache, przykładowo:

Kod
http://localhost/index.html
Piotrwusek
plik check.php

zwraca mi dla

check?login=Piotrwusek YES
check?login=Wecate NO

A plik index.html otwieram na zdalnym serwerze. I nic mi sie nie zwraca. LINK
webdice
Nie zamykasz klamry w instrukcji:

Kod
else if (ajaxRequest.readyState == 4)
Piotrwusek
ooo Dzięki,


zamknołem ją po bład 3 smile.gif


to mi sie wyświetla SPRAWDZANIE i błąd 2 sad.gif



jak można zamiast okienek to wyświetlić to w stronie winksmiley.jpg

edit

próbowałem zmiennymi ale nie wychodzi

jak zmienić te wyskakujące okienka na tekst w stronie?
webdice
Poczytaj o innerHTML.
Piotrwusek
Dzięki...


Już nie wyskakują mi okienka tylko tekst.

Tak zrobiłem

  1. <?php
  2. document.getElementById('spr').innerHTML="Sprawdzanie...";
  3. ?>

  1. <td id="spr"></td>


Ale cały czas poazuje mi się BŁĄD 2
webdice
Źle deklarujesz zmienne, musi być tak:
Kod
var NO  = 'NO';
var YES = 'YES';
Piotrwusek
Próbowałem tak i mi nie idze, cały czas ten błąd 2

Kod
<script>

function checkLogin (name)
{
var ajaxRequest = false;
var NO  = 'NO';
var YES = 'YES';
if (window.XMLHttpRequest)
{
ajaxRequest = new XMLHttpRequest ();

if (ajaxRequest.overrideMimeType)
{
ajaxRequest.overrideMimeType ('text/xml');
}
}
else if (window.ActiveXObject)
{
try
{
ajaxRequest = new ActiveXObject ("Msxml2.XMLHTTP");
}
catch (exception)
{
ajaxRequest = new ActiveXObject ("Microsoft.XMLHTTP");
}
}

ajaxRequest.open ('GET', 'check.php?login=' + name, true);

ajaxRequest.onreadystatechange = function ()
{
if (ajaxRequest.readyState == 1)
{
document.getElementById('spr').style.color = 'blue';
document.getElementById('spr').innerHTML="Sprawdzanie...";
}
else if (ajaxRequest.readyState == 4)
{
if (ajaxRequest.status == 200)
{
if (ajaxRequest.responseText == YES)
{
document.getElementById('spr').style.color = 'red';
document.getElementById('spr').innerHTML="Login jest już zajęty.";
}
else if (ajaxRequest.responseText == NO)
{
document.getElementById('spr').style.color = 'green';
document.getElementById('spr').innerHTML="Login poprawny i dostępny.";
}
else
{
document.getElementById('spr').style.color = 'black';
document.getElementById('spr').innerHTML='Błąd 2';
}
}
else
{
document.getElementById('spr').style.color = 'black';
document.getElementById('spr').innerHTML="Błąd 3";
}
}
};

ajaxRequest.send (null);
}

</script>
webdice
Coś źle zwracasz w pliku check.php. Musisz zwrócić tylko YES lub NO bez żadnych innych znaków białych, a Twój skrypt zwraca:

Kod




YES
Piotrwusek
plik check.php

  1. <?php
  2.  
  3. include("includes/config.php");
  4.  
  5. mysql_connect(HOST, ROOT, PASS) or die ("Nie masz uprawnien");
  6.  
  7. include("includes/language/". LANGUAGE .".php");
  8.  
  9. $query = mysql_query ("SELECT COUNT(*) as `count` FROM `".NAMEBASE."users` WHERE `login` = '" . $_GET['login'] . "'") or die (mysql_error ());
  10.  
  11. $row = mysql_fetch_assoc ($query);
  12.  
  13. if ($row['count'] == 0)
  14. {
  15. print 'NO';
  16. }
  17. else
  18. {
  19. print 'YES';
  20. }
  21.  
  22. ?>
webdice
To masz te znaki albo w configu, albo pliku języka.
Piotrwusek
ale w tych plikach definiuje stałe tylko
webdice
Pokaż je na wszelki wypadek smile.gif.
Piotrwusek
config.php
  1. <?php
  2.  
  3. define('HOST', '');
  4. define('ROOT', ''); // skasowałem tylko dane
  5. define('PASS', '');
  6. define('BAZA', '');
  7. define('LANGUAGE', 'polish');
  8. define('ILOSC', '5');
  9. define('NAMEBASE', 'piotrwuseklogo_');
  10. ?>


polish.php
  1. <?php
  2. define('KODOWANIE', 'text/html; charset=ISO-8859-2');
  3. define('GOOGLE', '');
  4. define('TITLE', 'Piotrwusek.pl -');
  5. define('IKONA', 'images/ikona.gif');
  6. define('AUTOR', 'Piotrwusek.pl');
  7. define('KEYWORDS', 'Piotrwusek.pl');
  8. define('PRAWA', 'Piotrwusek.pl');
  9. ?>
webdice
Nie masz czasem w którymś z plików przed <?php jakiś interów?
Piotrwusek
te kody są żywcem przekopiowane
webdice
Wrzuć gdzieś spakowane archiwum z tym, bo mi się wierzyć nie chce smile.gif.
Piotrwusek
Prosze...

LINK DOWNLOAD
LINK DZIAŁĄNIE
webdice
W config.php masz spację przed otwarciem znacznika PHP. W plikach config.php, check.php, oraz polish.php masz kilka enterów po zamknięciu znacznika PHP.
Piotrwusek
poprawiłem ale nadal to samo
webdice
Teraz Ci sie MySQL wysypał.

http://piotrwusek.pl/login/check.php?login=Piotrwusek
Piotrwusek
Dzieki.........

DZIAŁĄexclamation.gif!!


<lol>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.