Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sprawdzanie rekordu
Forum PHP.pl > Forum > Bazy danych > MySQL
Athlan
Mam taki problem, chcę sprawdzić, czy element (dokładnie nazwa użytkownika) istnieje już w jakimś rekordzie.

Rejestracja która dodaje użytkowników, nie patrząc czy dany już istnieje:

  1. <?php
  2.  
  3. $user = $_POST['user'];
  4. $pass = $_POST['pass'];
  5. $mail = $_POST['mail'];
  6. $gg = $_POST['gg'];
  7. $avatar = $_POST['avatar'];
  8. $sygnature = $_POST['sygnature'];
  9. $add_date = date("d.m.Y, G:i:s");
  10. $add_ip = $_SERVER['REMOTE_ADDR'];
  11.  
  12. if(!empty($user) && !empty($pass)){
  13.  
  14. $query = "INSERT INTO users VALUES('','$user','$pass','$mail','$gg','$avatar','$sygnature','$add_date','$add_date','$add_ip','$add_ip','0')";
  15. $result = mysql_query($query);
  16. if($result) { echo "Rejestracja przebiegła pomyślnie, możesz się zalogować!"; }
  17. else { echo "Błąd bazy danych! Rejestracja nie powiadła się!"; }
  18.  
  19. }
  20.  
  21. ?>


A próbowałem sprawdzić rekord robiąc tak:

  1. <?php
  2.  
  3. $user = $_POST['user'];
  4. $pass = $_POST['pass'];
  5. $mail = $_POST['mail'];
  6. $gg = $_POST['gg'];
  7. $avatar = $_POST['avatar'];
  8. $sygnature = $_POST['sygnature'];
  9. $add_date = date("d.m.Y, G:i:s");
  10. $add_ip = $_SERVER['REMOTE_ADDR'];
  11.  
  12. if(!empty($user) && !empty($pass)){
  13.  
  14. $query = "SELECT * FROM users WHERE user='$user'";
  15. $do = mysql_query($query);
  16.  
  17. while($seq = mysql_fetch_array($do)) {
  18.  
  19. if($user == $seq['user']){
  20. echo'Użytkownik o takiej nazwie już istnieje!';
  21. }
  22. else{
  23. $query2 = "INSERT INTO users VALUES('','$user','$pass','$mail','$gg','$avatar','$sygnature','$add_date','$add_date','$add_ip','$add_ip','0')";
  24. $result2 = mysql_query($query2);
  25. if($result2) { echo "Rejestracja przebiegła pomyślnie, możesz się zalogować!"; }
  26. else { echo "Błąd bazy danych! Rejestracja nie powiadła się!"; }
  27. }
  28. }
  29. }
  30.  
  31. ?>


No ale nie działa... owszem wykrywa użytkownika w tabeli gdy już taki jest (np wpisuje usera ROOT1 i istnieje), ale jak rejestruje jeszcze nieistniejącego (np podaje ROOT2) to mi go nie dodaje... nie wyświetla się żaden komunikat (pusto tongue.gif )

Jak sprawdzić, czy użytkownik istnieje w tabeli, aby zarejestrować nowego?

P.S. Acha i jeszcze... jak sprawdzić ile jest urzytkowników w tabeli (funkcja count($do); jakos mi nie sadziałała) questionmark.gif

Za reply THX smile.gif
nospor
  1. <?php
  2. while($seq = mysql_fetch_array($do)) {
  3.  
  4. if($user == $seq['user']){
  5. }
  6. else{
  7. $query2 = "INSERT INTO users VALUES('','$user','$pass','$mail','$gg','$avatar','$sygnature','$add_date','$add_date','$add_ip','$add_ip','0')";
  8. }
  9. }
  10. ?>
laugh.gif , przepraszam

zastanow sie co robisz. chcesz dodac ludka gdy go nie ma. ale dodajesz go w petli, do ktorej wchodzi tylko wtedy, gdy ludek jest. to ci sie nigdy nie spelni smile.gif

poczytaj se o mysql_num_rows
LBO
jezeli chodzi o sprawdzenie czy uzytkownik istnieje to najefektowniej uzyc:
  1. <?php
  2. $query = "SELECT COUNT(*) FROM users WHERE user = $user";
  3. ?>

