Rejestracja nowego użytkownika mysql + php

0

Witam, utknąłem. Nastrugałem tonę kodu rejestracyjnego i nie hula, może ktoś coś podpowie, jak klikam przycisk Rejestruj to nie ma żadnej reakcji.

Fragment kodu:
new_user_form.php

 
<!DOCTYPE html>
<html>
<head>
	<meta http-equiv="Content-Type" content="text/html: charset=utf-8">
	<title>Dane użytkownika</title>
	<script type="text/javascript">
	
	function sprawdz(){
		var f = document.form.formularz1;
		if(f.nazwa.value.length<3 ||
			f.nazwa.value.length>20){
			alert('Nazwa musi mieć od 3 do 20 znaków!');
		return;
		}
		if(f.haslo.value.length<6 ||
			f.nazwa.value.length>40){u
			alert('Haslo musi mieć od 6 do 40 znaków!');
		return;
		}
		if(f.haslo.value != f.haslo2.value){
			alert('Wprowadzone hasła są różne!');
		return;
		}
		if(f.imie.value==""||
			f.nazwisko.value==""||
			f.adres_email.value=""){
			alert('Proszę wypełnić wszystkie pola formularza!');
		return;
		}
		f.submit();
	}

	</script>
</head>
<body>
	<h2> Wprowadź dane rejestracyjne: </h2>
	<form name = "formularz1"
		  action = "http://localhost/new_user.php"
		  method = "post">
	<table><tr>
		<td>Nazwa użytkownika:</td>
		<td>
			<input type="text" name="Nnazwa">
		</td>
	</tr><tr>
	<td>Hasło:</td>
		<td>
			<input type="password" name="Haslo">
		</td>
	</tr><tr>
	<td>Powtórz hasło:</td>
	<td>
		<input type="password" name="haslo2">
	</td>
</tr><tr>
	<td>Imie:</td>
		<td>
			<input type="text" name="imie">
		</td>
	</tr><tr>
		<td>Nazwisko:</td>
		<td>
			<input type="text" name="nazwisko">
		</td>
	</tr><tr>
		<td>E-mail:</td>
		<td>
			<input type="text" name="adres_email">
		</td>
	</tr><tr>
	<td colspan="2" style="text-align:right;">
		<input type="button" value="Rejestracja" onClick="sprawdz();">
	</td>
</tr>
</table>
</form>
</body>
</html>

new_user.php

<?php
define('OK', 0);
define('SERVER_ERROR', 1);
define('INVALID_USER_NAME', 2);
define('INVALID_USER_PASS', 3);
define('USER_NAME_ALREADY_EXISTS', 4);
define('EMPTY_FIELDS', 5);

$host = 'localhost';
$baza = 'mojaBaza';
$uzytkownik = 'admin';
$haslo = 'admin';

function rejestruj($nazwa,$pass,$imie,$nazwisko,$email){
//Umożliwienie odwołań do zmiennych globalnych
	global $host, $baza, $uzytkownik, $haslo;

	//Sprawdzenie poprawności danych (Długość) dla kodowania UTF-8
	$userPassLength = strlen(utf8_decode($pass));
	if($userPassLength <6 || $userPassLength > 40)
		return INVALID_USER_PASS;

	if($imie =="" || $nazwisko=="" || $email=="")
		return EMPTY_FIELDS;

	//Sprawdzanie poprawności danych (wyrażenia reguralne)
	if(!preg_match("/^[a-zA-Z0-9_.]{3,20}$/", $nazwa)){
		return INVALID_USER_NAME;
	};
	//Tutaj ewentualne dalsze instrukcje weryfikujące dane

	//Nawiązanie połączenia z bazą danych
	$db_obj = new mysqli($host, $uzytkownik, $haslo, $baza);
	if($db_obj -> connect_errno){
		//echo 'Wystąpił błąd podczas próby połączenia z serwerem MySQL...';
		//echo $db_obj->connect_error;
		return SERVER_ERROR;
	}
	//Zabezpieczenie znaków specjalnych w parametrach
	$nazwa = $db_obj->real_escape_string($nazwa);
	$imie = $db_obj->real_escape_string($imie);
	$nazwisko = $db_obj->real_escape_string($nazwisko);
	$email = $db_obj->real_escape_string($email);

	//Sprawdzenie czy użytkownik o podanej nazwie istnieje w bazie
	$query = "SELECT COUNT(*) FROM users WHERE Nazwa = '$nazwa' ";
	if($result = $db_obj->query($query)){
		//echo 'Wystąpił błąd: nieprawidłowe zapytanie';
		$db_obj -> close();
		return SERVER_ERROR;
	}

	if(!$row = $result->fetch_row()){
		//echo 'Wystąpił błąd: nieprawidłowe wyniki zapytania';
		$db_obj->close();
		return SERVER_ERROR;
	}
	else {
		//Użytkownik istnieje, nie można dodać nowego wpisu do bazy
		if($row[0] > 0){
			$db_obj->close();
			return USER_NAME_ALREADY_EXISTS;
		}
	}

	//Dodanie nowego użytkownika
	$pass = crypt($pass);

	$query = "INSERT INTO users VALUES(";
		$query = "NULL, '$nazwa','$pass','$imie','$nazwisko','$email')";
if($result = $db_obj->query($query)){
	//echo 'Wystąpił błąd: instrukcja INSERT';
		$db_obj->close();
		return SERVER_ERROR;
}
else {
	//Prawidłowe dodanie rekordu
	$db_obj->close();
	return OK;
}
}

