Skocz do zawartości
Zaloguj się, aby obserwować  
LucKy_skiLL

[PHP] Nie działająca rejestracja

Polecane posty

Witam, mam taki kod na rejestracje

 

<?php
session_start(); // rozpoczęcie sesji
ob_start();
include("gora.php");
include("panel.php");

echo '<div id="srodek"><div id="tlo"><center><b>Rejestracja nowego użytkownika</b></center></div></div><br><br><br><br><br>';
if (!isset($_SESSION['login'])) { // dostęp dla zalogowanego użytkownika
include 'db.php'; // połączenie się z bazą danych
$tabela = 'uzytkownik'; // zdefiniowanie tabeli MySQL
if ($_POST["wyslane"]) { // jeżeli formularz został wysłany, to wykonuje się poniższy skrypt
	// filtrowanie treści wprowadzonych przez użytkownika
	$login = htmlspecialchars(stripslashes(strip_tags(trim($_POST["login"]))), ENT_QUOTES);
	$haslo = $_POST["haslo"];
	$haslo2 = $_POST["haslo2"];
	$email = htmlspecialchars(stripslashes(strip_tags(trim($_POST["email"]))), ENT_QUOTES);
	$email2 = htmlspecialchars(stripslashes(strip_tags(trim($_POST["email2"]))), ENT_QUOTES);
 $gg = htmlspecialchars(stripslashes(strip_tags(trim($_POST["gg"]))), ENT_QUOTES);
	// system sprawdza czy prawidło zostały wprowadzone dane
	if (strlen($login) < 3 or strlen($login) > 30 or !eregi("^[a-zA-Z0-9_.]+$", $login)) {
		$blad++;
		echo '<p><div id="srodek"><div class="uwagaczer">Wpisz poprawny login (od 3 do 30 znaków)</div></div></p>';
	} else {
		$wynik = mysql_query("SELECT * FROM $tabela WHERE login='$login'");
		if (mysql_num_rows($wynik) <> 0) {
			$blad++;
			echo '<p><div id="srodek"><div class="uwagaczer">Podana nazwa użytkownika jest zajęta</div></div></p>';
		}
	}
	if (strlen($haslo) < 6 or strlen($haslo) > 30 ) {
		$blad++;
		echo '<p><div id="srodek"><div class="uwagaczer">Wpisz poprawnie hasło (od 6 do 30 znaków)</div></div></p>';
	}
	if ($haslo !== $haslo2) {
		$blad++;
		echo '<p><div id="srodek"><div class="uwagaczer">Podane hasła nie sa takie same</div></div></p>';
	}
	if (!eregi("^[0-9a-z_.-]+@([0-9a-z-]+\.)+[a-z]{2,4}$", $email)) {
		$blad++;
		echo '<p><div id="srodek"><div class="uwagaczer">Podany E-Mail jest nie prawidłowy</div></div></p>';
	} else {
		$wynik = mysql_query("SELECT * FROM $tabela WHERE email='$email'");
		if (mysql_num_rows($wynik) <> 0) {
			$blad++;
			echo '<p><div id="srodek"><div class="uwagaczer">Podany E-Mail jest zajęty</div></div></p>';
		}
	}
	if ($email !== $email2) {
		$blad++;
		echo '<p><div id="srodek"><div class="uwagaczer">Podane adresy E-Mail nie sa takie same</div></div></p>';
	}
	// jeżeli nie ma żadnego błedu, użytkownik zostaje zarejestronwany i wysłany do niego e-mail z linkiem aktywacyjnym
	if ($blad == 0) {
		$haslo = md5($haslo); // zaszyfrowanie hasla
		$kod = uniqid(rand()); // tworzenie unikalnego kodu dla użytkownika
		$wynik = mysql_query("INSERT INTO $tabela VALUES('', '$login', '$haslo', '$email', '$gg', '$kod', NOW(), '')");
		if ($wynik) {
			$list = "Witaj $login !
			Kliknij w poniższy link, aby aktywować swoje konto. http://www.amxhelp.pl/php/weryfikacja.php?weryfikacja=potwierdz&kod=$kod";
			mail($email, "Rejestracja użytkownika", $list, "From: <biuro@amxhelp.pl>");
			echo '<p><div id="srodek"><div id="tlo">Dziękujemy za rejestrację! W ciągu nabliższych 5 minut dostaniesz E-Mail z kodem aktywacyjnym</div></div></p>';
			mysql_close($polaczenie);
			exit;
		}
	}
	mysql_close($polaczenie);
}
// tworzenie formularza HTML
echo <<< KONIEC
<div id="srodek"><div id="tlo"><form action="rejestracja.php" method="post">
<input type="hidden" name="wyslane" value="TRUE" />

<p>Login<font color="#FF0000">*</font>:</td> <td><input type="text" placeholder="Login" name="login" /></p>
<p>Hasło<font color="#FF0000">*</font>:</td> <td> <input type="password" placeholder="Hasło" name="haslo" /></p>
<p>Powtórz hasło<font color="#FF0000">*</font>:</td> <td> <input type="password" placeholder="Powtórz Hasło" name="haslo2" /></p>
<p>E-Mail<font color="#FF0000">*</font>:</td> <td> <input type="text" placeholder="E-Mail" name="email" /></p>
<p>Powtórz E-Mail<font color="#FF0000">*</font>:</td> <td> <input type="text" placeholder="Powtórz E-Mail" name="email2" /></p>
<p>Gadu-Gadu<font color="#FF0000">*</font>:</td> <td> <input type="text" placeholder="Gadu-Gadu" name="gg" /></p>
<p><input type="submit" value="Wyslij" /></p></form></div></div>
KONIEC;
} else {
echo '<div id="srodek"><div id="tlo"><center>Masz już konto</center></div></div>';
}
ob_end_flush();
?>

 

