Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak pobrac liczbe rekordów z bazy danych
Forum PHP.pl > Forum > Bazy danych > MySQL
romek510
Witam

Jestem początkującym programistą i z php oraz mysql mam stycznosc od nie dawna. Chcialem napisac skrypt do rejestracji na strone, ale napotkałem pewien problem. Przy rejestracji chce sprawdzić czy podany login istnieje w bazie czy tez nie.
Myslałem aby użyc następującego zapytania:
  1. SELECT login FROM uzytkownicy WHERE login='$login'


Problem w ze nie wiem jak pobrac z bazy liczbe z tego zapytania. Próbowałem zrobić to w taki sposób, ale nie działa. Podpowiecie jak pobrać wynik tego zapytania z bazy aby mozna go było użyc taki sposób??

  1. <?php
  2.  
  3. mysql_connect('localhost','root','');
  4. mysql_select_db('rpa_2010');
  5. $login=$_POST['login'];
  6.  
  7. $zapytanie =mysql_query("select login from uzytkownicy WHERE login='$login'");
  8. $wynik =mysql_fetch_assoc($zapytanie);
  9. if($wynik==0)
  10. {
  11. $haslo=$_POST['haslo'];
  12. $haslo2=$_POST['haslo2'];
  13. if ($haslo==$haslo2)
  14. {
  15. $id=$_POST['los'];
  16. $odp=$_POST['token'];
  17. $slowa=file('hasla.txt');
  18. if(trim($slowa[$id])==$odp)
  19. {
  20. mysql_connect('localhost','root','');
  21. mysql_select_db('rpa_2010');
  22.  
  23. if ($_POST['zapisz']==1)
  24. { $save = "INSERT INTO `uzytkownicy` (
  25. `login` ,
  26. `haslo` ,
  27. `imie` ,
  28. `nazwisko` ,
  29. `miasto` ,
  30. `adres_email` ,
  31. `plec`
  32. )
  33. VALUES (
  34. '".$_POST['login']."', '".$_POST['haslo']."', '".$_POST['imie']."', '".$_POST['nazwisko']."', '".$_POST['miasto']."', '".$_POST['adres_email']."', '".$_POST['plec']."'
  35. );";
  36. mysql_query($save);
  37. header("Location: ../../index.php");
  38. }
  39. }
  40. else
  41. {
  42. echo header("Location: ../../rejestracja.php?wyswietlanie=1");
  43. //dalsze instrukcje, jeśli token jest niepoprawny
  44. }
  45. }
  46. else
  47. {
  48. echo header("Location: ../../rejestracja.php?wyswietlanie=2");
  49. }
  50. }
  51. else
  52. {
  53. echo header("Location: ../../rejestracja.php?wyswietlanie=3");
  54. //wyświetlanie w razie istniejącego juz takiego loginu w bazie
  55. }
  56. ?>
marcinpruciak
  1. SELECT count(*) FROM uzytkownicy WHERE login='$login'


Po za tym zrób sobie print_r($wynik) i dojdziesz to tego sam.

Mchl
Tak naprawdę chodzi Ci o to, żeby sprawdzić, czy w pazie jest 0, czy conajmniej jeden wiersz spełniający ten warunek. Tak więc puszczsz zapytanie
Kod
SELECT login FROM uzytkownicy WHERE login='$login' LIMIT 1

a potem sprawdzasz mysql_num_rows()
prachwal
  1. SELECT count(login) AS ile FROM uzytkownicy WHERE login='$login' LIMIT 1


wynik albo 0 albo 1
Mchl
A po co ten limit wtedy winksmiley.jpg ?
erix
O ile dobrze pamiętam, to wymusza to taką optymalizację zapytania, aby nie szukało więcej niż jeden rekord.

Nie mam 100% pewności, ale na mój rozum - jeśli nie ma limit, to przeszukuje całą tabelę w poszukiwaniu wszystkich rekordów spełniających warunek, jeśli jest limit - po pierwszym napotkanym przerywa.

Niech ktoś mnie poprawi, jeśli się mylę. winksmiley.jpg
Mchl
Poprawiam. Byłoby jak mówisz, gdyby w zapytaniu nie było funkcji agregującej.
phpion
Cytat(erix @ 22.12.2009, 14:16:39 ) *
Nie mam 100% pewności, ale na mój rozum - jeśli nie ma limit, to przeszukuje całą tabelę w poszukiwaniu wszystkich rekordów spełniających warunek, jeśli jest limit - po pierwszym napotkanym przerywa.

