Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

nbm

[Resolvido] Cadastro Duplicado

Recommended Posts

Olá amigos,estou com um problema no meu código , eu tentei fazer um codigo que impedia a pessoa de criar 2 contas com msm usuario , mas nao deu certo e quando a pessoa faz o cadastro aparece duas contas iguais no BD .

 

Segue abaixo o código

 

<?php

ob_start();

if (!function_exists("GetSQLValueString")) {

function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")

{

if (PHP_VERSION < 6) {

$theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;

}

 

$theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

 

switch ($theType) {

case "text":

$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";

break;

case "long":

case "int":

$theValue = ($theValue != "") ? intval($theValue) : "NULL";

break;

case "double":

$theValue = ($theValue != "") ? doubleval($theValue) : "NULL";

break;

case "date":

$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";

break;

case "defined":

$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;

break;

}

return $theValue;

}

}

 

$editFormAction = $_SERVER['PHP_SELF'];

if (isset($_SERVER['QUERY_STRING'])) {

$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);

}

// inserir cadastro inicio

 

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {

 

//evitar cadastro duplicado

$insertSQL = mysql_query("SELECT * FROM usuario WHERE usuario = '".$_POST['usuario']."'");

if(mysql_num_rows($insertSQL)>=1){

echo "<meta http-equiv='refresh' content='0;URL=cadastro_usu.php'>

<script type=\"text/javascript\">

alert(\"Este nome de usuário ja esta cadastrado!\");

</script>";

}

else

{

$insertSQL = sprintf("INSERT INTO usuario (usuario, email, senha, assinatura) VALUES (%s, %s, %s, %s)",

GetSQLValueString($_POST['usuario'], "text"),

GetSQLValueString($_POST['email'], "text"),

GetSQLValueString($_POST['senha'], "text"),

GetSQLValueString(isset($_POST['assinatura']) ? "true" : "", "defined","'Y'","'N'"));

 

mysql_select_db($database_f, $f);

$Result1 = mysql_query($insertSQL, $f) or die(mysql_error());

 

$insertGoTo="logar.php";

if (isset($_SERVER['QUERY_STRING'])) {

$insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";

$insertGoTo .= $_SERVER['QUERY_STRING'];

}

header(sprintf("Location: %s", $insertGoTo));

}

}

//inserir cadastro final

 

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {

$insertSQL = sprintf("INSERT INTO usuario (usuario, email, senha, assinatura) VALUES (%s, %s, %s, %s)",

GetSQLValueString($_POST['usuario'], "text"),

GetSQLValueString($_POST['email'], "text"),

GetSQLValueString($_POST['senha'], "text"),

GetSQLValueString(isset($_POST['assinatura']) ? "true" : "", "defined","'Y'","'N'"));

 

mysql_select_db($database_f, $f);

$Result1 = mysql_query($insertSQL, $f) or die(mysql_error());

}

 

mysql_select_db($database_f, $f);

$query_usuario = "SELECT * FROM usuario";

$usuario = mysql_query($query_usuario, $f) or die(mysql_error());

$row_usuario = mysql_fetch_assoc($usuario);

$totalRows_usuario = mysql_num_rows($usuario);

?>

 

 

 

 

Espero que possam me ajudar .

Compartilhar este post


Link para o post
Compartilhar em outros sites

isso consta em algo simples, você deve antes de fazer o cadastro buscar no seu banco de dados se o dado existe seja de Email, CPF ou qualquer outra coisa se for TRUE já existe e não cadastra.

 

e segunda coisa é colocar os campos do banco de dados uniq, mesmo que seu sistema falhe a sua sql não deixa repetir os dados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Além do que o Vinícus falou você também pode criar um index no banco dados para o campo que você não quer que se repita. coloque-o como unique.

T+

Compartilhar este post


Link para o post
Compartilhar em outros sites

isso consta em algo simples, você deve antes de fazer o cadastro buscar no seu banco de dados se o dado existe seja de Email, CPF ou qualquer outra coisa se for TRUE já existe e não cadastra.

 

e segunda coisa é colocar os campos do banco de dados uniq, mesmo que seu sistema falhe a sua sql não deixa repetir os dados.

 

fiz isso e deu certo a parte do BD mas agora aparece o seguinte erro :

 

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in cadastro_usu.php on line 46

Duplicate entry 'gabriel' for key 'usuario'

 

como eu faço pra invez desse erro ele falar que o usuario ja existe ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Excepction - try catch - Throw , Essas funções vai te ajudar Dá uma pesquisada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

poste seu novo code que agora já ficou mais fácil ajudar

 

 

o code ta o mesmo do primeiro post eu so coloquei o unique dai apareceu o seguinte erro .

 

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/jose/public_html/cadastro_usu.php on line 46
Duplicate entry 'gabriel' for key 'usuario'

Compartilhar este post


Link para o post
Compartilhar em outros sites

$insertSQL = mysql_query("SELECT * FROM usuario WHERE usuario = '$_POST['usuario']'");
if(mysql_num_rows($insertSQL)>= 1){
echo "<script type=\"text/javascript\">
alert(\"Este nome de usuário ja esta cadastrado!\");
</script>";
echo "<meta http-equiv='refresh' content='0;URL=cadastro_usu.php'>";
}

 

tente isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

tente ser um pouco mais preciso nas informações, não foi por que?

o mesmo erro? ou algo diferente?

 

 

o mesmo erro .

Compartilhar este post


Link para o post
Compartilhar em outros sites

//evitar cadastro duplicado
$insertSQL = mysql_query("SELECT * FROM usuario WHERE usuario = '".$_POST['usuario']."'");
if(mysql_num_rows($insertSQL)>= 1){
echo "<script type=\"text/javascript\">
alert(\"Este nome de usuário ja esta cadastrado!\");
</script>";
echo "<meta http-equiv='refresh' content='0;URL=cadastro_usu.php'>";
}

 

ficou assim mais continua dando o mesmo erro .

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/jose/public_html/cadastro_usu.php on line 46
Duplicate entry 'gabriel' for key 'usuario'

 

eu tava vendo aqui o erro ta na linha 46 que é a seguinte:

 if(mysql_num_rows($insertSQL)>= 1){ 

Compartilhar este post


Link para o post
Compartilhar em outros sites

agora entendi, desculpe deixei passar algo.

ele acusa o erro no num_rows mais o erro é justamente em cima

 

$insertSQL = mysql_query("SELECT * FROM usuario WHERE usuario = '".$_POST['usuario']."'");

 

ele não executa essa consulta com sucesso pois como o campo esta unique ele retorna o erro.

 

a dica do Daniel Moraes é muito bem vinda: trabalhe com try catch.

 

http://php.net/manual/pt_BR/language.exceptions.php

 

você vai conseguir manipular esse erro e mostrar o que precisa mais é necessário um pouco de estudo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Da um die nessa parte

$insertSQL = mysql_query("SELECT * FROM usuario WHERE usuario = '$_POST['usuario']'");
if(mysql_num_rows($insertSQL)>= 1){
echo "<script type=\"text/javascript\">
alert(\"Este nome de usuário ja esta cadastrado!\");
</script>";
echo "<meta http-equiv='refresh' content='0;URL=cadastro_usu.php'>";
}

E Deixa assim

$insertSQL = mysql_query("SELECT * FROM usuario WHERE usuario = '$_POST['usuario']'");
if(mysql_num_rows($insertSQL)>= 1){
echo "<script type=\"text/javascript\">
alert(\"Este nome de usuário ja esta cadastrado!\");
</script>";
echo "<meta http-equiv='refresh' content='0;URL=cadastro_usu.php'>";
die();
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Da um die nessa parte

$insertSQL = mysql_query("SELECT * FROM usuario WHERE usuario = '$_POST['usuario']'");
if(mysql_num_rows($insertSQL)>= 1){
echo "<script type=\"text/javascript\">
alert(\"Este nome de usuário ja esta cadastrado!\");
</script>";
echo "<meta http-equiv='refresh' content='0;URL=cadastro_usu.php'>";
}

E Deixa assim

$insertSQL = mysql_query("SELECT * FROM usuario WHERE usuario = '$_POST['usuario']'");
if(mysql_num_rows($insertSQL)>= 1){
echo "<script type=\"text/javascript\">
alert(\"Este nome de usuário ja esta cadastrado!\");
</script>";
echo "<meta http-equiv='refresh' content='0;URL=cadastro_usu.php'>";
die();
}

 

 

consegui cara , valeeeu mesmo .

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.