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> </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> </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!