[PHP-SQL] Exact Match

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
 
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.
 
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.
 
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.

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

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.


Sorry, não percebi xD

Abraços e tks
 
mysql_query("INSERT INTO oponentes(nome, warfeitas) VALUES ('$nome', '1) ON DUPLICATE KEY UPDATE warfeitas = warfeitas + 1");
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
 
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

Pois, eu corrigi logo, mas não deu na mesma =\
 
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!
 
Back
Topo