Chyba się jednak mylisz. Idąc Twoim tokiem rozumowania zapytanie:
  1. SELECT COUNT(*) FROM tabela LIMIT 1

zwróciłoby albo 0 albo 1. To nie jest prawda. Sprawdź zresztą sam - zapytanie bez LIMIT zwróci dokładnie to samo co z ograniczeniem. To o czym mówisz:
Cytat(erix @ 22.12.2009, 14:16:39 ) *
po pierwszym napotkanym przerywa.

to cecha klauzuli EXISTS w warunku. Jeżeli podzapytanie napotka pierwszy rekord pasujący do zadanych w nim warunków to przerywa dalsze sprawdzanie.
romek510
dzieki za pomoc.
Użylem takiego zapytania a pożniej warunków.

  1. $zapytanie =mysql_query("select count(*) as suma from uzytkownicy WHERE login='$login'");
  2. $wynik =mysql_fetch_assoc($zapytanie);
  3. $ile=$wynik['suma'];


Mam jeszcze jedno pytanko, w jaki sposób w razie wystepujacego w bazie juz takiego loginu lub niezgodnosci wpisanych haseł powrocic do strony rejestracji w taki sposób aby pola formularza były uzupełnione tym co wpisalismy wczesniej??

formularz rejestracyjny'

  1. <form name="rejestracja" method="post" action="skrypty_php/Rejestracja/dane.php">
  2. <input type="hidden" name="zapisz" value =1/>
  3. <table style="color:black" width="548" cellpadding="0" cellspacing="0" class="news">
  4. <tr>
  5. <td align="center" class="tyt_news"><img class="img_news" src="images/img_27.gif" width="5" height="7">Login&nbsp;<img class="img_news" src="images/img_27.gif" width="5" height="7" /></td>
  6. </tr>
  7. <tr>
  8. <td align="center"><input style="color:black" type="text" name="login" id="login_rej" maxlength="15" /></td>
  9. </tr>
  10. <tr>
  11. <td align="center" class="tyt_news"><img class="img_news" src="images/img_27.gif" width="5" height="7">Haslo&nbsp;<img class="img_news" src="images/img_27.gif" width="5" height="7" /></td>
  12. </tr>
  13. <tr>
  14. <td align="center"><input style="color:black" type="password" name="haslo" id="haslo_rej" maxlength="15"/></td>
  15. </tr>
  16. <tr>
  17. <td align="center" class="tyt_news"><img class="img_news" src="images/img_27.gif" width="5" height="7">Powtórz Hasło&nbsp;<img class="img_news" src="images/img_27.gif" width="5" height="7" /></td>
  18. </tr>
  19. <tr>
  20. <td align="center"><input style="color:black" type="password" name="haslo2" id="haslo_rej2" maxlength="15"/></td>
  21. </tr>
  22. <tr>
  23. <td align="center" class="tyt_news"><img class="img_news" src="images/img_27.gif" width="5" height="7" />Imię&nbsp;<img class="img_news" src="images/img_27.gif" width="5" height="7" /></td>
  24. </tr>
  25. <tr>
  26. <td align="center"><input style="color:black" type="text" name="imie" id="imie" maxlength="15"/></td>
  27. </tr>
  28. <tr>
  29. <td align="center" class="tyt_news"><img class="img_news" src="images/img_27.gif" width="5" height="7" />Nazwisko&nbsp;<img class="img_news" src="images/img_27.gif" width="5" height="7" /></td>
  30. </tr>
  31. <tr>
  32. <td align="center"><input style="color:black" type="text" name="nazwisko" id="nazwisko" maxlength="15"/></td>
  33. </tr>
  34. <tr>
  35. <td align="center" class="tyt_news"><img class="img_news" src="images/img_27.gif" width="5" height="7" />Miasto&nbsp;<img class="img_news" src="images/img_27.gif" width="5" height="7" /></td>
  36. </tr>
  37. <tr>
  38. <td align="center"><input style="color:black" type="text" name="miasto" id="miasto" maxlength="15" /></td>
  39. </tr>
  40. <tr>
  41. <td align="center" class="tyt_news"><img class="img_news" src="images/img_27.gif" width="5" height="7"/>E-mail&nbsp;<img class="img_news" src="images/img_27.gif" width="5" height="7" /></td>
  42. </tr>
  43. <tr>
  44. <td align="center"><input style="color:black" type="text" name="adres_email" id="adres_email" maxlength="25"/></td>
  45. </tr>
  46. <tr>
  47. <td align="center" class="tyt_news"><img class="img_news" src="images/img_27.gif" width="5" height="7"/>Plec&nbsp;<img class="img_news" src="images/img_27.gif" width="5" height="7" /></td>
  48. </tr>
  49. <tr>
  50. <td align="center">
  51. <input style="color:black" type="RADIO" value="K" name="plec"/>Kobieta
  52. <input style="color:black" type="RADIO" value="M" name="plec"/>Mezczyzna
  53. </td>
  54. </tr>
  55. <tr>
  56. <td align="center">
  57. <table>
  58. <tr>
  59. <td>
  60. <?php
  61. $slowa=file('hasla.txt');
  62. $id=rand(0,count($slowa)-1);
  63. echo '<img src="pic.php?id='.$id.'"></td><td><input style="color:black" type="text" name="token" size="20">';
  64. ?>
  65. <input type="hidden" name="los" value="<? echo $id; ?>">
  66. </td>
  67. </tr>
  68. <tr>
  69. <td colspan="2" align="center" style="color:red">
  70. <?php
  71. $wyswietlanie=$_GET['wyswietlanie'];
  72.  
  73. if ($wyswietlanie==0)
  74. {
  75. echo "Podaj kod z obrazka";
  76. }
  77.  
  78. if ($wyswietlanie==1)
  79. {
  80. echo "Podałes zły kod z obrazka";
  81. }
  82.  
  83. if ($wyswietlanie==2)
  84. {
  85. echo "Podane hasła są różne";
  86. }
  87.  
  88. if ($wyswietlanie==3)
  89. {
  90. echo "Podany login jest zajety";
  91. }
  92.  
  93.  
  94. ?>



