Jump to content

Correção do Código


Joaquim Venancio

Recommended Posts

Boa tarde.

Venho por este meio pedir a vossa ajuda na correção do código que posto a baixo.

Esse código deveria fazer o registo de novos utilizadores, mas sempre mostra um erro. Creio que o problema esteja nos "Inputs", mas não estou a conseguir resolver.

 

<?php
require_once("bootstrap.php");
?>
<!DOCTYPE html>
<html>
<head>
	<title>Registrar PHP</title>
</head>
<body>
<h2>Registrar</h2>
 <form action="" method="post">
 					Nome Completo
 					<input name="nome" type="text" placeholder="Ex: André Silva" required><br>
 					E-mail
 					<input name="email" type="email" placeholder= "E-mail" required><br>
 					Senha
 					<input name="senhal" type="password" placeholder="6 ou mais digitos" autocomplete="off" required><br>
 					Repita senha
 					<input name="senha2" type="password" placeholder="Confirme sua senha" autocomplete="off" required><br>

 					<input type="checkbox" required="" name="termos">Eu li e aceito os Termos de Serviço<br>

 				<input type="submit" class="btn btn-block mt-lg btn-default"><b>Cadastrar</b></button>
 </form>
</body>
</html>
<?php
if($_POST){

    date_default_timezone_set('Portugal');

    $nome = $_POST['nome'];
    $nome=htmlspecialchars($nome,ENT_QUOTES);

    $email = $_POST['email'];
    $email=htmlspecialchars($email,ENT_QUOTES);
    
    $termos = $_POST['termos'];
    $termos=htmlspecialchars($termos,ENT_QUOTES);
    
    $senha1 = $_POST['senha1'];
    $senha1=htmlspecialchars($senha1,ENT_QUOTES);
    
    $senha2 = $_POST['senha2'];
    $senha2=htmlspecialchars($senha2,ENT_QUOTES);

    $senhacrip = hash('sha256', $senha2);

    $data = date("Y-m-d H:i:s");

    $ip = $_SERVER['REMOTE_ADDR'];

        if(empty($email)){
            echo "<script>window.alert('Digite o e-mail');</script>";
            echo "<meta http-equiv='refresh' content='0;'>";
            return false;
}

$veric = mysqli_query($conn, "SELECT * FROM users WHERE email='$email'");
$verifc = mysqli_num_rows($veric);

    if ($verifc == true) {
        echo "<script>window.alert('Você jà cadastrou!');</script>";
        echo "<meta http-equiv='refresh' content='0;'>";
        return false;
    }

    if (empty($termos)) {
        echo "<script>window.alert('Concorde com os termos!');</script>";
        echo "<meta http-equiv='refresh' content='0;'>";
        return false;
    }

    if (empty($senha1)) { //Verificar senha.
        echo "<script>window.alert('Digite uma senha!');window.history.go(-1);</script>";
        return false;
    }

    if (empty($senha2)) { //Verificar confirmar senha.
        echo "<script>window.alert('Confirme sua senha!');window.history.go(-1);</script>";
        return false;
    }

    if (strlen($senha1) < 6){
        echo "<script>window.alert('Sua senha deve conter no minimo 6 digitos!');window.history.go(-1);</script>";
        return false;
    }

    if ($senha1 != $senha2) {
        echo "<script>window.alert('Senhas Difrentes!');</script>";
        echo "<meta http-equiv='refresh' content='0;'>";
        return false;
    }


        echo "<meta http-equiv='refresh' content='0;registrar.php?q=true'>";

/////////////// Gravando ///////////////


$sql1=mysqli_query ($conn,"INSERT INTO users (nome, email, senha, data) VALUES ('$nome', '$email', '$senhacrip', '$data')");

}
?>
</body>
</html>

 

gEqxgLv.jpg

 

Agradeço desde já toda a ajuda que me possam dar.

Edited by Joaquim Venancio
Adicionar Imagem com o erro.
Link to comment
Share on other sites

1 hora atrás, tiago.f disse:

Olá, não vejo nenhum javascript nesse código. Sugiro:

- colocares a questão no forum correcto (php)

- colocares também o erro que dá

