Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Rejestracja na kod
Forum PHP.pl > Forum > PHP
Damiian
Witam ponownie:)

Nie wiem jak to opisać, może przejdę odrazu do rzeczy jak to ma wyglądać smile.gif
1. Ja dodaje unikalny kod do bazy danych:
  1. mysql_query("INSERT INTO `test` (`id`, `imie`, `haslo` `kod`) VALUES (null, '','', '$kod')") or die(mysql_error());


2. Użytkownik wpisuje nick, hasło, oraz kod w formularzu ( mam )
3. Przekierowuje go na skrypt sprawdzający:
  1. <form action="check.php" method="post">

4. Skrypt sprawdzał by czy kod podany przez usera znajduje sie w bazie,
jeśli tak to zeby potem sprawdzał czy koło kodu są dwa pola wolne w bazie (nick i hasło)
Jesli sa wolne to zeby skrypt dopisal do nich Nick i hasło
a jesli sa zajete to ma mu sie pokazać błąd ze dany kod juz jest uzywany przez inna osobe.

Chodzi mi o takie unikalne kody, które można użyć raz, i na jednego użytkownika.

Wiecie jak takie cos wykonać?
Damiian
Dodawac moge sam, bo to bedzie tylko pare kodów.

Głównie chodzi mi o:

Kod
4. Skrypt sprawdzał by czy kod podany przez usera znajduje sie w bazie,
jeśli tak to zeby potem sprawdzał czy koło kodu są dwa pola wolne w bazie (nick i hasło)
Jesli sa wolne to zeby skrypt dopisal do nich Nick i hasło
a jesli sa zajete to ma mu sie pokazać błąd ze dany kod juz jest uzywany przez inna osobe.


nospor
No ale konkretnie w czym problem? Z bazy rekordy nie potrafisz pobrac? Poprostu nie rozumiem gdzie masz problem.