session_start();
//Sprawdzanie czy użytkownik jest już zalogowany
if(isset($_SESSION['zalogowany'])){
	header("Location: main.php");
}
//Sprawdzanie czy zostały przekazane wszystkie pola formularza
else if(!isset($_POST["nazwa"] || !isset($_POST["haslo"]) || !isset($_POST["imie"]) || !isset($_POST["nazwisko"]) || !isset($_POST["email"])){
	include "new_user_form.php";
}
else {


?>

<!DOCTYPE html>
<html>
<head>
	<meta http-equiv="Content-Type" content="text/html: charset=utf-8">
	<title>Rejestracja</title>
	</head>
	<body>
		<h2>
			<?php
			//Odczyt danych z formularza
			$nazwa = $_POST["nazwa"];
			$pass = $_POST["haslo"];
			$imie = $_POST["imie"];
			$nazwisko = $_POST["nazwisko"];
			$email = $_POST["email"];
			//Wywołanie funkcji rejestrującej nowego użytkownika
			$val = rejestruj($nazwa, $pass, $imie, $nazwisko, $email);

			//Reakcja na wartość zwróconą przez funkcję
			if($val == OK){
				echo "Rejestracja poprawna. Możesz się <a href='login.php'>zalogować</a>.";
			}
			else if($val == INVALID_USER_NAME){
				echo "Nazwa użytkownika musi mieć od 3 do 20 znaków i może zawierać ";
				echo "jedynie znaki alfabetu łacińskiego oraz cyfry i znaki podkreślenia.";
			}
			else if($val == INVALID_USER_PASS){
				echo "Hasło musi mieć od 6 do 40 znaków.";
			}
			else if($val == USER_NAME_ALREADY_EXISTS){
				echo "Użytkownik $nazwa jest już zarejestrowany.";
			}
			else if($val == EMPTY_FIELDS){
				echo "Proszę wypełnić wszystkie wymagane pola formularza.";
			}
			else {
				echo "Błąd serwera. Rejestracja nie powiodła się.";
			}
			}
			?>
		</h2>
	</body>
	</html> 

Z góry dzięki za poświęcony mi czas

0

ostatni warunek z początku :

||
            f.adres_email.value=""

Przypisujesz zamiast porównywać, może przez to tak się dzieje?

0
 <input type="button" value="Rejestracja" onClick="sprawdz();">

a to nie chodzi o funkcję sprawdz(); po kliknięciu ??

Hmm, nie powinienem tam dać czasem funkcji rejestruj(); po kliknięciu ?

0

Chodzi o to, że całkowicie nic się nie dzieje, klikam przycisk rejestruj i nie reaguje na nic, jakby było coś nie tak z tymi warunkami to by krzyczało błędy.

Dodałem nawet testującą linijkę w js document.write("test skryptu"); i nic nie wypisuje. Coś jest nie tak z przyciskiem prawdopodobnie. Ktoś ma jakieś pomysły ??

0

A zmień "var f = document.form.formularz1;" na var f = document.forms.formularz1;
Ja tak zawsze robiłem, nie wiem jak ta metoda form działa

0

Jest tak, udało mi się po kliknięciu wyświetlić tekst, ale nie działają te ify co mam powyżej, aktualnie coś takiego jest w skrypcie:

 	function sprawdz(){
		document.write("test skryptu");
		var f = document.form.formularz1;
		if(f.nazwa.value.length<3 ||
			f.nazwa.value.length>20){
			alert('Nazwa musi mieć od 3 do 20 znaków!');
		return;
		}
		if(f.haslo.value.length<6 ||
			f.nazwa.value.length>40){
			alert('Haslo musi mieć od 6 do 40 znaków!');
		return;
		}
		if(f.haslo.value != f.haslo2.value){
			alert('Wprowadzone hasła są różne!');
		return;
		}
		if(f.imie.value==""||
			f.nazwisko.value==""||
			f.adres_email.value==""){
			alert('Proszę wypełnić wszystkie pola formularza!');
		return;
		}
		f.submit();
	}

document.write wypisuje mi elegancko, ale ify nie działają bo by wyszły błędy jak puste daje, a tak to tylko przechodzi do nowej strony jakby z wypisanym tekstem

0

Porób sobie console.log'i np na tym f a potem na wartościach i zobacz co zwraca i czy o to Ci chodziło

0

Czemu ja sobie tematu od tej inżynierki nie wybrałem w Javie... Dlaczegoooooooooo ;( mam pierwszy raz styczność z PHP i JS :P a tu 3 miesiące do obrony zostały, a ja w ciemnej jestem ;/

1

Dobra, po kolei, co jest do poprawy na pewno:

  • <input type="text" name="**Nnazwa**"> - w js odwolujesz się do pola "nazwa", więc nic dziwnego, że Ci nie znajduje

  • To **form **zmień na forms, bo Ci nie zadziała

  • <input type="password" name="**Haslo**"> - to samo co w pierwszym, zmien na "haslo"

  • przed alertem w 2gim warunku masz znak "u" po klamrze - nie powinno go chyba tam być ;)

Jak to poprawisz, to daj znać czy działa

0

Poprawiłem :P działa, Ty serio siedziałeś i analizowałeś to krok po kroku ?

0

Wrzuciłem to sobie przed chwilą do JsFiddle i zaraz było widać co jest nie tak ;P

0

:P właśnie patrzę to JsFiddle, fajne :D, jeszcze opcja jest taka, że kurczele zmieniłem właśnie XAMPPa na WAMPa i próbuję się zalogować na phpMyAdmin, w celu stworzenia usera i bazy nowej, ale nie wiem jakie hasło jest na phpMyAdmin, root root i 100 innych próbowałem i się dostać nie mogę, root i hasło puste powinno być, też nie działa, bo krzyczy że hasło nie może być puste ... Yoo

0

Konfiguracja zabrania logowania bez hasła (zobacz AllowNoPassword)

Szukam tego by zmienić z false na true, ale pobrałem kurde bitnami WAMP stack i nie wiem gdzie co tu jest xD

1

http://php.net/manual/en/mysqli-stmt.bind-param.php / PDO bind param
Startować sesję wypada gdzieś na samym początku skryptu, a nie pod koniec.
Użyj jakiegoś frameworka, bo daleko nie zajedziesz z tym spaghetti.

0

Zacząłem na nowo z OOP PDO i nie mogę sobie poradzić na samym początku.

 <?php

/**
 * Created by PhpStorm.
 * User: ziben
 * Date: 18.10.2015
 * Time: 17:41
 */
include_once('ConnectionDB.php');
class User
{
    private $db;

    public function __construct(){
        $this->db = new ConnectionDB();
        $this->db = $this->db->getConnection();
    }

public function Login($name,$pass){
    if(!empty($name) && !empty($pass)){
        $st = $this->db->prepare("select * from users where name=? and pass=?");
        $st->bindParam(1, $name);
        $st->bindParam(2, $pass);
        $st->execute();

        if($st->rowCount() == 1){
            echo "User verified, Access granted.";
        } else {
            echo "Incorrect username or password";
        }

    }else{
        echo "Please enter username and password";
    }
}
}

Jak wpisuję prawidłowe dane do pól tekstowych tutaj:

 <?php
/**
 * Created by PhpStorm.
 * User: ziben
 * Date: 18.10.2015
 * Time: 14:42
 */

include_once('User.php');
if(isset($_POST['submit'])){
    $name = $_POST['user'];
    $pass = $_POST['pass'];

    $object = new User();
    $object->Login($name, $pass);
}
?>

<!DOCTYPE html>
    <html>
<head>
    <meta charset="UTF-8">
    <title>Panel logowania</title>
</head>
<body>
<form method="post" action="index.php">
    Login: <input type="text" name="user"/>
    Hasło: <input type="text" name="pass"/>
    <input type="submit" name="submit" value="Login"/>
</form>
</body>
</html>

To wychodzi mi: Incorrect username or password.

W bazie mam zrobioną tabelę users z rekordami id, name, pass. Wstawiłem tam dwóch przykładowych userów o wartościach admin admin i administrator administrator niestety coś nie gra. Gdzie robię błąd?

0

założę nowy temat.

1 użytkowników online, w tym zalogowanych: 0, gości: 1