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
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.
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
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.
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.
tentei esse código e é aceite, MAS, não adiciona nada à base de dados :S Sorry, não percebi xD Abraços e tks
Aceitou? Nao deu erro? 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
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!