Daniel A 0 Denunciar post Postado Fevereiro 16, 2016 Boa tarde a todos .... fiz um curso de PHP e estou começando agora , e logo de cara pegeui uma buxa .... preciso desenvolver um sistema onde tenho uma tabela no sql na qual existe um indice de 5 digitos e uma sequencia numerica de 10 numeros de dois digitos . o cadastro é facil .... o que não consegui fazer foi .... a sequência dos 10 numeros não pode se repetir ..... aí esta o problema ... não faço idéia de como montar a estrutura onde que ao cadastrar a sequencia o sistema verifique a tabela e se ja houver a sequencia ele não cadastra .... indice p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 12345 01 02 03 04 05 06 07 08 09 10 alguém poderia me ajudar ? Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Fevereiro 16, 2016 Há duas saídas: 1. Antes do INSERT, fazer um SELECT verificando se a sequência já existe. 2. Criar uma Chave Única (Unique Key) e fazer o INSERT direto, verificando se retornou erro. Se retornar erro de chave duplicada, a sequência já existe Compartilhar este post Link para o post Compartilhar em outros sites
Daniel A 0 Denunciar post Postado Fevereiro 16, 2016 Voce teria algum modelo de como ficaria isso ? Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Fevereiro 17, 2016 Há vários exemplos aqui. Tente fazer e poste suas dúvidas Compartilhar este post Link para o post Compartilhar em outros sites
Daniel A 0 Denunciar post Postado Fevereiro 17, 2016 Há vários exemplos aqui. Tente fazer e poste suas dúvidas não achei nada .... estou pensando na lógica assim ... o php veirica a opisção p1 no banco e ve se é igual ... se for igual ele consulta a p2 .... se fora igual ele vai e consulta e p3 ..... ele só vai gravar se uma das consultas voltar falso ... caso todas as igualdades forem verdadeiras ele fala que a sequencia ja esta cadastrada .... como monto isso no PHP ???? Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Fevereiro 17, 2016 Não precisa de várias consultas. Apenas uma, filtrando com WHERE SELECT count(*) as total FROM tabela WHERE valor = <valor a ser inserido>; Se total for maior que 0, o valor já existe Veja qualquer link do resultado que te mandei. O primeiro já usa essa lógica, filtrando por email Compartilhar este post Link para o post Compartilhar em outros sites
Daniel A 0 Denunciar post Postado Fevereiro 19, 2016 Eu tentei assim: if ( $connection->query("SELECT count(*) FROM numb WHERE p01 = '$v1' and p02 = '$v2' and p03 = '$v3' and p04 = '$v4' and p05 = '$v5' and p06 = '$v6' and p07 = '$v7' and p08 = '$v8' and p09 = '$v9' and p10 = '$v10' ") { echo"registro já cadastrado"; } else { $stmt = $connection->prepare("INSERT INTO numb ( p1, p2, p3, p4, p5, p6, p7, p8, p9, p10) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); $stmt->bindParam(1, $v1); $stmt->bindParam(2, $v2); $stmt->bindParam(3, $v3); $stmt->bindParam(4, $v4); $stmt->bindParam(5, $v5); $stmt->bindParam(6, $v6); $stmt->bindParam(7, $v7); $stmt->bindParam(8, $v8); $stmt->bindParam(9, $v9); $stmt->bindParam(10, $v10); $stmt->execute(); echo"Registro cadastrado"; } não funcionou !!!!!!!!!! a única mensagem que aparece é erro no servidor ?????? Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Fevereiro 19, 2016 "erro no servidor" deve ser uma mensagem que você programou em alguma outra parte do código. Isso não é mensagem de erro do PHP nem do SGBD Seu if sempre vai retornar true. O método query() só retornará false se ele falhar. Ele nunca retornará 0 só porque o COUNT retornou 0. Você precisa buscar o resultado da query usando fetch() ou fetchAll() por exemplo. Leia este artigo: http://rberaldo.com.br/pdo-mysql/ Compartilhar este post Link para o post Compartilhar em outros sites
Daniel A 0 Denunciar post Postado Fevereiro 20, 2016 "erro no servidor" deve ser uma mensagem que você programou em alguma outra parte do código. Isso não é mensagem de erro do PHP nem do SGBD Seu if sempre vai retornar true. O método query() só retornará false se ele falhar. Ele nunca retornará 0 só porque o COUNT retornou 0. Você precisa buscar o resultado da query usando fetch() ou fetchAll() por exemplo. Leia este artigo: http://rberaldo.com.br/pdo-mysql/ Boa noite Beraldo... não quero tirar sua paciencia ... e obrigado por estar me ajudando .... mas gostaria de mais uma ajuda para tentar intender como funciona.... pode me ajudar ? $sql = "SELECT * FROM programadores";" Essa lina eu declaro na variavel a consulta que quero realizar - certo? $result = $PDO->query( $sql ); " essa joga na variavel $result a aplicação da consulta na conexão com o banco - certo ? $rows = $result->fetchAll(); " o que faz isso ? não entendo a explicação que esta no site ..... ???? outra pergunta como posso aplicar isso no meu caso ???? print_r( $rows ); Mais uma vez obrigado!!! Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Fevereiro 21, 2016 query() só executa uma consulta. Ela retorna true se deu certo ou false se deu errado. Nada além disso. fetch() e fetchAll() buscam os resultados da consulta executada. fetch() busca um resultado por vez. É muito comum usar fetch() em loop while, por exemplo. fetchAll() busca todos os resultados de uma vez e os coloca em um array. Compartilhar este post Link para o post Compartilhar em outros sites
Daniel A 0 Denunciar post Postado Fevereiro 22, 2016 query() só executa uma consulta. Ela retorna true se deu certo ou false se deu errado. Nada além disso. fetch() e fetchAll() buscam os resultados da consulta executada. fetch() busca um resultado por vez. É muito comum usar fetch() em loop while, por exemplo. fetchAll() busca todos os resultados de uma vez e os coloca em um array. Beraldo Obrigado pelas explicações !!!!! meu código funcionou da seguinte maneira !!! <?php $jogo=$_POST["reg"]; $v1=$_POST["p1"]; $v2=$_POST["p2"]; $v3=$_POST["p3"]; $contador=1; $connection = new PDO("mysql:host=localhost;dbname=pdo", "gt", "123"); $rs = $connection->query("SELECT * FROM numb WHERE p1 = '$v1' AND p2 = '$v2' AND p3 = '$v3'" ); if($rs->rowCount() >0){ echo "registros ja cadastrados !!"; }else{ $stmt = $connection->prepare("INSERT INTO numb (reg, p1, p2, p3 , contador) values (?, ?, ?, ?, ?)"); $stmt->bindParam(1, $reg); $stmt->bindParam(2, $v1); $stmt->bindParam(3, $v2); $stmt->bindParam(4, $v3); $stmt->bindParam(5, $contador); $stmt->execute(); if($stmt->errorCode() != "00000") { $valido = false; $erro = "Erro código " . $stmt->errorCode() . ": "; $erro .= implode(", ", $stmt->errorInfo()); } echo" Registros Cadastrados"; echo"<br>"; echo"<br>"; } ?> Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Fevereiro 22, 2016 Como recomendação, use Prepared Statements. Vai deixar seu código imune a SQL Injection Compartilhar este post Link para o post Compartilhar em outros sites