Marcinekk
23.02.2014, 01:23:40
Siema,
mam skrypt rejestracji i chciałbym, aby był on na kody.
Na kody tzn. że w bazie danych dodaje kody, które są jednorazowe.
Powiedzmy, że użytkownikowi daje kod (przykładowo 123) i on wchodzi na adres jakistam.pl/dodajkonto.php na wstępie poprosi go o ten kod, jeżeli będzie błędny, to go nie wpuści, jeżeli będzie poprawny, to go wpuści a kod zostanie usunięty. Proszę też, aby był jeden kod (prywatny), który nigdy się nie usunie po użyciu.
Kod rejestracji :
<?php
include 'config.php';
db_connect();
if(!$_SESSION['logged']) {
if(isset($_POST['name'])) {
$_POST['name'] = clear($_POST['name']);
$_POST['password'] = clear($_POST['password']);
$_POST['password2'] = clear($_POST['password2']);
$_POST['email'] = clear($_POST['email']);
if(empty($_POST['name']) || empty($_POST['password']) || empty($_POST['password2']) || empty($_POST['email'])) { echo '<p>Musisz wypełnić wszystkie pola.</p>';
} elseif($_POST['password'] != $_POST['password2']) {
echo '<p>Podane hasła różnią się od siebie.</p>';
} elseif(filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) === false) {
echo '<p>Podany email jest nieprawidłowy.</p>'; } else {
$result = mysql_query("SELECT Count(user_id) FROM `users` WHERE `user_name` = '{$_POST['name']}' OR `user_email` = '{$_POST['email']}'"); if($row[0] > 0) {
echo '<p>Już istnieje użytkownik z takim loginem lub adresem e-mail.</p>'; } else {
$_POST['password'] = codepass($_POST['password']);
mysql_query("INSERT INTO `users` (`user_name`, `user_password`, `user_email`, `user_regdate`) VALUES ('{$_POST['name']}', '{$_POST['password']}', '{$_POST['email']}', '".time()."')"); echo '<p>Zostałeś poprawnie zarejestrowany! Możesz się teraz <a href="login.php">zalogować</a>.</p>'; }
}
}
echo '<form method="post" action="dodajkonto.php"> <p>
Login:<br>
<input type="text" value="'.$_POST['name'].'" name="name">
</p>
<p>
Hasło:<br>
<input type="password" value="'.$_POST['password'].'" name="password">
</p>
<p>
Powtórz hasło:<br>
<input type="password" value="'.$_POST['password2'].'" name="password2">
</p>
<p>
E-mail:<br>
<input type="text" value="'.$_POST['email'].'" name="email">
</p>
<p>
<input type="submit" value="Zarejestruj">
</p>
</form>';
} else {
echo '<p>Jesteś już zalogowany, więc nie możesz stworzyć nowego konta.</p> <p>[<a href="index.php">Powrót</a>]</p>';
}
db_close();
?>
markonix
23.02.2014, 01:28:42
Ty potrzebujesz pomocy w próbach wykonania czy po prostu zlecasz?
Marcinekk
23.02.2014, 01:29:17
Gdybym zlecał, to napisałbym w odpowiednim dziale, albo w temacie chyba proste tak?
markonix
23.02.2014, 01:31:52
No ale nie widzę nigdzie w tym żadnych zalążków.
Najpierw przemyśl porządnie koncepcje - kto kody np. ustala bo to dość istotne..
Marcinekk
23.02.2014, 01:32:42
Nie rozumiem Cię. Napisałem normalnie, że kody są wpisywane do bazy danych przeze mnie.
markonix
23.02.2014, 01:37:33
Nie napisałeś dosłownie, zrozumiałem że skrypt.
Póki nie masz użytkownika to nie możesz mu przypisać kodu tak więc kody to oddzielna lista.
Przy dodawaniu dodaj dodatkowe pole na owy kod - sprawdzaj go na końcu gdy cały formularz jest w porządku żeby ktoś nie mógł zgadywać kodów.
Jeżeli kod jest w bazie oznacz go jako użyty np. kolumna used (tinyint 0/1) i przypisz do kodu użytkownika relacją (kolumna used_by int/varchar, zależy jak masz w systemie).
jarek0203
23.02.2014, 01:37:50
Musisz podczas rejestracji dodać do bazy np. losowe dwa kody.
echo '<p>Zostałeś poprawnie zarejestrowany! Możesz się teraz <a href="login.php">zalogować</a>.</p>';
Gdy to się wykonuje dodajesz info o kodzie jaki się dodał do bazy.
A podczas logowania podany kod zmieniasz np na NULL w tabeli gdzie user_name=$_POST['name']
Marcinekk
23.02.2014, 01:42:43
Chodziło mi o to, że ja dodaje kod do bazy danych, i jak ktoś nie ma tego kodu, to nie otrzymuje dostępu do formularza rejestracji, jeżeli ma ktoś ten kod, to przed rejestracją ma pojawić się mu formularz, żeby wpisał kod. Jak wpisze i się zarejestruje to kod ma się usunąć. A kod użytkownikowi podaje sam, nie pod jakieś podpisywanie jak to 2x up mówił.
jarek0203
23.02.2014, 01:49:06
Problem tkwi w tym że skąd php będzie wiedział ze jakiś noname który chce się zarejestrować ma ten kod czy nie...
Marcinekk
23.02.2014, 01:50:10
BOŻE!
Skrypt ma tylko sprawdzać, czy kod jest poprawny, jeżeli tak to go usuwa z bazy i pozwala na rejestracje temu userowi!!
jarek0203
23.02.2014, 02:03:51
Napisz formularz do pobierania kodu z post=nazwa pliku do rejestracji
if($_POST[kod]=$kod_z_bazy
{
kod rejestracji
}
else{ header('Location:plik_z_formularzem.php'); }
Marcinekk
23.02.2014, 02:06:37
I to sobie samo magicznie wybierze bazę danych tak?
jarek0203
23.02.2014, 02:16:03
Przecież masz już kod który jakoś magicznie dodaje i pobiera informacje z bazy danych.
Nie wiem jak wygląda twoja baza. Jak wygląda tabela z kodami?
Marcinekk
23.02.2014, 02:18:19
Kody mają być w tabeli "kody" i kolumna "kod"
markonix
23.02.2014, 02:30:02
Pisałeś na początku o tym, że kod jest usuwany po użyciu, a za chwilę "który nigdy się nie usunie po użyciu" więc nie miej pretensji.
Czyli kod to tak jakby hasło dostępu do zakładki rejestracji.
No ok, czyli algorytm jest taki:
1) Wpisz hasło dostępu.
2) Jeżeli ok to wyświetla formularz i reszta obywa się jak dotychczas
3) Przy rejestracji kod usuwasz, czy przypisujesz do nowo utworzonego użytkownika
Niby proste ale trzeba wziąć pod uwagę walidacje danych - po wysłaniu formularza kod zniknie dlatego trzeba go gdzieś zapisać.
Zapisałbym go w sesji - wpisanie poprawnego kodu będzie podobne do zalogowania.
Tak długo jak w sesji będzie kod tak długo formularz będzie działać - jeżeli brak kodu w sesji - wyświetl formularz do wpisania kodu dostępu.
W ostatnim kroku za pomocą $_SESSION['access_code'] będziesz wiedział, którego kodu użył żeby go odpowiednio wyłączyć/usunąc.
Marcinekk
23.02.2014, 02:32:09
Widać, że kolega up nie wie co to czytanie ze zrozumieniem. Napisałem, żeby była możliwość dodania jednego kodu, który nigdy się nie usunie po użyciu, a inne (które bd dawał użytkownikom) będą się usuwały po użyciu.
jarek0203
23.02.2014, 02:33:42
$result = mysql_query("SELECT * FROM `kody` where kod='$_POST[kod]'");
$kod_z_bazy=$row[kod]; }
if($_POST[kod]=$kod_z_bazy)
{
mysql_query("delete '$_POST[kod]' from kody where kod='$_POST[kod]'") kod rejestracji
}
else{ header('Location:plik_z_formularzem.php'); }
Marcinekk
23.02.2014, 02:36:58
Formularz, który ma sprawdzać kod ma być w tym samym pliku, co rejestracja?
markonix
23.02.2014, 02:37:49
jarek0203 kiepski, nieoptymalny i dziurawy kod, poza tym używaj znaczników jak wstawiasz coś na forum
Co do owego specjalnego kodu nie widzę problemu. Jeżeli będzie zawsze to jeden kod to po prostu dodaj warunek if na "sztywno" przed usuwaniem kodów w momencie udanej rejestracji.
@edit Tak, może być w tym samym, może być includowany - ja bym zrobił te drugie bo będą obszerne warunki.
jarek0203
23.02.2014, 02:43:23
Nie.
Nie do końca wiem jak ma działać ten kod prywatnym ale po prostu przed usuwaniem sprawdz czy kod=kod_prywatny.
Marcinekk
23.02.2014, 02:44:14
Zrobiłem to tak :
<?php
include 'config.php';
include 'rejesracja.php';
db_connect();
$result = mysql_query("SELECT * FROM `kody` where kod='$_POST[kod]'");
$kod_z_bazy=$row[kod]; }
if($_POST[kod]=$kod_z_bazy)
{
mysql_query("delete '$_POST[kod]' from kody where kod='$_POST[kod]'") // sprawdzamy czy user nie jest przypadkiem zalogowany
if(!$_SESSION['logged']) {
// jeśli zostanie naciśnięty przycisk "Zarejestruj"
if(isset($_POST['name'])) { // filtrujemy dane...
$_POST['name'] = clear($_POST['name']);
$_POST['password'] = clear($_POST['password']);
$_POST['password2'] = clear($_POST['password2']);
$_POST['email'] = clear($_POST['email']);
// sprawdzamy czy wszystkie pola zostały wypełnione
if(empty($_POST['name']) || empty($_POST['password']) || empty($_POST['password2']) || empty($_POST['email'])) { echo '<p>Musisz wypełnić wszystkie pola.</p>'; // sprawdzamy czy podane dwa hasła są takie same
} elseif($_POST['password'] != $_POST['password2']) {
echo '<p>Podane hasła różnią się od siebie.</p>'; // sprawdzamy poprawność emaila
} elseif(filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) === false) {
echo '<p>Podany email jest nieprawidłowy.</p>'; } else {
// sprawdzamy czy są jacyś uzytkownicy z takim loginem lub adresem email
$result = mysql_query("SELECT Count(user_id) FROM `users` WHERE `user_name` = '{$_POST['name']}' OR `user_email` = '{$_POST['email']}'"); if($row[0] > 0) {
echo '<p>Już istnieje użytkownik z takim loginem lub adresem e-mail.</p>'; } else {
// jeśli nie istnieje to kodujemy haslo...
$_POST['password'] = codepass($_POST['password']);
// i wykonujemy zapytanie na dodanie usera
mysql_query("INSERT INTO `users` (`user_name`, `user_password`, `user_email`, `user_regdate`) VALUES ('{$_POST['name']}', '{$_POST['password']}', '{$_POST['email']}', '".time()."')"); echo '<p>Zostałeś poprawnie zarejestrowany! Możesz się teraz <a href="login.php">zalogować</a>.</p>'; }
}
}
// wyświetlamy formularz
echo '<form method="post" action="dodajkonto.php"> <p>
Login:<br>
<input type="text" value="'.$_POST['name'].'" name="name">
</p>
<p>
Hasło:<br>
<input type="password" value="'.$_POST['password'].'" name="password">
</p>
<p>
Powtórz hasło:<br>
<input type="password" value="'.$_POST['password2'].'" name="password2">
</p>
<p>
E-mail:<br>
<input type="text" value="'.$_POST['email'].'" name="email">
</p>
<p>
<input type="submit" value="Zarejestruj">
</p>
</form>';
} else {
echo '<p>Jesteś już zalogowany, więc nie możesz stworzyć nowego konta.</p> <p>[<a href="index.php">Powrót</a>]</p>';
}
}
else{ header('Location:rejestracja.php'); }
db_close();
?>
Lecz do cholery nie mam zielonego pojęcia co ma zawierać w sobie formularz, w końcu musi jakoś sprawdzić poprawność kodu i przepuścić usera..
markonix
23.02.2014, 02:48:29
Nie widzę w ogóle żebyś coś zrobił z mojego opisu.
Marcinekk
23.02.2014, 02:50:09
Bo twój opis mi nic nie mówi...
markonix
23.02.2014, 02:53:23
if ($_SESSION['secure_code'])
include('rejestracja.php');
else
include('wpisz_kod.php');
Marcinekk
23.02.2014, 02:56:16
Cytat(markonix @ 23.02.2014, 02:53:23 )

include('wpisz_kod.php');[/php]
i co ja tu niby mam wpisać?
markonix
23.02.2014, 02:59:18
Formularz do wpisania kodu.. Kod sprawdzający, zapisywanie go do sesji i odświeżenie strony (aby sprawdził czy warunek jest spełniony - jak tak to wyświetla plik z rejestracją i wszystko wygląda jak jest teraz).
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.