1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

[PHP-SQL] Exact Match

Discussão em 'Web Development' iniciada por Chob, 24 de Agosto de 2007. (Respostas: 8; Visualizações: 1009)

  1. Chob

    Chob 1st Folding then Sex

    Boas, deparei-me com um "problema bicudo":


    Num formulario onde se põe nomes e idades das pessoas:

    Tenho um base de dados com Anabela com a sua idade e uso uma condição que se forem adicionados dados a uma pessoa, o site verifica se essa pessoa já existe e se existir em vez de inserir um novo faz só o update

    O problema é que se eu quizer adiciona uma pessoa chamada Ana ele vai actualizar o Anabela pois ele vai à tabela da seguinte forma:

    PHP:
    $sql mysql_query("SELECT * FROM Oponentes WHERE nome='$_GET[NOME]'");
    O que quer dizer que ele vai buscar nomes que Contenham Ana e o que eu queria é que ele procurasse se existia alguem com o nome EXACTO

    Any ideas?

    Abraços
     
  2. AliFromCairo

    AliFromCairo Power Member

    Boas, de que forma estás a verificar o resultado da query ? Digo isto, porque caso só tenhas o nome 'Anabela' na BD, e fizeres essa query com o nome 'Ana', isso não vai devolver nada, portanto, penso que o problema não está na query.
     
  3. Chob

    Chob 1st Folding then Sex

    Boaz, tenho assim:

    PHP:
    $sql mysql_query("SELECT * FROM Oponentes WHERE nome='$_GET[burnsy]'");
    $result mysql_num_rows($sql);

    if(
    $result!="0"){
        echo 
    "A tabela de Oponentes foi actualizada </br>";
        
        
          
    mysql_query("UPDATE Oponentes SET warsfeitas=warsfeitas+1");

    } else {
        
        
    mysql_query("INSERT INTO Oponentes(nome, warsfeitas)
    VALUES
    ('
    $_POST[burnsy]',1)");
        
        Echo 
    "Adicionado o novo Oponente à lista, Actualizados os resultados </br>";
        
    }
    Eu testei e seleccionou automaticamente o anabela, assumindo que como Anabela contem Ana deixava passar

    Ideias?

    abraços
     
  4. oscarolim

    oscarolim Power Member

    Em primeiro, nunca, mas NUNCA passes valores do post directamente para a query. A probabilidade de enviar injecções de sql é brutal.
    Podes fazer o mesmo:
    $nome = mysql_real_escape_string($_GET["burnsy"]);
    mysql_query("INSERT INTO oponentes(nome, warfeitas) VALUES ('$nome', '1) ON DUPLICATE KEY UPDATE warfeitas = warfeitas + 1");

    Coloca o nome como campo único, e assim quando ele detectar a violação de chave única irá incrementaro numero de guerras feitas.
     
  5. AliFromCairo

    AliFromCairo Power Member

    Boas, verifica se não tens mesmo o nome 'Ana' na tua base de dados. Esse tipo de resultado que estás a ter só faria sentido se tivesses uma query deste género:

    Código:
    SELECT * FROM tabela WHERE nome LIKE "%Ana%";
    
    Ou seja, todos os nomes que contenham 'Ana'. Podes fazer um teste simples: crias uma tabela nova, inseres o nome 'Anabela', e fazes o teu SELECT indicando explicitamente o nome 'Ana'. Vais ver que isso vai devolver um empty set.
     
  6. Chob

    Chob 1st Folding then Sex

    tentei esse código e é aceite, MAS, não adiciona nada à base de dados :S


    Sorry, não percebi xD

    Abraços e tks
     
  7. oscarolim

    oscarolim Power Member

    Aceitou? Nao deu erro? :P Reparei agora num erro de sintaxe. Falta uma plica depois do 1, ficando o codigo assim
    Código:
    mysql_query("INSERT INTO oponentes(nome, warfeitas) VALUES ('$nome', '1') ON DUPLICATE KEY UPDATE warfeitas = warfeitas + 1");
    
    Desculpa o erro, acontece :p
     
  8. Chob

    Chob 1st Folding then Sex

    Pois, eu corrigi logo, mas não deu na mesma =\
     
  9. mOrSa

    mOrSa Power Member

    Olá! Eu estive a reparar no teu código e penso que o problema será:
    PHP:
     if($result!="0"){  (...)
    Estás a contar o número de linhas da query com
    PHP:
     $result mysql_num_rows($sql); 
    a comparação que fazes é $result !="0" e se é o "número" de linhas não se trata char's. Posso estar a pensar mal mas tive o mesmo problema há uns 2 anos... pela mesma razão, i.e., usar aspas...

    Experimenta usar o
    PHP:
     if ($result != 0) {
    Espero ter ajudado.
    1 abraço!
     

Partilhar esta Página