faguinho 0 Denunciar post Postado Junho 18, 2015 Pessoal, precisando de mais uma ajuda. Estou gerando um código na minha base, onde quero que, se existe algum dado na minha tabela, ele retorna a mensagem que o item já foi assinado por $nome, caso não exista nada gravado, ele retorna com a execução do update e em seguida a mensagem que o item foi assinado com sucesso. O código funciona, porém mesmo existindo um nome já cadastrado na tabela, ele diz que o item já está assinado por $nome, porém ainda sim executa o update. Como eu posso consertar isso? Segue código. $sql = "select id, lista from chadoarthur where id='$id' and lista='$lista'"; $update = "UPDATE chadoarthur SET lista='$lista' WHERE id='$id'"; $updating = mysql_query($update); $resultado = mysql_query($sql); if (mysql_num_rows($resultado) > 0){ echo "<script> alert('Item já assinado por $nome'); location= './index2.php'; </script>"; } else { echo "$updating"; echo "<script> alert('Item assinado com sucesso!'); location= './index2.php'; </script>"; } Compartilhar este post Link para o post Compartilhar em outros sites
Marcelo Lipienski 9 Denunciar post Postado Junho 18, 2015 Claro, ele faz exatamente o que seu código manda. Para atualizar apenas se não existir, mova seu $updating = mysql_query($update); para dentro do else Compartilhar este post Link para o post Compartilhar em outros sites
faguinho 0 Denunciar post Postado Junho 18, 2015 Marcelo, Mesmo mudando o $updating para dentro do else, ele continua atualizando a tabela mesmo já tendo dados gravados. Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Junho 18, 2015 Sua lógica não tem sentido Se a tabela estiver vazia, não há o que atualizar. Você precisa inserir um dado antes de atualizá-lo. Reveja a sua lógica. PS: funções mysql_* estão obsoletas desde o PHP 5.5 e serão removidas do PHP em breve. Prefira usar MySQLi ou PDO. Veja mais aqui: http://www.ultimatephp.com.br/php-por-que-nao-utilizar-funcoes-mysql Compartilhar este post Link para o post Compartilhar em outros sites
faguinho 0 Denunciar post Postado Junho 18, 2015 Beraldo, Mas é isso que eu quero mesmo, quando estiver um dado já preenchido na tabela, ele só da a mensagem de alerta e não tem que fazer mais nada, a não ser redirecionar para a página index2.php. Porém, mesmo a tabela estando com um dado já gravado, ele ta rodando o update fazendo com que o dado que já existia, seja perdido e atualizado pelo dado novo. Veja como funciona no meu link. www.chadoarthur.com/index2.php Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Junho 18, 2015 Beraldo, Mas é isso que eu quero mesmo, quando estiver um dado já preenchido na tabela, ele só da a mensagem de alerta e não tem que fazer mais nada, a não ser redirecionar para a página index2.php. É que seu texto diz uma coisa e o código faz outra. Aí ficou confuso... Você está executando o UPDATE fora do if: $updating = mysql_query($update); essa linha deve estar dentro do if, não apenas um echo em $updating Compartilhar este post Link para o post Compartilhar em outros sites
faguinho 0 Denunciar post Postado Junho 18, 2015 hehehe, desculpe a confusão. Coloquei dentro do if também, e não funciona, continua atualizando mesmo já tendo algo gravado na base. Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Junho 18, 2015 mostre como ficou seu código. Você deve ter colocado no lugar errado ou sua query possui algum erro Compartilhar este post Link para o post Compartilhar em outros sites
faguinho 0 Denunciar post Postado Junho 18, 2015 $sql = "select id, lista from chadoarthur where id='$id' and lista='$lista'"; $update = "UPDATE chadoarthur SET lista='$lista' WHERE id='$id'"; $resultado = mysql_query($sql); if (mysql_num_rows($resultado) > 0){ $updating = mysql_query($update); echo "<script> alert('Item já assinado por $nome'); location= './index2.php'; </script>"; } else { echo "$updating"; echo "<script> alert('Item assinado com sucesso!'); location= './index2.php'; </script>"; } Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Junho 18, 2015 Eu ainda não entendi exatamente o que você quer fazer. No começo você disse que queria atualizar, depois disse que só deveria redirecionar... Se quiser apenas redirecionar, remova esta linha de dentro do if: $updating = mysql_query($update); mas no else não tem registro pra atualizar, então não tem como dar update lá. Acho que você não está conseguindo se expressar direito. Quando a tabela deve ser atualizada? E com quais dados? Compartilhar este post Link para o post Compartilhar em outros sites
faguinho 0 Denunciar post Postado Junho 18, 2015 No if ele não deve atualizar. No else ele deve atualizar. Eu quero que quando a tabela lista estiver preenchida com qualquer dado, ele execute o if e pare por ai mesmo. Com isso ele não atualiza nada. Apenas mostra a mensagem que a lista já está assinada $nome. Mas se a tabela lista não tiver nenhum tipo de dado, ele deve passar pelo else e rodar o update e em seguida mostrar a mensagem que a lista foi assinada com sucesso. A variavel que chama o update no else é o $updating. Entendeu mais ou menos? Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Junho 18, 2015 Aí volta no problema que eu citei no começo. Se não há dados, não há o que atualizar. Você deve executar um INSERT, não um UPDATE. INSERT insere registros. UPDATE atualiza registros que já existam. Acho que sua confusão não é com PHP, é com SQL. Você está usando o comando SQL errado Compartilhar este post Link para o post Compartilhar em outros sites
faguinho 0 Denunciar post Postado Junho 18, 2015 Entendi Beraldo. Porém independente de ser update ou insert, ele não deveria executar o else, se o if for verdadeiro. Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Junho 18, 2015 Porém independente de ser update ou insert, ele não deveria executar o else, se o if for verdadeiro. Sim, e não está executando. O UPDATE foi feito até agora pois antes ele estava fora do if e agora está no bloco do if. Se mover pro else, funcionará corretamente. Compartilhar este post Link para o post Compartilhar em outros sites
faguinho 0 Denunciar post Postado Junho 18, 2015 É, mesmo colocando no else não funciona. Vou pesquisar um outro jeito de validar o campo na tabela. Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Junho 18, 2015 O que você colocou no else? Compartilhar este post Link para o post Compartilhar em outros sites
faguinho 0 Denunciar post Postado Junho 18, 2015 $sql = "select id, lista from chadoarthur where id='$id' and lista='$lista'"; $update = "UPDATE chadoarthur SET lista='$lista' WHERE id='$id'"; $resultado = mysql_query($sql); if (mysql_num_rows($resultado) > 0){ echo "<script> alert('Item já assinado por $nome'); location= './index2.php'; </script>"; } else { $updating = mysql_query($update); echo "$updating"; echo "<script> alert('Item assinado com sucesso!'); location= './index2.php'; </script>"; } Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Junho 18, 2015 Como eu já disse, nunca vai funcionar um UPDATE se não há registros na tabela. Tem que usar INSERT Estude este artigo Compartilhar este post Link para o post Compartilhar em outros sites
faguinho 0 Denunciar post Postado Junho 18, 2015 Baralto, O que estou tentando explicar é que, o update já funciona. Isso não é meu problema. O que não funciona é a condição do if. Se o if for verdadeiro (if (mysql_num_rows($resultado) > 0)) ele deve executar o if e parar por ali, só que ao invés disso, ele executa o if e também ta executando o else. O else só pode ser executado se o if não for verdadeiro. Compartilhar este post Link para o post Compartilhar em outros sites
Marcelo Lipienski 9 Denunciar post Postado Junho 18, 2015 Baralto, O que estou tentando explicar é que, o update já funciona. Isso não é meu problema. O que não funciona é a condição do if. Se o if for verdadeiro (if (mysql_num_rows($resultado) > 0)) ele deve executar o if e parar por ali, só que ao invés disso, ele executa o if e também ta executando o else. O else só pode ser executado se o if não for verdadeiro. A construção da linguagem torna impossível que isso aconteça, if e else são mutuamente exclusivos. Compartilhar este post Link para o post Compartilhar em outros sites