Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP][JavaScript]pomoc ze skryptem rejestracji
Forum PHP.pl > Forum > Przedszkole
orzechp2
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
cros
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 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?
orzechp2
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";
}
cros
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
orzechp2
<?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';}
}

?>
cros
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...
orzechp2
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:/
cros
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)"
orzechp2
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
cros
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 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 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 winksmiley.jpg
orzechp2
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
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.