Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Evandro de Castro

registro php problema

Recommended Posts

Estou com um problema no meu sistema de registro que qual quer um pode coloca o mesmo login e ele nao avisa que ja esta em uso alguem poderia me da uma força

Esse e o codigo que estou usando.

<?php
$login=$_POST['login'];
$email=$_POST['email'];
$password=$_POST['password'];
$sql = mysql_query("INSERT INTO accounts (login, email, password) VALUES ('$login', '$email', '$password')");
echo "Cadastrado com sucesso!";
session_start();
$_SESSION['email']=$_POST['email'];
$_SESSION['passaword']=$_POST['password'];
$_SESSION['login']=$_POST['login'];

    $login = $_POST['login'];
	$email = $_POST['email'];
	$pwd = $_POST['senha'];

	if(empty($login)){
		echo "<script>alert('Preencha todos os campos para se cadastrar.'); history.back();</script>";
	}elseif(empty($email)){
		echo "<script>alert('Preencha todos os campos para se cadastrar.'); history.back();</script>";
	}elseif(empty($password)){
		echo "<script>alert('Preencha todos os campos para se cadastrar.'); history.back();</script>";
	}else{



			mysql_query("insert into accounts (nome, email, senha) values ('$nome','$email','$pwd')");
			echo "<script>alert('Usuário cadastrado com sucesso.');</script>";
			echo "<meta http-equiv='refresh' content='0, url=./'>";
		}
	}
?>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Evandro de Castro Olá,

você possui alguns erros no seu código..

Basicamente ele não vai funcionar como deveria.

 

Posso começar, dizendo que o session_start() deve sera primeira coisa a ser declarada.

Além disso você está inserindo o dado na tabela sem antes fazer uma verificação se existe e faz duas vezes o mesmo insert.

 

Notei também que não há uma conexão com banco de dados ali.

 

Faça desta forma:

<?php
//Inicia a sessão
session_start();

//Recupera os dados digitados no form
$login    = $_POST['login'];
$email    = $_POST['email'];
$password = $_POST['password'];

//Testa se os campos estão vazios.
if(empty($login) OR empty($email) OR empty($password)):
        echo "
                 <script>
                     alert('Preencha todos os campos para se cadastrar.'); 
                     history.back(-1);
                 </script>    
              ";
      exit;
endif;


//inclue a conexão com o BD
include 'conexao.php';

//consulta SQL baseado no Login e no E-mail
$consulta = mysqli_query($conexao, "SELECT login, email FROM accounts WHERE login = $login OR email = $email ");

//armazena em uma variável o número de registros encontrados
$verifica = mysqli_num_rows($consulta);

//Testa, se o número de registros for maior que zero, indica que já existe um cadastro
if($verifica > 0):
       echo "já existe um usuário com esse login ou com este e-mail";

else:

     //insere os dados na sua tabela
     $insere = mysqli_query($conexao, "INSERT INTO accounts (login, email, password) VALUES ('$login', '$email', '$password')");

     //testa se a inserção foi feita. 
     if($insere):
            echo "Usuário cadastrado com sucesso!";
     else: 
           echo "Oops... houve um erro :( ";
     endif; 
endif;
?>

