Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP][JavaScript]pomoc ze skryptem rejestracji, mam mały problem z pewnym gotowym skryptem który znalazłem w necie
orzechp2
post
Post #1





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 24.08.2009

Ostrzeżenie: (0%)
-----


Witam wszystkich. Znalazłem na stronie funkcje.net gotowy skrypt rejestracji użytkownika i mam z nim pewien problem. Jako, że nie otrzymałem dotąd odpowiedzi ze strony autor postanowiłem prosić was o pomoc:) Może wspólnymi się uda. skrypt ten dostępny jest pod tym linkiem: http://funkcje.net/view/2/1703/index.html . Wszystko wydaje się być z nim w porządku, na pierwszy rzut oka działa poprawnie, wszystko się wyświetla, ale problem jest gdy po raz kolejny rejestruje się osoba z istniejącym już nickiem. W kodzie programu niby jest zabezpieczenie tego ale nie działa(przynajmniej u mnie). Po przeanalizowaniu wszystkiego doszedłem do wniosku, że coś nie gra w tym fragmencie:
if(text.responseText=='2'){
registerResult.innerHTML = 'Błąd: <b>Podany login jest już zajęty</b>';
jest to javascript(plik register.js). Wydaje sie dobrze a jednak warunek nigdy nie jest spełniony, nawet gdy sprawdzałem, że rzeczywiście wychodzi 2. Ja już na prawde nie wiem co jest nie tak. Jakby ktoś obczaił o co chodzi to bede wdzięczny. Pozdrawiam
Go to the top of the page
+Quote Post
cros
post
Post #2





Grupa: Zarejestrowani
Postów: 164
Pomógł: 21
Dołączył: 21.08.2009

Ostrzeżenie: (0%)
-----


sproboj bez apostrofow ta 2 wpisac, a jak to nie zadziala to daj potrojny znak rownosci "==="
moze to poskutkuje.
Nie chcialo mi sie sciagac skryptu, wiec mozliwe ze nie o to tutaj chodzi.
To pierwsze co mi na mysl przyszlo, ale mozliwe ze problem tkwi w innym fragmencie kodu...

Na upartego mozesz w phpmyadmin, dac specjalna wartos UNIQUE dla pola login i wtedy juz na 100% baza nie przepusci takiego samego loginu (IMG:style_emoticons/default/smile.gif)
Najlepiej wrzuc tu caly kod z tego skryptu register.js

DO ADMINA: Od jakiegos czasu obserwuje dziwne zachowanie sie tego forum, czesto nie wgrywaja sie arkusze stylow, albo wszystko jest przekreslone, albo tak jak tu (w moim poscie) wkradaja sie dziwne znaki 55f, lub inne - miedzy "potrojny znak" a "rownosci '==='".
Czy tylko u mnie tak sie dzieje i od czego to jest?

Edit: juz nie ma tego 55f, co sie dzieje?

Ten post edytował cros 24.08.2009, 22:46:15
Go to the top of the page
+Quote Post
orzechp2
post
Post #3





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 24.08.2009

Ostrzeżenie: (0%)
-----


sprawdzałem bez cudzysłowów, z "" , z === i nic. I właśnie nie wiem o co chodzi. Oto register.js:

function register(){

var repeadHaslo = document.getElementById("repeadhaslo").value;
var registerResult = document.getElementById("registerResult");
var login = document.getElementById("login").value;
var haslo = document.getElementById("haslo").value;
var mail = document.getElementById("mail").value;
var token = document.getElementById("token").value;
var regex = /^[a-zA-Z0-9._-]+@([a-zA-Z0-9.-]+\.)+[a-zA-Z0-9.-]{2,4}$/;
var litPatt = /^[2-9]{5,5}$/;
var odp = regex.test(mail);
wynik= token.match(litPatt);
if(login==''){
registerResult.innerHTML = 'Błąd: Nie podano <b>Loginu</b>';
}else if (!odp){
registerResult.innerHTML = 'Błąd: <b>Adres e-mail jest nie poprawny</b>';
}else if (haslo!= repeadHaslo){
registerResult.innerHTML = 'Błąd: <b>Podane hasłą różnią się od siebie</b>';
}else if(haslo==''){
registerResult.innerHTML = 'Błąd: Nie podano <b>Hasła</b>';
}else if(mail==''){
registerResult.innerHTML = 'Błąd: Nie podano <b>Maila</b>';
}else if(token==''){
registerResult.innerHTML = 'Błąd: Nie podano <b>Tokena</b>';
}else if(wynik == null){
registerResult.innerHTML = 'Błąd:<b>Token zawiera złe dane</b>';
}else{
var myAjax = new Ajax.Request(
'register.php',
{
method: 'post',
parameters: "login="+login+
"&haslo="+haslo+
"&mail="+mail+
"&token="+token,
onComplete: showResponse,
onFailure: showAlert
});
}
}
function showResponse(text){
var registerResult = document.getElementById("registerResult");
if(text.responseText=='1'){
registerResult.innerHTML = 'Błąd: <b>Token zawiera złe dane</b>';
}else if(text.responseText=='2'){
registerResult.innerHTML = 'Błąd: <b>Podany login jest już zajęty</b>';
}else{
registerResult.innerHTML = 'Rejestracja zakończona. Na twój adres e-mail został wysłany link aktywacyjny. Dziękujemy';
}
}
function showAlert(MyRequest) {
var registerResult = document.getElementById("registerResult");
registerResult.innerHTML = 'Błąd: <b>Nieudana rejestracja.</b>';
var registerButton = document.getElementById('registerButton');
registerButton.style.display = "none";
}
Go to the top of the page
+Quote Post
cros
post
Post #4





Grupa: Zarejestrowani
Postów: 164
Pomógł: 21
Dołączył: 21.08.2009

Ostrzeżenie: (0%)
-----


Cytat(orzechp2 @ 24.08.2009, 23:46:08 ) *
sprawdzałem bez cudzysłowów, z "" , z === i nic. I właśnie nie wiem o co chodzi. Oto register.js:

function register(){

var repeadHaslo = document.getElementById("repeadhaslo").value;
var registerResult = document.getElementById("registerResult");
var login = document.getElementById("login").value;
var haslo = document.getElementById("haslo").value;
var mail = document.getElementById("mail").value;
var token = document.getElementById("token").value;
var regex = /^[a-zA-Z0-9._-]+@([a-zA-Z0-9.-]+\.)+[a-zA-Z0-9.-]{2,4}$/;
var litPatt = /^[2-9]{5,5}$/;
var odp = regex.test(mail);
wynik= token.match(litPatt);
if(login==''){
registerResult.innerHTML = 'Błąd: Nie podano <b>Loginu</b>';
}else if (!odp){
registerResult.innerHTML = 'Błąd: <b>Adres e-mail jest nie poprawny</b&g
ded
t;';
}else if (haslo!= repeadHaslo){
registerResult.innerHTML = 'Błąd: <b>Podane hasłą różnią się od siebie</b>';
}else if(haslo==''){
registerResult.innerHTML = 'Błąd: Nie podano <b>Hasła</b>';
}else if(mail==''){
registerResult.innerHTML = 'Błąd: Nie podano <b>Maila</b>';
}else if(token==''){
registerResult.innerHTML = 'Błąd: Nie podano <b>Tokena</b>';
}else if(wynik == null){
registerResult.innerHTML = 'Błąd:<b>Token zawiera złe dane</b>';
}else{
var myAjax = new Ajax.Request(
'register.php',
{
method: 'post',
parameters: "login="+login+
"&haslo="+haslo+
"&mail="+mail+
"&token="+token,
onComplete: showResponse,
onFailure: showAlert
});
}
}
function showResponse(text){
var registerResult = document.getElementById("registerResult");
if(text.responseText=='1'){
registerResult.innerHTML = 'Błąd: <b>Token zawiera złe dane</b>';
}else if(text.responseText=='2'){
registerResult.innerHTML = 'Błąd: <b>Podany login jest już zajęty</b>';
}else{
registerResult.innerHTML = 'Rejestracja zakończona. Na twój adres e-mail został wysłany link aktywacyjny. Dziękujemy';
}
}
function showAlert(MyRequest) {
var registerResult = document.getElementById("registerResult");
registerResult.innerHTML = 'Błąd: <b>Nieudana rejestracja.</b>';
var registerButton = document.getElementById('registerButton');
registerButton.style.display = "none";
}


Jesli to byl register.js to wklej jeszcze register.php
Go to the top of the page
+Quote Post
orzechp2
post
Post #5





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 24.08.2009

Ostrzeżenie: (0%)
-----


<?php
session_start();
function lacz_bd()
{
$db = new mysqli('localhost', 'uzytkownik', 'haslo', 'nazwa_bazy');
if (! $db)
return false;
$db->autocommit(TRUE);
return $db;
}



if(!empty($_GET['activ'])){
$login = addslashes($_GET['activ']);
$db = lacz_bd();
$zapytanie = "update uzytkownicy set act='1' where login='$login'";
$wynik = $db->query($zapytanie);
echo 'OK';
}




if($_SESSION['captcha']!=$_POST['token']){
echo '1';
exit();
}



$login = addslashes($_POST['login']);
$haslo = addslashes($_POST['haslo']);
$mail = addslashes($_POST['mail']);
$token = addslashes($_POST['token']);


if(!empty($login)&&!empty($haslo)&&!empty($mail)&&!empty($token)){
$db = lacz_bd();

$zapytanie = "select login from uzytkownicy WHERE login='$login'";
$wynik = $db->query($zapytanie);
$ile_znalezionych = $wynik->num_rows;
if($ile_znalezionych>0){ echo '2';
exit();
}
$zapytanie = "insert uzytkownicy (id, login, haslo,mail,act) values ('', '$login', sha1('$haslo'), '$mail', '0')";
$wynik = $db->query($zapytanie);
if($wynik){
$stopka = '<br /><br />-----------------------------------------------<br /><br />';
$from = 'twoja@domena.net';
$admin_mail = 'twoja@domena.net';
$tomail = $mail;
$topic = 'Aktywacja konta';
$tresc = 'Dane do logowania w serwisie : <br /><br /> Login: '.$login.'<br /> Haslo: '.$haslo.'<br /><br /> Aby aktywowac konto kliknij: <a href="http://www.twojaDomena.pl/register.php?activ='.$login.'">Aktywacja kliknij</a>';

mail($tomail,$topic,$tresc."\n\n\n".$stopka, "From: $admin_mail\r\n"
."Reply-To: $from\r\nMIME-Version: 1.0\r\n"."Content-type: text/html; charset=iso-8859-2\r\n ");

}else{ echo 'error';}
}

?>
Go to the top of the page
+Quote Post
cros
post
Post #6





Grupa: Zarejestrowani
Postów: 164
Pomógł: 21
Dołączył: 21.08.2009

Ostrzeżenie: (0%)
-----


sprawdz dokladnie co zwraca (wyswietla) zmienna text.responseText, gdy login sie powtarza, mozliwe ze jakis znak sie tam wdarl pusty (spacja etc..)
A sprawdz co sie stanie jak nie wpiszesz dobrze tokenu...

Jutro zainstaluje ten skryp u siebie na localhoscie, i wyproboje, bo wtedy bedzie szybciej, sam przetestuje i sprawdze ocb...
Dzisiaj juz troche pozno...a mozliwe ze zanim ja wroce z pracy to juz bedzie tu ze 100 odpowiedzi...

Ten post edytował cros 24.08.2009, 23:08:51
Go to the top of the page
+Quote Post
orzechp2
post
Post #7





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 24.08.2009

Ostrzeżenie: (0%)
-----


jak nie wpisze dobrze tokenu to pisze, ze token jest zły. Ale Zauważ, że tam dwukrotnie pojawia sie token jest zły. Raz z text.responsetext=='1', i raz wczesniej w register.js z wynik==null. zrobilem tak, ze zmienilem tekst w obu przypadkach i okazało się, ze to ten z wynik==nul sie wyswitetla. jesli chodzi o wyswetlenie resposnetext to ono wynosi to 1 lub 2, zmienialem nawet na jakies slowa czy cos ale nic to nie dalo:/
Go to the top of the page
+Quote Post
cros
post
Post #8





Grupa: Zarejestrowani
Postów: 164
Pomógł: 21
Dołączył: 21.08.2009

Ostrzeżenie: (0%)
-----


Cytat(orzechp2 @ 25.08.2009, 00:10:22 ) *
jak nie wpisze dobrze tokenu to pisze, ze token jest zły. Ale Zauważ, że tam dwukrotnie pojawia sie token jest zły. Raz z text.responsetext=='1', i raz wczesniej w register.js z wynik==null. zrobilem tak, ze zmienilem tekst w obu przypadkach i okazało się, ze to ten z wynik==nul sie wyswitetla. jesli chodzi o wyswetlenie resposnetext to ono wynosi to 1 lub 2, zmienialem nawet na jakies slowa czy cos ale nic to nie dalo:/


czyli wychodzilo by na to ze text.responseText nie dziala, heh...
sprawdzam ten kod juz po raz 10 i wszystko wydaje sie ok, a pytalem o to co wyswietla to "text.responseText",bo mam wrazenie ze w tym tkwi problem...
Pokombinowal by z tym, np zamiast echo '2'; dac print '2', choc watpie ze to cos zmieni...

Ale dla pewnosci polecalbym chwilowe wymazanie linijki wynik==null i sprawdzenie czy po wpisaniu zlego tokena nadal bedzie komunikat, jesli nie to masz pewnosc
ze text.responseText jest glownym winowajca...

A dopoki nie znajdziesz rozwiazania to daj w mysql wlasciwosc UNIQUE dla pola login i przez ten czas nikt ci balaganu nie zrobi w bazie...

A tak przy okazji, teraz zauwazylem, gdzie ta funkcja jest wywolywana, bo jak patrze w ten kod to ona jest tylko zdeklarowana, ale odwoloania do niej nie widze, chyba ze jestem slepy, chodzi o funkcje "function showResponse(text)"


Ten post edytował cros 24.08.2009, 23:26:52
Go to the top of the page
+Quote Post
orzechp2
post
Post #9





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 24.08.2009

Ostrzeżenie: (0%)
-----


to on bedzie glownym winowajca bo na tej stronie dostepny jest takze skrypt logowania i dokladnie w tym samym miejscu jest blad, przy sprawdzaniu czy wynosi 1. napisalem tam w komentarzach czy nie da sie tego jakos zastapic ale cisza. co ciekawe nikt w komentarzach nie pisze o tym problemie, a ja dwukrotnie wszystko kopiowalem zeby nie bylo ze sie gdzies pomylilem i caly czas to samo. przy rejestracji, gdy zdubluje login, pisze ze e-mail aktywacyjny zostal wyslany chociaz on nie dochodzi, i nie tworzy sie nowy rekord w bazie. tylko z tym wyswietleniem sa jakies jaja. w skrypcie logowania, jak podam zle dane to pisze ze zalogowalem sie jako 1, a jak podam dobre to pisze moj login. czyli ma ta 1 ale nie sprawdza tego responsetext
Go to the top of the page
+Quote Post
cros
post
Post #10





Grupa: Zarejestrowani
Postów: 164
Pomógł: 21
Dołączył: 21.08.2009

Ostrzeżenie: (0%)
-----


chyba wiem popatrz na to:

method: 'post',
parameters: "login="+login+
"&haslo="+haslo+
"&mail="+mail+
"&token="+token,
onComplete: showResponse,
onFailure: showAlert

niby jest odwolanie do showResponse, ale bez (), czyli z tego co wiem jesli odwolujemy sie do funkcji to nawiasy musza byc, popraw to na:

method: 'post',
parameters: "login="+login+
"&haslo="+haslo+
"&mail="+mail+
"&token="+token,
onComplete: showResponse(),
onFailure: showAlert()


PS! Jutro jeszcze pokombinujemy, bo traktuje to tez jako nauke (IMG:style_emoticons/default/winksmiley.jpg) , jesli jednak nie da sie z tym nic zrobic, to sciagnij inny skrypt, albo jak skoncze swoj to moge ci go dac, narazie trwaja prace koncowe, czyli zabezpieczanie przed roznymi mozliwosciami atakow sql injection i tego typu, moze za tydzien sie uda skonczyc, bo skrypt hula jak ta lala ale trza go na wszelie mozliwosci sprawdzic (IMG:style_emoticons/default/winksmiley.jpg) Niestety pracuje, wiec daje tydzien bo moge poswiecic temu w ciagu dnia 2 gora 4 godzinki, a to nie jest dobrze jak cos sie robi, bo z wybija sie czlowiek z toku (IMG:style_emoticons/default/winksmiley.jpg)

Ten post edytował cros 24.08.2009, 23:37:32
Go to the top of the page
+Quote Post
orzechp2
post
Post #11





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 24.08.2009

Ostrzeżenie: (0%)
-----


jak dam z tymi nawiasami to sie wogole nic nie wykonuje... dziwne bo wszystko na prawde wydaje sie byc dobre a jednak nie działa
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 16:49