Joao Domingues Posted September 30, 2016 at 03:45 PM Report #599252 Posted September 30, 2016 at 03:45 PM Boa tarde, tenho um formulário de inscrição que tem o campo email mas ele deixa criar contas com o mesmo email e não devia deixar. Gostava que alguém me ajudasse.
Rui Carlos Posted September 30, 2016 at 08:55 PM Report #599258 Posted September 30, 2016 at 08:55 PM Implementaste alguma validação para que não fosse possível criar contas com o mesmo email? Rui Carlos Gonçalves
Joao Domingues Posted October 1, 2016 at 02:46 AM Author Report #599262 Posted October 1, 2016 at 02:46 AM Não porque eu não sei fazer isso, foi por isso que procurei ajuda.
Rui Carlos Posted October 1, 2016 at 03:44 PM Report #599267 Posted October 1, 2016 at 03:44 PM 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. 1 Report Rui Carlos Gonçalves
Joao Domingues Posted October 1, 2016 at 10:34 PM Author Report #599298 Posted October 1, 2016 at 10:34 PM Obrigado pela ajuda, vou tentar fazer isso.
Joao Domingues Posted October 1, 2016 at 10:50 PM Author Report #599299 Posted October 1, 2016 at 10:50 PM 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.
Joao Domingues Posted October 1, 2016 at 11:55 PM Author Report #599301 Posted October 1, 2016 at 11:55 PM 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; }
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now