Basicamente é isso. 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • Postado (editado)

    @DiF

     

     

    Meu sistema esta assim 

    index.php

    <html>
    <head>
    <title>Cadastro!</title>
    <meta charset="UTF-8"/>
    </head>
    <body>
    <body background="background.jpg">
    </br></br>
    </br></br>
    </br></br>
    </br></br>
    </br></br>
    <form method="post" action="cadastrando.php">
    <div align="left"> Login: <input type="text" name="login" maxlength="10" /></br></br>
    Email: <input type="text" name="email" maxlength="15"/></br></br>
    Senha: <input type="text" name="password"/></br></br>
    <input type="submit" value="Cadastrar"/>
    </form>
    </dive>
    </body>
    </html>

    e o meu cadastrando.php

    <?php
    $host="localhost";
    $user="root";
    $senha="";
    $banco="pb";
    error_reporting (E_ALL & ~ E_NOTICE & ~ E_DEPRECATED); $conexão = mysql_connect ($host, $user, $senha, $banco) or die (mysql_error());
    mysql_select_db($banco);
    
    ?>
    
    <html>
    <head>
    <title>Cadastro!</title>
    <meta charset="UTF-8"/>
    </head>
    <body>
    <?php
    $login=$_POST['login'];
    $email=$_POST['email'];
    $password=$_POST['password'];
    $sql = mysql_query("INSERT INTO accounts (login, email, password) VALUES ('$login', '$email', '$password')");
    echo "Cadastrado com sucesso!";
    session_start();
    $_SESSION['email']=$_POST['email'];
    $_SESSION['password']=$_POST['password'];
    $_SESSION['login']=$_POST['login'];
    
    ?>
    </body>
    </html>

    Estou querendo um sistema que pode identificar se ja existe o usuario.

    Editado por Evandro de Castro

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    Postado (editado)

    @Evandro de Castro Então mesma coisa que eu estava falando no post acima

     

    Você está cadastrando, sem antes fazer a verificação se já existe, o session start precisa ser a primeira coisa, mas nesse caso, não precisa da sessão e nem das variáveis de sessão.

     

    Uma dica importante, quanto é só uma inserção no banco de dados ou login,  não mescle com tags do HTML. 

    Nesse caso deixe somente o php.

     

    A conexão do banco de dados, acostume-se a usar um arquivo separado e use a extensão mysqli  com i  no final.

    pois a mysql antiga é obsoleta e logo deixará de funcionar nas futuras versões do php.

     

    Então seus códigos ficam assim:

     

    Seu index:

     

    <html>
    <head>
    <title>Cadastro!</title>
    <meta charset="UTF-8"/>
    </head>
    <body>
    <body background="background.jpg">
    </br></br>
    </br></br>
    </br></br>
    </br></br>
    </br></br>
    <form method="post" action="cadastrando.php">
    <div align="left"> Login: <input type="text" name="login" maxlength="10" /></br></br>
    Email: <input type="text" name="email" maxlength="15"/></br></br>
    Senha: <input type="text" name="password"/></br></br>
    <input type="submit" value="Cadastrar"/>
    </form>
    </dive>
    </body>
    </html>

    seu conexao.php

     

    <?php
       //                         servidor     user senha BD 
       $conexao = mysqli_connect("localhost", "root", "", "pb");
    ?>

    Seu cadastrando.php

     

    <?php
    //Recupera os dados digitados no form
    $login    = $_POST['login'];
    $email    = $_POST['email'];
    $password = $_POST['password'];
    
    //Testa se os campos estão vazios.
    if(empty($login) OR empty($email) OR empty($password)):
            echo "
                     <script>
                         alert('Preencha todos os campos para se cadastrar.'); 
                         history.back(-1);
                     </script>    
                  ";
          exit;
    endif;
    
    
    //inclue a conexão com o BD
    include 'conexao.php';
    
    //consulta SQL baseado no Login e no E-mail
    $consulta = mysqli_query($conexao, "SELECT login, email FROM accounts WHERE login = $login OR email = $email ");
    
    //armazena em uma variável o número de registros encontrados
    $verifica = mysqli_num_rows($consulta);
    
    //Testa, se o número de registros for maior que zero, indica que já existe um cadastro
    if($verifica > 0):
           echo "já existe um usuário com esse login ou com este e-mail";
    
    else:
    
         //insere os dados na sua tabela
         $insere = mysqli_query($conexao, "INSERT INTO accounts (login, email, password) VALUES ('$login', '$email', '$password')");
    
         //testa se a inserção foi feita. 
         if($insere):
                echo "Usuário cadastrado com sucesso!";
         else: 
               echo "Oops... houve um erro :( ";
         endif; 
    endif;
    ?>

    Desta forma você verifica antes se já existe.. se sim dá notificação de que já existe, senão cadastra!

    Editado por DiF
    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Postado (editado)

    @DiF

     

    esta dando esse erro

     

    Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in C:\xampp\htdocs\pointblank\cadastrando.php on line 26
    Oops... houve um erro :(

     

    Somente da esse erro quando vou criar uma conta ele da o erro mais cria a conta mais quando digito uma conta que ja tem ela nao criar mais da esse erro

    Editado por Evandro de Castro

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    Postado (editado)

    @Evandro de Castro Posta aqui o código como fez depois das sugestões.

    Todos meus códigos desta forma funcionam.

    Veja se não escreveu alguma comando errado, algum caractere errado...  a conexão com o banco de dados...  enfim..  no aguardo

     

    PS: vejo que usa o xampp... eu não recomendo ele...  o EasyPHP é bem melhor.

    Editado por DiF

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • @DiF

    Seu codigo esta tudo correto unica coisa é esse erro ele criar conta normal mais quando coloco uma que ja existe ele so da o erro mais nao criar a conta

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    @Evandro de Castro  Faz assim:

     

     Adiciona  o mysqli_error($conexao);  no ELSE

    Assim:

    if($insere):
                echo "Usuário cadastrado com sucesso!";
         else: 
               echo "Oops... houve um erro :( " . mysqli_error($conexao) ;
         endif; 

    Isso faz com que apareça qual é o erro que está gerando.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • @DiF

     

    agora mostro esse erro Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in C:\xampp\htdocs\pointblank\cadastrando.php on line 26
    Oops... houve um erro :( Duplicate entry 'druste' for key 'PRIMARY

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    1 minuto atrás, Evandro de Castro disse:

    Oops... houve um erro :( Duplicate entry 'druste' for key 'PRIMARY

    Este erro, é proveniente da modelagem errada da tabela.  Você deixou a chave primária como auto increment?

     

    Já o erro de mysqli_num_rows pode ser que sua Instrução SQL esteja retornando False.  Pode haver algum erro de sintaxe ou nome de campo ou tabela errado.

     

     

     

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Postado (editado)

    @DiF

    olha essa é minha estrutura das tabelas estou querendo criar um sistema de cadastro ate ai deu tudo certo mais as pessoas consegue criar conta com mesmo nome colocar texto sem nada.

    http://pokegold.servegame.com/database.png

    adicionado 7 minutos depois

    @DiF  você poderia me da uma força para ver onde esta esse erro que você menciono.

    Editado por DiF
    Remover menção de servidor pirata

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    Postado (editado)

    @Evandro de Castro Pelo que eu vi, você deixou a chave primária como o login do tipo varchar.

     

    Este é o problema. Por isso que ele acusa Duplicate entry 'druste' for key 'PRIMARY.

     

    Faça o seguinte, primeiro dê um truncate na sua tabela para zerar ela toda.

    Para fazer isso, no phpmyadmin mesmo, clica na aba SQL e faça:

     

    TRUNCATE accounts

     e execute.   Depois que zerar a tabela,  você edita o campo login e retira  a chave primária dele. 

     

    Crie um novo campo em cima de login com o nome de ID  do tipo INT   tamanho 11 e defina ele para que seja  "AI" Auto increment.

     

    Ou seja, a cada registro, incrementará o valor do campo ID em 1. Se não der certo desta forma,  recomendo dar um DROP na tabela,  refazer ela de novo,  criando o campo ID do tipo INT com auto increment.

     

    Editado por DiF

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Postado (editado)

    @Dif

     

    Esse codigo esta pegando certinho.

    <?php
    require_once "config.php";
    ?><html>
    <head>
    	<meta http-equiv="Content-Type" content="text/html, charset=utf-8">
    	<title>VIDEO - CADASTRO COM PHP</title>
    	<link rel="stylesheet" type="text/css" href="style.css">
    </head>
    <body>
    
    
    <div id="cadastro">
    	<form method="post" action="?go=cadastrar">
    		<table id="cad_table">
    			<tr>
    				<td>Nome:</td>
    				<td><input type="text" name="login" id="login" class="txt" /></td>
    			</tr>
    			<tr>
    				<td>Email:</td>
    				<td><input type="text" name="email" id="email" class="txt" /></td>
    			</tr>
    			<tr>
    				<td>Usuário:</td>
    				<td><input type="text" name="player_name" id="player_name" class="txt" maxlength="15" /></td>
    			</tr>
    			<tr>
    				<td>Senha:</td>
    				<td><input type="password" name="password" id="password" class="txt" maxlength="15" /></td>
    			</tr>
    			<tr>
    				<td colspan="2"><input type="submit" value="Cadastrar" id="btnCad"> 
    				&nbsp;
    				<a href="./">
    					<input type="button" value="Cancelar" class="btn" id="btnCancelar">
    				</a>
    			</td>
    			</tr>	
    		</table>
    	</form>
    </div>
    
    </body>
    </html>
    
    <?php
    if(@$_GET['go'] == 'cadastrar'){
    	$nome = $_POST['login'];
    	$email = $_POST['email'];
    	$user = $_POST['player_name'];
    	$pwd = $_POST['password'];
    
    	if(empty($nome)){
    		echo "<script>alert('Preencha todos os campos para se cadastrar.'); history.back();</script>";
    	}elseif(empty($email)){
    		echo "<script>alert('Preencha todos os campos para se cadastrar.'); history.back();</script>";
    	}elseif(empty($user)){
    		echo "<script>alert('Preencha todos os campos para se cadastrar.'); history.back();</script>";
    	}elseif(empty($pwd)){
    		echo "<script>alert('Preencha todos os campos para se cadastrar.'); history.back();</script>";
    	}else{
    		$query1 = mysql_num_rows(mysql_query("SELECT accounts FROM login WHERE login = '$user'"));
    		if($query1 == 1){
    			echo "<script>alert('Usuário já existe.'); history.back();</script>"; 
    		}else{
    			mysql_query("insert into accounts (login, email, player_name, password) values ('$login','$email','$user','$pwd')");
    			echo "<script>alert('Usuário cadastrado com sucesso.');</script>";
    			echo "<meta http-equiv='refresh' content='0, url=./'>";
    		}
    	}
    }

    @DiF unica problema que naoa visa que ja tem usuario com mesmo login, e nome.

    Editado por Evandro de Castro

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    @Evandro de Castro  A solução está no meu post #04.

     

    Na qual eu explico que o seu erro está em cadastrar ANTES de fazer uma verificação de dados existentes e ainda mostro como é o código.

     

    Recomendo que re-leia atentamente e veja o código que até comentado está. Seguindo as dicas ali você vai solucionar o problema de não deixar cadastrar o mesmo nome e/ou o mesmo e-mail.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário






    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

    Direitos autorais

    Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

    ×