I po wypełnieniu danych na stronie, nie wyświetla żadnego błędu, ale nie rejestruje usera, dlaczego ?

 

Pierwotnie kod wyglądał tak:

	<?php

session_start(); // rozpoczęcie sesji

if (!isset($_SESSION['login'])) { // dostęp dla niezalogowanego użytkownika

	include 'db.php'; // połączenie się z bazą danych
	$tabela = 'uzytkownik'; // zdefiniowanie tabeli MySQL
	require_once('recaptchalib.php'); // dołączenie modułu reCAPTCHA
	$privatekey = 'tu wpisz klucz prywatny'; // prywatny klucz reCAPTCHA
	$publickey = 'tu wpisz klucz publiczny'; // publiczny klucz reCAPTCHA

	if ($_POST["wyslane"]) { // jeżeli formularz został wysłany, to wykonuje się poniższy skrypt

		// filtrowanie treści wprowadzonych przez użytkownika
		$login = htmlspecialchars(stripslashes(strip_tags(trim($_POST["login"]))), ENT_QUOTES);
		$haslo = $_POST["haslo"];
		$haslo2 = $_POST["haslo2"];
		$email = htmlspecialchars(stripslashes(strip_tags(trim($_POST["email"]))), ENT_QUOTES);
		$email2 = htmlspecialchars(stripslashes(strip_tags(trim($_POST["email2"]))), ENT_QUOTES);
		$imie = htmlspecialchars(addslashes(strip_tags(trim($_POST["imie"]))), ENT_QUOTES);
		$nazwisko = htmlspecialchars(addslashes(strip_tags(trim($_POST["nazwisko"]))), ENT_QUOTES);
		$resp = recaptcha_check_answer ($privatekey,
				$_SERVER["REMOTE_ADDR"],
				$_POST["recaptcha_challenge_field"],
				$_POST["recaptcha_response_field"]);

		// system sprawdza czy prawidło zostały wprowadzone dane
		if (strlen($login) < 3 or strlen($login) > 30 or !eregi("^[a-zA-Z0-9_.]+$", $login)) {
			$blad++;
			echo '<p>Proszę poprawny wprowadzić login (od 3 do 30 znaków).</p>';
		} else {
			$wynik = mysql_query("SELECT * FROM $tabela WHERE login='$login'");
			if (mysql_num_rows($wynik) <> 0) {
				$blad++;
				echo '<p>Podana nazwa użytkownika została już zajęta.</p>';
			}
		}
		if (strlen($haslo) < 6 or strlen($haslo) > 30 ) {
			$blad++;
			echo '<p>Proszę poprawnie wpisać hasło (od 6 znaków do 30 znaków). </p>';
		}
		if ($haslo !== $haslo2) {
			$blad++;
			echo '<p> Podane hasła nie są ze sobą zgodne. </p>';
		}
		if (!eregi("^[0-9a-z_.-]+@([0-9a-z-]+\.)+[a-z]{2,4}$", $email)) {
			$blad++;
			echo '<p> Proszę wprowadzić poprawnie adres email.</p>';
		} else {
			$wynik = mysql_query("SELECT * FROM $tabela WHERE email='$email'");
			if (mysql_num_rows($wynik) <> 0) {
				$blad++;
				echo '<p> Podany adres e-mail jest już zajęty.</p>';
			}
		}
		if ($email !== $email2) {
			$blad++;
			echo '<p> Podane adresy e-mail nie są ze sobą zgodne.</p>';
		}
		if (!$resp->is_valid) {
			$error = $resp->error;
			echo '<p>Proszę wpisać poprawnie wyrazy z obrazka.</p>';
			$blad++;
		}

		// jeżeli nie ma żadnego błedu, użytkownik zostaje zarejestronwany i wysłany do niego e-mail z linkiem aktywacyjnym
		if ($blad == 0) {

			$haslo = md5($haslo); // zaszyfrowanie hasla
			$kod = uniqid(rand()); // tworzenie unikalnego kodu dla użytkownika

			$wynik = mysql_query("INSERT INTO $tabela VALUES('', '$imie', '$nazwisko', '$login', '$haslo', '$email', '$kod', NOW(), '')");
			if ($wynik) {
				$list = "Witaj $login !
			   Kliknij w poniższy link, aby aktywować swoje konto. [url="http://www.twoja-strona.pl/weryfikacja.php?weryfikacja=potwierdz&kod=$kod%22;"]http://www.twoja-strona.pl/weryfikacja.php?weryfikacja=potwierdz&kod=$kod";[/url]
				mail($email, "Rejestracja użytkownika", $list, "From: <kontakt@twoja-strona.pl>");
				echo '<p>Dziękujemy za rejestrację! W ciągu nabliższych 5 minut dostaniesz wiadomość e-mail z dalszymi wskazówkami rejestracji.</p>';
				mysql_close($polaczenie);
				exit;
			}
		}
		mysql_close($polaczenie);
	}

	// tworzenie formularza HTML
	echo <<< KONIEC

	<form action="rejestracja.php" method="post">
	<input type="hidden" name="wyslane" value="TRUE" />

	<p>Imię: <input type="text" name="imie" /></p>
	<p>Nazwisko: <input type="text" name="nazwisko" /></p>
	<p>Login*: <input type="text" name="login" /></p>
	<p>Hasło*: <input type="password" name="haslo" /></p>
	<p>Powtórz hasło*: <input type="password" name="haslo2" /></p>
	<p>Adres e-mail*: <input type="text" name="email" /></p>
	<p>Powtórz adres e-mail*: <input type="text" name="email2" /></p>
KONIEC;

	echo recaptcha_get_html($publickey); // wyświetlanie reCAPTCHA
	echo <<< KONIEC

	<p><input type="submit" value="wyślij" /></p></form>
KONIEC;

} else {
	header('Location: / '); // zalogowany użytkownik zostaje przekierowany na stronę główną
}