pobierasz rekord z bazy. Jako warunek wyszukiwania dajesz kod.
jesli rekord nie zostanie zwrocony, znaczy ze kodu takiego w bazie nie ma (pomijam sytuacje gdy bedzie jakis blad bazy)
jesli rekord zostanie zwrocony, to patrzysz czy ten rekord ma te imie czy nie i na tej podstawie walisz odpowiedni komunikat.
Damiian
Chodzi o takie cos:


  1. $result = mysql_query("SELECT kod FROM test WHERE kod = '$Kood'");
  2. $num = @mysql_num_rows($result);
  3. if ($num> 0) {
  4. //( znalazł że kod jest to tabeli)
  5. //- Zobaczył czy obok kodu są dwa pola wolne na nick i hasło
  6. //jeśli są to żeby dopisał tam te dane co podał uzytkownik, a jeśli są już zajete to żeby wyswietlil błąd ze kod jest //zajety przez inna osobę:
  7. //Tak jest na dodawanie, lecz nie wiem jak dopisac do juz istniejącej.
  8. //Chciałem zrobić update ale wtedy potrzebuje id, a to ma sie robic automatycznie do kazdego z kodów.
  9. mysql_query("INSERT INTO `test` (`id`, `imie`, `haslo` `kod`) VALUES (null, '$Nick','$hasło', '')") or die(mysql_error());
  10. //a mi chodzi o dopisanie do danego kodu nicku i hasła, a jesli juz istnieje to wyswietlenie komunikatu o błedzie
  11. }
  12. else
  13. {
  14.  
  15. }
  16. {


Trudno to opisać ;p
nospor
ale czemu selectem pobierasz tylko KOD? Czemu nie pobierzesz wszystkich danych włącznie z ID, i nazwiskiem?
Wowczas od razu w php mozesz sprawdzic czy jest to imie przy kodzie czy nie. Wowczas mozesz zrobic update bo masz to nieszczęsne ID.

Teraz kombinujesz jak kon pod górkę. smile.gif
Damiian
Ponieważ dopiero zaczynam z Php i myślę 'prosto' a nie tak jak przetwarzałby to kod ^^

A Ty jak byś to wykonał zeby było najlatwiej i najprosciej? smile.gif
nospor
Cytat
A Ty jak byś to wykonał zeby było najlatwiej i najprosciej?
No przecież ci napisalem
Cytat
pobierasz rekord z bazy. Jako warunek wyszukiwania dajesz kod.
jesli rekord nie zostanie zwrocony, znaczy ze kodu takiego w bazie nie ma (pomijam sytuacje gdy bedzie jakis blad bazy)
jesli rekord zostanie zwrocony, to patrzysz czy ten rekord ma te imie czy nie i na tej podstawie walisz odpowiedni komunikat.
Damiian
Umiem zrobić tylko coś takiego:
  1. $query = mysql_query("SELECT
  2. *
  3. FROM
  4. `test`
  5. ");
  6. while($row = mysql_fetch_array($query))
  7. {
  8. echo $row['email'];
  9. }
phpion
Zainteresuj się klauzulą WHERE - szczegóły i przykłady w dokumentacji.
Damiian
A jak mam dodać np do istniejącego już emailu, imię?

Zrobilem testowy skrypt:

  1. <?php
  2.  
  3. $imie = $_POST['imie'];
  4.  
  5. $email = $_POST['email'];
  6.  
  7.  
  8. $connection = mysql_connect('mysql.cba.pl', 'xxx', 'xxx')
  9. or die('Brak połączenia z serwerem MySQL');
  10. $db = mysql_select_db('xxxxx', $connection)
  11. or die('Nie mogę połączyć się z bazą danych');
  12.  
  13.  
  14. $nick = mysql_real_escape_string($imie);
  15. $mail = mysql_real_escape_string($email);
  16. $resultn = mysql_query("SELECT imie FROM test WHERE imie IS NULL");
  17. $resultm = mysql_query("SELECT email FROM test WHERE email = '$mail'");
  18.  
  19. $numn = @mysql_num_rows($resultn);
  20. $numm = @mysql_num_rows($resultm);
  21.  
  22. if ($numn== 0 & $numm> 0) {
  23. $zapytanie = "UPDATE `test` SET `imie` = '$nick' WHERE `email`='$mail'";
  24. $idzapytania = mysql_query($zapytanie);
  25. echo 'dodano';
  26.  
  27. }
  28. else
  29. {
  30. echo ' nie udalo sie';
  31. }
  32.  
  33.  
  34. mysql_close($connection);
  35.  
  36. ?>



Teraz jest ok, dodaje sie gdy jest puste pole w nick, lecz jak jest pełne to dalej przekierowuje na dodano.
Tylko teraz nie wiem jak zrobić ze gdy w bazie pod adresem nick znajduje sie jakies imie to żeby wyswielilo komunikat

Pomoże ktoś?
tehaha
lepiej odpal sobie jakiś podstawowy kurs, bo wszystko tu kompletnie mieszasz
1. nie wiem po co te 2 zapytania skoro wygląda na to że dotyczą tego samego rekordu
  1. $resultn = mysql_query("SELECT imie FROM test WHERE imie IS NULL");
  2. $resultm = mysql_query("SELECT email FROM test WHERE email = '$mail'");


możesz przecież zrobić z tego jedno:
2.
  1. $result = mysql_query("SELECT imie, email FROM test WHERE imie IS NULL AND email = '$email'") or die(mysql_error());
  2. if(mysql_num_rows($result) > 0)
  3. {
  4. echo "taki rekord już istnieje";
  5. }


wysyłasz zapytanie -> jeżeli lista zwróconych rekordów jest większa od 0, to taki rekord istnieje
3. wszystkie rekordy powinny mieć id (INT11)

4. wywal znak @
5. po mysql_query() zawsze dawaj or die(mysql_error());
6. jeżeli dasz samo echo dodano, to przecież ono zawsze się wyświetli, więc wyświetlaj je tylko wtedy, kiedy mysql_query() zwróci: true
Damiian
Dziekuje za odpowiedz, Ps. PM.


Już w nocy próbowałem łączyć lecz to nic nie daje.
Postaram się opisać to najdokładniej jak mogę, co ma wykonywać skrypt:
Osoba wpisuje Nick i Email w formularzu (nick na razie nie ważny)
Klika submit.
Skrypt łączy sie z bazą i ma sprawdzić:
Czy email zgadza sie z tym co podal uzytkownik w polu email,
Czy pole nick jest puste...
Jesli email sie zgadza i pole nick w bazie jest puste to ma dodać dane do bazy
a jesli email lub pole nick jest zajete to zeby wyswietlal stosowny komunikat

  1. $result = mysql_query("SELECT imie, email FROM test WHERE imie IS NULL AND email = '$email'") or die(mysql_error());
  2.  
  3. if(mysql_num_rows($result)> 0)
  4.  
  5. {
  6.  
  7. echo "taki rekord już istnieje";
  8.  
  9. }
  10. else
  11. {
  12. echo "dodano";
  13. }
  14.  
  15. mysql_close($connection);
  16.  
  17. ?>


I mam w bazie:




I twoj skrypt nie waznie czy wpisze:
tester@o2.pl
czy
totest@o2.pl

Zawsze pokazuje dodano. sad.gif
tehaha
a zastanowiłeś się co robi ten skrypt, który tu przedstawiłeś?
Damiian
  1. $result = mysql_query("SELECT imie, email FROM test WHERE imie IS NULL AND email = '$email'") or die(mysql_error());


Wybierz imie, email w tabeli test gdzie imie jest puste a email to email podany w formularzu...

  1. if(mysql_num_rows($result)> 0)


Kiedy rezulatat bedzie inny to wyswietl:

taki rekord już istnieje

a jesli wszystko bedzie ok, to:

dodano
tehaha
to ja napiszę moją interpretację linijek 3-13:
- jeżeli liczba zwróconych rekordów jest większa niż 0 - wyświetl: "taki rekord już istnieje", jeżeli liczba zwróconych rekordów nie jest większa niż 0 wyświetl: "dodano"

nie widzę w tym sensu, chyba komunikat typu "dodano" będziesz chciał wyświetlić po poprawnym dodaniu rekordu, a nie w momencie kiedy zapytanie nie zwróci żadnego rekordu
Damiian
Zrobiłem to tak:

  1. $nick = mysql_real_escape_string($imie);
  2. $mail = mysql_real_escape_string($email);
  3.  
  4.  
  5. $result = mysql_query("SELECT imie, email FROM test WHERE imie IS NULL AND email = '$email'") or die(mysql_error());
  6.  
  7. if(!mysql_num_rows($result)> 0)
  8.  
  9. {
  10.  
  11. $zapytanie = "UPDATE `test` SET `imie` = '$nick' WHERE `email`='$mail'";
  12. $idzapytania = mysql_query($zapytanie);
  13. }
  14.  
  15.  
  16.  
  17. mysql_close($connection);


i gdy pole nick jest puste to sie dodaje.
teraz jak zrobic ze gdy pole nick jest zajete to wyswietlic komunikat?
Próbowalem z else i z if(mysql_num_rows($result)> 0)
gigzorr
sprawdzanie to mozna zrobic tak :
  1. $sprczegostam = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM tabela WHERE user='".$user."' LIMIT 1"));
  2. if ($sprczegostam[0] >= 1)
  3. {
  4. echo "Taki login juz istnieje.";
  5. }
Damiian
Eh, chyba musze porzucic prace nad ta rejestracja...

Nie umiem. ;/
tehaha
masz problemy ponieważ brakuje Tobie fundamentalnej wiedzy i pomimo dużych chęci, nie bardzo wiesz co robisz, zacznij od przerobienia kursu php,a potem możesz już dowolnie realizować swoje wizje, tu masz dużo kursów - Temat: linkiKursy dla pocztkujcych, no niestety ale żeby cokolwiek zrobić w php trzeba mieć opanowane podstawy i tego etapu nie przeskoczysz
Damiian
Dziekuje za Tutoriale.

A pomógłbyś chociaż dokończyć tą rejestracje aby działała?
Kombinuje na setki sposobów
Np, rozpisałem sobie to na każdy osobny element żeby może to jakoś rozpracować i robiłem po kolei:

  1. $nick = mysql_real_escape_string($imie);
  2. $mail = mysql_real_escape_string($email);
  3.  
  4. $result = mysql_query("SELECT imie FROM test WHERE imie IS NULL");
  5. $resultt = mysql_query("SELECT email FROM test WHERE email = '$mail'");
  6. /*
  7.  Wyszukuje sobie gdzie imie jest puste oraz email = email podany w formularzu
  8.  
  9. */
  10. if(mysql_num_rows($result)==0 & mysql_num_rows($resultt)==0)
  11. // Kiedy result czyli imie jest puste oraz resultt czyli email to email podany w formularzu
  12. {
  13.  
  14. $zapytanie = "UPDATE `test` SET `imie` = '$nick' WHERE `email`='$mail'";
  15. $idzapytania = mysql_query($zapytanie);
  16. // To wykonaj update
  17.  
  18. }
  19. else // lub wywolaj błąd
  20. {
  21. echo "zajete";
  22. }
  23.  
  24.  
  25.  
  26. mysql_close($connection);
  27.  
  28. ?>


Proszę, bardzo potrzebuje tego skryptu!
tehaha
to napisz co chcesz osiągnąć bo to co robisz jest bez sensu
Damiian
Teraz już będzie najdokładniej jak umiem.smile.gif

Chodzi mi o rejestracje na kod, to znaczy aby sie zarejestrować trzeba podac kod który znajduje sie w bazie.
oczywiście nie chce na tym zarabiać czy coś, chce po prostu dawać kody tym co chce aby się zarejestriowali.

A więc:
Osoba wchodzi na stronę
Podaje swój nick, hasło oraz kod
klika submit
. I tu skrypt ma sprawdzać czy kod który wpisała osoba jest w bazie oraz czy obok tego kodu są dwa miejsca wolne, to znaczy: nick, hasło.
Jeśli kod się zgadza z tym w bazie, oraz pola obok kodu czyli nick i haslo w bazie są wolne, to żeby dopisać do nich
nick i hasło podane w formularzu.
Lecz (wiem nie zaczynami zdania od lecz ^^) jeżeli kod nie zgadza sie z tym w bazie, lub jeżeli do danego kodu już jest przyspisany uzytkownik to zeby wyswietlic odpowiednie komunikaty.
tehaha
dobra dam Ci ten kod, ale potem naprawdę weź się za te kursy bo to są naprawdę podstawowe rzeczy i to jest ostatni raz kiedy daję Ci gotowca

Po pierwsze robisz 2 tabele:

codes
code_id [INT(11) auto_increment primary_key] | code [VARCHAR(255)] | code_active [TINYINT(1) default 1]

pole code_active posłurzy do sprawdzenia czy kod został już użyty, bo zakładam, że kody są jednorazowe

users
id [INT(11) auto_increment primary_key] | name [VARCHAR(255)]| email[VARCHAR(255)]

zakładam, że formularz rejestacji już masz z polami: name, email, code, które zaraz odbierzemy postem
i oczywiście walidację też już musisz we własnym zakresie

to else die jest tylko żeby sprawdzić czy zapytania są dobre bo z palca na szybko to pisałem, jeśli wszystko działa to to usuń

  1. <?php
  2.  
  3. $code = mysql_real_escape_string(trim($_POST['code']));
  4. $name = mysql_real_escape_string(trim($_POST['name']));
  5. $email = mysql_real_escape_string(trim($_POST['email']));
  6.  
  7. //sprawdzamy czy taki kod jest w bazie i czy jest aktywny
  8. $sql = "SELECT code_id FROM codes WHERE code = $code AND code_active = 1";
  9. if($result = mysql_query($sql))
  10. {
  11. if(mysql_num_rows($result) > 0)
  12. {
  13. //kod istnieje w bazie i jest aktywny -> dodajemy użytkownika
  14.  
  15. //sprawdzamy czy taki użytkownik już istnieje, zakładam, że nazwa użytkownika nie może być użyta więcej niż raz
  16. $sql_check = "SELECT id FROM users WHERE name = '$name'";
  17. if($result_check = mysql_query($sql_check))
  18. {
  19. if(mysql_num_rows($result_check) > 0)
  20. {
  21. echo "taka nazwa użytkownika jest już zajęta.";
  22. } else
  23. {
  24. //ustawiamy kod na nieaktwyny
  25. $sql_code = "UPDATE INTO codes SET code_active = '0' WHERE code = '$code'";
  26. if(!$result_code = mysql_query($sql_code))
  27. {
  28. }
  29. //nazwa nie jest zajęta -> dodajemy usera
  30. $sql_add = "INSERT INTO users(id, name, email) VALUES(NULL, '$name', '$email')";
  31. if($result_add = mysql_query($sql_add))
  32. {
  33. echo "użytkownik dodany.";
  34. } else
  35. {
  36. }
  37. }
  38. } else
  39. {
  40. }
  41.  
  42. } else
  43. {
  44. //kod nie istnieje lub jest nieaktywny
  45. echo "Przykro mi, kod jest nie poprawny.";
  46. }
  47. } else
  48. {
  49. }
  50.  
  51. ?>
Damiian
Super, dziękuje Ci bardzo smile.gif
masz u mnie piwo! tongue.gif

Był tylko jeden błędzik:
  1. $sql_code = "UPDATE INTO codes SET code_active = '0' WHERE code = '$code'";


na
  1. $sql_code = "UPDATE codes SET code_active = '0' WHERE code = '$code'";


Serdecznie Ci dziękuje za pomoc!
Nie wiem jak się odwdzięczyć!

Teraz biore sie do dokładnej analizy kodu.

Pozdrawiam i dziękuje!
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.