Boa sorte!

Tem razão, enganei-me no local onde criar o tópico.

Vou esperar que o Staff do forum movam o tópico para a aba correta, para não andar a criar tópicos repetidos.

Link to comment
Share on other sites

Assumindo que o include do bootstrap.php define a variável $conn para ligar à base de dados, o resultado do query é false, logo vazio.

Para evitar o erro deves testar o resultado do query

<?php 

$query = "SELECT * FROM users WHERE email='{$email}'";
// var_dump($query)

$veric = mysqli_query($conn, $query);
	if(!$veric){
        // Quando o resultado do query é false/vazio qual é a acção?
        return false;
    }
// Se tiver um dataset de dados, o mysqli_num_rows vai estar disponivel
    $verifc = mysqli_num_rows($veric);

 

Em todo o caso, podes sempre usar um var_dump/echo/print_r para veres se o email está correto na construção do query como deixei no exemplo em cima

 

Feito é melhor que perfeito

Link to comment
Share on other sites

54 minutos atrás, Ivo Vicente disse:

Assumindo que o include do bootstrap.php define a variável $conn para ligar à base de dados, o resultado do query é false, logo vazio.

Para evitar o erro deves testar o resultado do query

<?php 

$query = "SELECT * FROM users WHERE email='{$email}'";
// var_dump($query)

$veric = mysqli_query($conn, $query);
	if(!$veric){
        // Quando o resultado do query é false/vazio qual é a acção?
        return false;
    }
// Se tiver um dataset de dados, o mysqli_num_rows vai estar disponivel
    $verifc = mysqli_num_rows($veric);

 

Em todo o caso, podes sempre usar um var_dump/echo/print_r para veres se o email está correto na construção do query como deixei no exemplo em cima

 

O código do "bootstrap.php" é o seguinte;

<?php
require_once("include/banco.php");
?>

E o código do "banco.php" é o seguinte;

<?php
$conn = mysqli_connect('localhost','root','', 'webnerdpt');
?>

 

OBS;

Comecei a pouco a estudar programação em um curso na Hackersec.

Link to comment
Share on other sites

20 horas atrás, Ivo Vicente disse:

Assumindo que o include do bootstrap.php define a variável $conn para ligar à base de dados, o resultado do query é false, logo vazio.

Para evitar o erro deves testar o resultado do query

<?php 

$query = "SELECT * FROM users WHERE email='{$email}'";
// var_dump($query)

$veric = mysqli_query($conn, $query);
	if(!$veric){
        // Quando o resultado do query é false/vazio qual é a acção?
        return false;
    }
// Se tiver um dataset de dados, o mysqli_num_rows vai estar disponivel
    $verifc = mysqli_num_rows($veric);

 

Em todo o caso, podes sempre usar um var_dump/echo/print_r para veres se o email está correto na construção do query como deixei no exemplo em cima

 

Esse código devo adiciona-lo ao ficheiro "registrar.php" que me da o erro?

Em qualquer zona?

Link to comment
Share on other sites

1 hora atrás, Ivo Vicente disse:

Sim, eu usei o teu código como base para a minha sugestão.

Até tem as mesmas variáveis.

Importa ver se o SQL está correto, porque só assim irá continuar o processo

Adicionei o seu código e criei o novo registo.

Desta vez não me mostra nenhuma mensagem de erro, mas ao analisar a tabela de usuários no phpMyAdmin continuo sem o novo usuário.

 

OBS;

Estou a trabalhar com o Xamp.

Link to comment
Share on other sites

Já compreendi.

Então tens que remover o código que adicionei porque assim está com o return a sair do processo não chega o procedimento de gravar.

 

Basta removeres o if de validação da minha sugestão, assim como remover a linha $verifc = mysqli_num_rows($veric);

Porque logo a baixo já estás a fazer a validação para emitirem a notificação.

 

Observação, não sei onde estás a fazer formação, mas é melhor prática os errors serem gravados num array, e mostrados na página como um simples div em vez de encher o utilizador de alertas de JavaScript.

Boa continuação no meio do código 😉

Edited by Ivo Vicente

Feito é melhor que perfeito

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.