?>

 

 

I wtedy działał, a ten u góry trochę edytowałem i coś sie popsuło sad.png

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

dodaj po wykonaniu się zapytania echo mysql_error();

Napisz czy zwraca jakiś błąd.

 

Spróbuj zmienić:

 $wynik=mysql_query("INSERT INTO $tabela VALUES('', '$login', '$haslo', '$email', '$gg', '$kod', NOW(), '')");

na

 $wynik=mysql_query("INSERT INTO `$tabela` VALUES('', '$login', '$haslo', '$email', '$gg', '$kod', NOW(), '')");

Edytowano przez Rangal (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Rangal dziękuje Ci, pomogeś, szkoda że nie mogę dodać Ci plusa

 

 

elcct dlaczego tak uważasz ?

Spróbuj programowania obiektowego w PHP, to na prawde wiele ułatwia i podnosi czytelność kodu.

I w cale nie musisz się dużo uczyć smile.png Jedynie kilka prostych rzeczy.

I zamiast

 
htmlspecialchars(stripslashes(strip_tags(trim($_POST["login"]))), ENT_QUOTES);

napisz sobie funkcje która będzie zwracała podaną przez ciebie zmienną przepuszczoną przez te wszystkie powyższe. Oszczędzi Ci to dużo pisania i kod będzie czystszy.

Pozdrawiam.

Edytowano przez Rangal (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Spróbuj programowania obiektowego w PHP, to na prawde wiele ułatwia i podnosi czytelność kodu.

I w cale nie musisz się dużo uczyć smile.png Jedynie kilka prostych rzeczy.

Pozdrawiam.

 

To już nie chodzi o programowanie obiektowe - nie ma nic złego w programowaniu strukturalnym. Na pewno dla czytelności przydałoby się rozdzielenie kodu na warstwy widoku, danych i zarządającej.

No ale czego najbardziej tu brak to zastosowania DRY - don't repeat yourself (nie powtarzaj się).

 

Np.

 

if (strlen($haslo) < 6 or strlen($haslo) > 30 ) {

 

Wywoływanie tej same funkcji z tym samym parametrem - wystarczyło to zrobić raz

 

if (!eregi("^[0-9a-z_.-]+@([0-9a-z-]+\.)+[a-z]{2,4}$", $email)) {

 

eregi już jest nie używane i taki kod może nie działać w nowszych wersjach php. Zaleca się używanie preg

 

I najważniejsze, nie sądze by kod w jakikolwiek sposób był odporny na sql injection.

 

Widać, że pisany przez osobę, która dopiero zaczyna przygodę z programowaniem.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się

Zaloguj się, aby obserwować  

×