O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

Registro em PHP

Iniciado por NumPaD, 03/02/2015 às 04:55

03/02/2015 às 04:55 Última edição: 03/02/2015 às 13:14 por iNumPad
Fala galera.

Eu tava acompanhando umas videoaulas e fazendo um sistema de registro para um jogo.
O problema é que o sistema demonstrado não funcionou aqui, pois não grava nada do banco de dados. Ou melhor, nem conecta...

Um usuário postou outro código, e esse funcionou, mas não tem uma função MUITO importante: Definir um N° de caracteres mínimos para usuário e senha. Pois no código funcional dá pra concluir o registro sem ao menos inserir uma senha.

Código da aula. Não funciona:
<?php
	// Variables
	$sqlHost = '127.0.0.1';
	$sqlUser = 'root';
	$sqlPass = '';
	$sqlDatabase = 'mmorpg';

	// Make connection
	$connection = new PDO('mysql:host='.$sqlHost.';dbname='.$sqlDatabase.';charset=utf8', $sqlUser, $sqlPass);
	$connection -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

	//
	$username = null;
	$password = null;

	// if
	if (isset($_GET['user']))
	{
		$username = $_GET['user'];
	}

	// if
	if (isset($_GET['pass']))
	{
		$password = $_GET['pass'];
	}

	if((isset($username)) && (isset($password)))
	{
		// TODO SQL
		$salt = genSalt(40);
		$passHash = md5(md5($salt) . md5($password));
		
		$statement = $connection -> prepare("INSERT INTO `mmorpg`.`accounts` (`username`, `password`, `salt`) VALUES (:user, :pass, :salt);");
		$statement->bindParam(":user", $username);
		$statement->bindParam(":pass", $passHash);
		$statement->bindParam(":salt", $salt);
		if($statement->execute())
		{
			echo "Thank you for registration, " . $username;
		}
		else
		{
			echo "Sorry, your registration failed.";
		}
	}
	else
	{
		// DISPLAY
		echo '<input type="text" id="user" placeholder="username"/>
		<input type="text" id="pass" placeholder="password"/>
		<button id="button">Register</button>
		
		<script>
			var button = document.getElementById("button");
			button.addEventListener("click", function()
			{
				var user = document.getElementById("user");
				var pass = document.getElementById("pass");
				if(user.value.length< 3 || pass.value.length < 3)
				{
					alert("Please enter a valid username/password");
				}
				else
				{
					window.location = "index.php?user="+user.value+"&pass="+pass.value;
				}
			});
		</script>
		';
	}
        // Generate Salt
	function genSalt($length)
	 {
	$variables = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789";
	$charLength = strlen($variables);
	$returned = "";
	for($i = 0; $i < $length; $i++)
		{
		$returned .=$variables[rand(0, ($charLength -1))];
		}
	return $returned;
	}
?>


Código do usuário, funcional:
<?php
	// Host login
	$sqlHost = "localhost";
	$sqlUser = "root";
	$sqlPass = "";
	$sqlDatabase = "mmorpg";
	// Connect
	$connection = mysql_connect($sqlHost, $sqlUser, $sqlPass) or die("Database connection failed.");
	mysql_select_db($sqlDatabase) or die("Could not connect to Database.");

	// Set values
	$username = null;
	$password = null;

	// POST values
	if(isset($_POST['User'])){
	$username = $_POST['User'];
	}
	if(isset($_POST['Password'])){
	$password = $_POST['Password'];
	}
    
	if(isset($username) && isset($password))
	{
	// SQL
	$salt = genSalt(40);
	$passhash = md5(md5($salt) . md5($password));
	$salt = genSalt(40);
	// Record values in database
	$query = mysql_query("INSERT INTO accounts (username, password, salt) VALUES ('". $username ."', '". $passhash. "', '". $salt."')") or die("Sorry, your registration failed.");
	// Show Success
	if($query == true)
	{
	 echo "Thank you for registration, $username";
	}}
	else
	{
		// Display
	echo'<form name="f1" action="#" method="POST">
	<table border="0">
	<tr>
	<td>Login: </td>
	<td><input type="text" name="User"></td>
	</tr>
	<tr>
	<td>Password: </td>
	<td><input type="password" name="Password"></td>
	</tr>
	<tr>
	<td> &nbsp; </td>
	<td><input type="submit" value="Register"></td>
	</tr>
	</table>
	</form>';}

	// Generate Salt
	function genSalt($length)
	 {
	$variables = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789";
	$charLength = strlen($variables);
	$returned = "";
	for($i = 0; $i < $length; $i++)
		{
		$returned .=$variables[rand(0, ($charLength -1))];
		}
	return $returned;
	}
	// Close connection
	mysql_close($connection);
?>

Eu não entendo nada de linguagem web. Alguém saberia por uma restrição minima de caracteres no segundo código?
Ou achar o erro do primeiro?

Vê se funciona:
<?php
	// Host login
	$sqlHost = "localhost";
	$sqlUser = "root";
	$sqlPass = "";
	$sqlDatabase = "mmorpg";
	// Connect
	$connection = mysql_connect($sqlHost, $sqlUser, $sqlPass) or die("Database connection failed.");
	mysql_select_db($sqlDatabase) or die("Could not connect to Database.");

	// Set values
	$username = "";
	$password = "";

	// POST values
	if(isset($_POST['User'])){
	  $username = $_POST['User'];
	}
	if(isset($_POST['Password'])){
	  $password = $_POST['Password'];
	}
    
	if(strlen($username) > 4 && strlen($password) > 4)
	{
	// SQL
	$salt = genSalt(40);
	$passhash = md5(md5($salt) . md5($password));
	$salt = genSalt(40);
	// Record values in database
	$query = mysql_query("INSERT INTO accounts (username, password, salt) VALUES ('". $username ."', '". $passhash. "', '". $salt."')") or die("Sorry, your registration failed.");
	// Show Success
	if($query == true)
	{
	 echo "Thank you for registration, $username";
	}}
	else
	{
		// Display
	echo'<form name="f1" action="#" method="POST">
	<table border="0">
	<tr>
	<td>Login: </td>
	<td><input type="text" name="User"></td>
	</tr>
	<tr>
	<td>Password: </td>
	<td><input type="password" name="Password"></td>
	</tr>
	<tr>
	<td> &nbsp; </td>
	<td><input type="submit" value="Register"></td>
	</tr>
	</table>
	</form>';}

	// Generate Salt
	function genSalt($length)
	 {
	$variables = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789";
	$charLength = strlen($variables);
	$returned = "";
	for($i = 0; $i < $length; $i++)
		{
		$returned .=$variables[rand(0, ($charLength -1))];
		}
	return $returned;
	}
	// Close connection
	mysql_close($connection);
?>


Na linha:
if(strlen($username) > 4 && strlen($password) > 4)

Eu defini sendo que, usuário e senha tem que ser maior que 4, se quiser outro valor, só alterar.

Opa! Valeu Fábio. Funcionou sim. Grato!