Jump to content

Recommended Posts

Posted

Uma forma básica de fazer isso, embora não 100% fiável (no caso de pedidos concorrentes), resume-se a antes de inserires o valor na base de dados verificares se o valor já existe.  Isto é um algoritmo extremamente simples, pelo que se não sabias fazer sequer isto, era capaz de ser boa ideia abandonares a programação web por uns tempos, e focares-te em aprender o básico de algoritmos.

Voltando à questão do tópico, a forma mais fiável de resolveres o teu problema é impedires a introdução de emails duplicados directamente na base de dados, através da restrição UNIQUE, suportada pela generalidade das bases de dados.

  • Vote 1
Posted

Já deu era só fazer essa modificação básica no phpmyadmin, muito obrigado e desculpe a ignorância. Eu fiz este site na escola com ajuda de um professor mas agora já acabei a escola e não tenho mais ajuda dele e queria colocar online para ajudar os outros.

Posted

Só mais uma coisinha que deve ser fácil mas eu nao percebo muito disto. Eu já coloquei o UNIQUE mas eu queria que aparecesse uma mensagem de erro ("Email já existe! Escolha outro.") na página como estas que estão em vermelho debaixo do email. http://prnt.sc/coqce0

Código Página de Inscrição:

<?php 
    if ($_SERVER['REQUEST_METHOD'] == 'POST')
    {
        $Validacao = True;

        // Verificar que os campos obrigatórios estão preenchidos

        // Campo Nome
        if (empty($_POST['Nome']))
        {
            $ErroNome = "<strong>Preenchimento obrigatório</strong>";
            $Validacao = False;
        }

        // Campo Email
        if (empty($_POST['Email']))
        {
            $ErroEmail = "<strong>Preenchimento obrigatório</strong>";
            $Validacao = False;
        }

        // Campo Password
        if (empty($_POST['Password']))
        {
            $ErroPassword = "<strong>Preenchimento obrigatório</strong>";
            $Validacao = False;
        }

        // Confirmar a Password
        if (empty($_POST['Confirmar_Password']))
        {
            $ErroConfirmar_Password = "Preenchimento obrigatório";
            $Validacao = False;
        }
   
        if ($_POST['Password'] != $_POST['Confirmar_Password'])
        {
            $ErroConfirmar_Password = "<strong>Password deve ser igual</strong>";
            $Validacao = False;
        }
            
            
        // Atribuir os dados do formulário a um array e, ao mesmo tempo, retirar carateres perigosos            
        $utilizador = array('Nome' => strip_tags(trim($_POST['Nome'])),
                            'Email' => strip_tags(trim($_POST['Email'])), 
                            'Password' => strip_tags(trim($_POST['Password'])));
        
        // Se não ocorreram erros de validação, criar o novo utilizador
        if ($Validacao)
        {
            if (UserManager::CriarUtilizador($utilizador))
            {
                // Redirecionar para a página inicial
                header('Location: Obrigado.php');
            }
            else
            {
                echo "<div class='alert alert-danger' role='alert'><span class='glyphicon glyphicon-remove'></span> <strong>Ocorreu um erro ao tentar criar o novo utilizador!</strong></div>";
            }
        }
    }
?>
    
<div class="container">
    <h1><strong><font color="#FFFFFF">Inscrição</font></strong></h1>
</div>
    
