Ir para conteúdo

Arquivado

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

Bobrinha

[Resolvido] Insert se existir faz update se não faz insert c

Recommended Posts

Olá eu tenho uma tabela aqui com 2 colunas login e creditos login varchar e creditos int bom como faço para fazer um update apenas se não tiver insert e se tiver o login ja no db fazer apenas o update dos creditos no login dele exemplo

 

to cadastrado no db meu login é bobrinha e tenho 2 creditos bom como eu ja to cadastrado então quero fazer um update no db nos creditos se eu não tivesse cadastrado ai fazia update mais se eu ainda não tiver cadastrado faz insert

 

espero que me ajudem desde ja obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

to pensando aki acho que seria melhor se voce fizesse assim

faz um select nas tabelas

e ve se existe com o mysql_num_rows

aki entra o if e else

se achar algum registro faz o update

se nao achar faz o insert vou tentar fazer um exemplo aki pra voce

 

$nome = $_POST['nome'];
$procura = mysql_query("select * from admin where 'login' = '$nome'");
$contar = mysql_num_rows($procura);
if($contar > 0){
//aki faz o update
$update = mysql_query("update admin set 'login' = '$login'");
if($update == true){
echo "Ja existia registro por tanto foi feito update"
}
}else{
//aki faz o insert
$inserir = mysql_query("insert into admin('login') values('$nome')");
if($inserir == true){
echo "Nao existe registro entao foi criado um com o seguinte nome ".$nome."";
}
}



acho que foi só uma ideia o resto voce vai fazendo ai pra ver o que sai

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem como o CrY falou, usando o mysql_num_rows ele vai retornar o número de linhas que foi encontrado, se o valor for "0" quer dizer que não existe nenhum registro, agora se o valor foi maior que 0, quer dizer que foi encontrado algum registro.

 

Espero ter ajudado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desnecessário fazer 3 consultas (select, insert ou update) para isso.

 

Fazer o ON DUPLICATE KEY UPDATE é simples e ainda você trocará 16 linhas de código por 1.

 

Coloca o campo login da sua tabela como primary key.

 

No phpmyadmin isso é bem simples de fazer isso, na parte onde você pode editar o tipo do campo (varchar, text e etc) terão diversos icones.

 

Um deles será este: b_primary.png?part=7&thumb=1

 

Só clicar no icone da linha referente ao nome de usuário.

 

Fazendo isso ele irá desmarcar o campo id como primario e adicionar o login, com isso você orientará o MySQL de que aquele campo é o primário e não pode ter nenhum valor repetido naquele campo.

 

Feito isso só você fazer esta única query.

 

$sql = mysql_query("INSERT INTO admin(login,senha,credito,dataCadastro) values('$login','$senha',0,NOW()) ON DUPLICATE KEY UPDATE credito=credito+'$credito'") or die (mysql_error());

 

Com isso estou falando para inserir na tabela admin o login, senha, credito (zerado) e a data de cadastro, mas caso tenha uma chave duplicada (neste caso o campo login) ele irá atualizar o valor de credito pegando o valor atual somando com o valor passado pela variavel $credito.

 

^_^

Compartilhar este post


Link para o post
Compartilhar em outros sites

nunca tentei mais se o cara ai de cima falou ta falado

nunca estudei esse comando que ele ta falando

vou pesquisar mais sobre isso vlw ai obrigado

vivendo e aprendendo xD

living and learning

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nícolas

 

Creio que sua sugestão seja muito bem feita e realmente economizaria muito trabalho porem meu banco de dados é MSSQL e a função ON DUPLICATE KEY UPDATE não funciona ou eu não sei como fazer funcionar.

 

eu tentei com if e else mais não da certo a pagina fica em branco apos o envio dos dados pelo formulario veja codigo

 

formulario

<form name="form1" method="post" action="cadastro_creditos_feito.php">
<input name="login" type="text" id="login" size="10" maxlength="10">
<input name="credito" type="text" id="credito" size="10" maxlength="4">
<input type="submit" name="button" id="button" value="Cadastrar">
</form>

 

<?php
include("../configuracao.php");

include("includes/anti_injection.php");

$login = anti_injection($_POST['login']);
$creditos = anti_injection($_POST['credito']);

if (empty($login) || empty($creditos)) {
echo("<font color='#FF0000'>Por favor preencha os campos...<br><br>");
echo("Redirecionando...");
echo '<meta http-equiv="refresh" content="3; url=cadastro_creditos.php">';
}
else{

//Checando o login
$sql_login_check = mssql_query("SELECT memb___id FROM MEMB_INFO WHERE memb___id='$login'"); 
$username_check = mssql_num_rows($sql_login_check); 

if ($username_check <= 0)

{ 
       echo "<font color='#FF0000'>O Login digitado esta incorreto ou nao existe</font><br>"; 
       echo("Redirecionando...");
    echo '<meta http-equiv="refresh" content="3; url=cadastro_creditos.php">';
}
$procura = mssql_query("select memb___id,credits FROM MEMB_CREDITS WHERE memb___id='$login'");
$contar = mssql_num_rows($procura);
if($contar > 0){
//aki faz o update
$update = mssql_query("UPDATE MEMB_CREDITS SET credits=(credits + $creditos) WHERE memb___id='$login'");
if($update){
echo("Cadastro realizado com sucesso...<br><br>");
echo("Redirecionando...");
echo '<meta http-equiv="refresh" content="3; url=cash.php">';
}
}
else{
$atualiza = mssql_query("UPDATE MEMB_CREDITS SET credits=(credits + $creditos) WHERE memb___id='$login'");
if ($sql) {
echo("Cadastro realizado com sucesso...<br><br>");
echo("Redirecionando...");
echo '<meta http-equiv="refresh" content="3; url=cash.php">';
}
}
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

incrível como as pessoas vêm ao fórum pedir ajuda e quando conseguem não deixam o resultado postado, isso acarreta tópico duplicado.

 

Faltou postar o resultado da solução.

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.