dane.php
  1. <?php
  2.  
  3. mysql_connect('localhost','root','');
  4. mysql_select_db('rpa_2010');
  5. $login=$_POST['login'];
  6.  
  7. mysql_connect('localhost','root','');
  8. mysql_select_db('rpa_2010');
  9. $login=$_POST['login'];
  10.  
  11. $zapytanie =mysql_query("select count(*) as suma from uzytkownicy WHERE login='$login'");
  12. $wynik =mysql_fetch_assoc($zapytanie);
  13. $ile=$wynik['suma'];
  14.  
  15. if($ile==0)
  16. {
  17. $haslo=$_POST['haslo'];
  18. $haslo2=$_POST['haslo2'];
  19. if ($haslo==$haslo2)
  20. {
  21. $id=$_POST['los'];
  22. $odp=$_POST['token'];
  23. $slowa=file('hasla.txt');
  24. if(trim($slowa[$id])==$odp)
  25. {
  26. mysql_connect('localhost','root','');
  27. mysql_select_db('rpa_2010');
  28.  
  29. if ($_POST['zapisz']==1)
  30. { $save = "INSERT INTO `uzytkownicy` (
  31. `login` ,
  32. `haslo` ,
  33. `imie` ,
  34. `nazwisko` ,
  35. `miasto` ,
  36. `adres_email` ,
  37. `plec`
  38. )
  39. VALUES (
  40. '".$_POST['login']."', '".$_POST['haslo']."', '".$_POST['imie']."', '".$_POST['nazwisko']."', '".$_POST['miasto']."', '".$_POST['adres_email']."', '".$_POST['plec']."'
  41. );";
  42. mysql_query($save);
  43. header("Location: ../../index.php");
  44. }
  45. }
  46. else
  47. {
  48. echo header("Location: ../../rejestracja.php?wyswietlanie=1");
  49. //dalsze instrukcje, jeśli token jest niepoprawny
  50. }
  51. }
  52. else
  53. {
  54. echo header("Location: ../../rejestracja.php?wyswietlanie=2");
  55. }
  56. }
  57. else
  58. {
  59. echo header("Location: ../../rejestracja.php?wyswietlanie=3");
  60. //wyświetlanie w razie istniejącego juz takiego loginu w bazie
  61. }
  62. ?>
marcinpruciak
Zamien

  1. <input style="color:black" type="text" name="login" id="login_rej" maxlength="15" />


na

  1. <input style="color:black" type="text" name="login" id="login_rej" maxlength="15" <? echo (isset($_POST['login'])) ? 'value="'.$_POST['login'].'" : ''?>/>


darko
Jak wyżej, np. prześlij dane formularzem do tego samego skryptu, waliduj, jeśli nie przejdzie walidacji, to ponownie wyświetl formularz(z polami wypełnionymi wartościami z $_POST), jeśli przejdzie, to wpis do BD (i przekierowanie na info, że wszystko jest ok).
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.