Ir ao conteúdo
  • Cadastre-se

registro php problema


Posts recomendados

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=./'>";
		}
	}
?>

 

Link para o comentário
Compartilhar em outros sites

  • Moderador

@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
Link para o comentário
Compartilhar em outros sites

@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.

Link para o comentário
Compartilhar em outros sites

  • Moderador

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

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@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

Link para o comentário
Compartilhar em outros sites

  • Moderador

@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.

Link para o comentário
Compartilhar em outros sites

  • Moderador
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.

 

 

 

Link para o comentário
Compartilhar em outros sites

@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.

Link para o comentário
Compartilhar em outros sites

  • Moderador

@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.

 

Link para o comentário
Compartilhar em outros sites

@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.

Link para o comentário
Compartilhar em outros sites

  • Moderador

@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.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...