to zapytanie zwraca tylko liczbe znalezionych wierszy. jezeli zwroci 0 to uzytkownik o danym loginie $user nie istnieje, jezeli 1 to istnieje...
SongoQ
@LBO
Cytat
jezeli chodzi o sprawdzenie czy uzytkownik istnieje to najefektowniej uzyc:


Nie prawda. Jesli masz warunek na usera i dodatkowno stusujesz jeszcze COUNT to wykorzystujesz dodatkowo baze, lepiej jest sprawdzic ile rekordow zwrocil niz stosowac COUNT. Czas jest tu niewielki ale zawsze cos.
Athlan
Wystarczy mi to, co napisał LBO, thx serdeczne... nie wpadłem na takie coś tongue.gif
Athlan
Kontynuuję temat http://forum.php.pl/index.php?showtopic=40503, na podstawie odpowiedzi @LBO (chciałem żeby poszedł jako nowy topic bo tamtych starych nie przeglądają tongue.gif).

No więc robię tak jak mi kazałeś
  1. <?php
  2.  
  3. if(!empty($user) && !empty($pass)){
  4.  
  5. $query = "SELECT COUNT(*) FROM users WHERE user='$user'";
  6. $result = mysql_query($query);
  7.  
  8. if($result != 0){
  9. echo'Uzytkownik o takim nicku już istnieje w naszej bazie!';
  10. }
  11. else{
  12. $sql++;
  13. $query2 = "INSERT INTO users VALUES('','$user','$pass','$mail','$gg','$avatar','$sygnature','$add_date','$add_date','$add_ip','$add_ip','0')";
  14. $result2 = mysql_query($query2);
  15. if($result2) { echo "Rejestracja przebiegła pomyślnie, możesz się zalogować!"; }
  16. else { echo "Błąd bazy danych! Rejestracja nie powiadła się!"; }
  17. }
  18. }
  19.  
  20. ?>


No i według powyższego skryptu, jeżeli wynik szukania podanego użytkownika w bazie już zarejestrowanych nie będzie się równać 0 nie doda go... jeżeli będzie inne niż 0 doda.

Przynajmniej ma to tak działać ale nie działa smile.gif


I drugi mój sposób:

  1. <?php
  2.  
  3. $query = "SELECT COUNT(*) FROM users WHERE user='$user'";
  4. $result = mysql_query($query);
  5. $do = mysql_num_rows($result);
  6.  
  7. echo"Zmienna $do zwraca: $do";
  8.  
  9. ?>


I dlaczego za każdym razem $do zwraca mi 1, rozumiem jak uzes istnieje... ale jak go nie ma to też pisze 1 :/
Co robię źle??
nospor
temat lacze. ale nie rob tak wiecej bo warna zalapiesz.

twoje zapytanie zawsze zrowci ci jeden rekord. w przypadku gdy nie ma usera to zawartosc tego tekotdu bedzie "0", ale zwroconyhc rekordów bedzie 1 smile.gif
musisz pobrac wartosc tego rekordu poprzez chociazby mysql_fetch_array
SongoQ
Cytat
$result = mysql_query($query);
if($result != 0){

Cos takiego nie istenieje bo to sprawdza czy wystapil blad czy nie. Posluchaj @nospor'a
LBO
przyklad:
  1. <?php
  2.  
  3. $query = "SELECT COUNT(*) FROM users WHERE user='$user'";
  4. $result = mysql_query($query);
  5. $isUser = mysql_fetch_row($result);
  6. if ($isUser[0] == 1) {
  7. print($user.' istnieje w bazie<br />');
  8. } else {
  9. //code
  10. }
  11.  
  12. ?>
Athlan
@LBO

Mam pytanie do linii 6 Twojego kodu. Dlaczego właśnie
Kod
$isUser[0]

a nie
Kod
$isUser

questionmark.gif
LBO
poniewaz mysql_fetch_row() zwraca rekord jako tablice indeksowana...

PS. jakas niechec do manuala?
mysql_fetch_row" title="Zobacz w manualu php" target="_manual
Cytat
pobiera jeden wiersz danych z wyniku skojarzonego z podanym identyfikatorem wyniku. Wiesz zwracany jest jako tablica. Komórki są umieszczone pod oddzielnymi ofsetami, zaczynając od 0.
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.