<br />
    
   <div class="container">
    <form name="DadosUtilizador" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST" class="form-horizontal" role="form">
        <!-- Nome (campo obrigatório) -->
        <div class="form-group <?php if (!empty($ErroNome)) { ?>has-error<?php } ?>">
            <label for="Nome" class="col-sm-2 control-label"><font color="#FFFFFF">Nome</font> <span style='color:#ff0000'>*</span></label>
            <div class="col-sm-10">
                <input type="text" name="Nome" value="<?php if (!empty($_POST['Nome'])) echo $_POST['Nome']; ?>" maxlength="50" class="form-control" placeholder="Nome" autofocus />
                  
                <?php if (!empty($ErroNome)) { ?>
                    <span class="help-block small" style="color:#ff0000"><?php echo $ErroNome; ?></span>
                <?php } ?>
            </div>
        </div>

        <!-- Email (campo obrigatório) -->
        <div class="form-group <?php if (!empty($ErroEmail)) { ?>has-error<?php } ?>">
            <label for="Email" class="col-sm-2 control-label"><font color="#FFFFFF">Email</font> <span style='color:#ff0000'>*</span></label>
            <div class="col-sm-10">
                <input type="text" name="Email" value="<?php if (!empty($_POST['Email'])) echo $_POST['Email']; ?>" maxlength="100" class="form-control" placeholder="Email" />
                    
                <?php if (!empty($ErroEmail)) { ?>
                    <span class="help-block small" style="color:#ff0000"><?php echo $ErroEmail; ?></span>
                <?php } ?>
            </div>
        </div>
            
        <!-- Password (campo obrigatório) -->
        <div class="form-group <?php if (!empty($ErroPassword)) { ?>has-error<?php } ?>">
            <label for="Password" class="col-sm-2 control-label"><font color="#FFFFFF">Password</font> <span style='color:#ff0000'>*</span></label>
            <div class="col-sm-10">
                <input type="password" name="Password" value="<?php if (!empty($_POST['Password'])) echo $_POST['Password']; ?>" maxlength="100" class="form-control" placeholder="Password" />

                <?php if (!empty($ErroPassword)) { ?>
                    <span class="help-block small" style="color:#ff0000"><?php echo $ErroPassword; ?></span>
                <?php } ?>
            </div>
        </div>
            
        <!-- Confirmar Password (campo obrigatório) -->
        <div class="form-group <?php if (!empty($ErroConfirmar_Password)) { ?>has-error<?php } ?>">
            <label for="Confirmar_Password" class="col-sm-2 control-label"><font color="#FFFFFF">Confirmar Password</font> <span style='color:#ff0000'>*</span></label>
            <div class="col-sm-10">
                <input type="password" name="Confirmar_Password" value="<?php if (!empty($_POST['Confirmar_Password'])) echo $_POST['Confirmar_Password']; ?>" maxlength="100" class="form-control" placeholder="Confirmar Password" />

                <?php if (!empty($ErroConfirmar_Password)) { ?>
                    <span class="help-block small" style="color:#ff0000"><?php echo $ErroConfirmar_Password; ?></span>
                <?php } ?>
            </div>
        </div>

        <div class="form-group">
            <div class="col-sm-offset-2 col-sm-10">
                <p class="small"><strong><font color="#FFFFFF">Campos assinalados com</font> <span style='color:#ff0000'>*</span> <font color="#FFFFFF">são obrigatórios</font></strong></p>
                <button type="submit" class="btn btn-success">Criar</button>
                <a class="btn btn-danger" href="index.php">Cancelar</a>
            </div>
        </div>
    </form>
</div>

Código UserManager:

public static function CriarUtilizador($utilizador)
{
    $hash = "";

    // Inicializar uma variável que sinaliza o sucesso ou insucesso da operação
    $sucesso = False;

    // Criar a ligação
    $mysqli = new mysqli(self::    $DB_Server, self::$DB_User, self::$DB_Password, self::$DB_Name);

    // Verificar se a ligação foi efetuada com sucesso
    if (!$mysqli->connect_error)
    {
        /* IMPORTANTE:
        Antes de interagir com a base de dados, estabelecer o character set.
        */
        $mysqli->set_charset("utf8");

        // Preparar a query
        if ($stmt = $mysqli->prepare("INSERT INTO utilizador (Nome, Email, Password) VALUES (?, ?, ?)"))
        {
            // Codificar a password
            $hash = password_hash($utilizador['Password'], PASSWORD_DEFAULT);

            $stmt->bind_param('sss', $utilizador['Nome'], $utilizador['Email'],$hash);

            // Executar a query e verificar que não retornou FALSE
            if ($stmt->execute())
            {
                // A operação foi executada com sucesso
                $sucesso = True;
            }

            $stmt->close();
        }

        // Terminar a ligação
        $mysqli->close();
    }

    return $sucesso;
}

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.