Foros del Web » Programando para Internet » PHP »

revisar que no metan dos iguales

Estas en el tema de revisar que no metan dos iguales en el foro de PHP en Foros del Web. Lo que hago es verificar que cuando un cleinte escribe un nombre del negocio, este nombre sea verificado en la Base de datos para que ...
  #1 (permalink)  
Antiguo 31/03/2003, 15:32
 
Fecha de Ingreso: enero-2002
Ubicación: Perez Zeledon Costa Rica
Mensajes: 1.006
Antigüedad: 15 años, 11 meses
Puntos: 11
revisar que no metan dos iguales

Lo que hago es verificar que cuando un cleinte escribe un nombre del negocio, este nombre sea verificado en la Base de datos para que no exista otro igual, lo hago asi:
$sql = mysql_query("SELECT * FROM Comercials WHERE cTitle='$title' ")
or die(mysql_error());
$row = mysql_fetch_array($sql);

$temp = "".$row["cTitle"]."";

if ($temp == $title) {
echo "that Comercial Name: <B>".$title."</B> is already taken -go back and chose another one.";

} else {
el insertar aqui
}

pero resulta que cuando un cliente mete un nombre con comillas, esto salta la verificacion.

por ejemplo si mete
Ben's Beans este nombre no es verificado.

Como logro verificar o comprobar si existen nombres asi en la Base de datos?


gracias
  #2 (permalink)  
Antiguo 31/03/2003, 15:41
Avatar de Cain  
Fecha de Ingreso: enero-2002
Ubicación: Catalunya
Mensajes: 6.459
Antigüedad: 15 años, 11 meses
Puntos: 17
$sql = mysql_query("SELECT * FROM Comercials WHERE cTitle='".mysql_escape_string($title)."' ")
or die(mysql_error());
__________________
M a l d i t o F r i k i
  #3 (permalink)  
Antiguo 31/03/2003, 18:22
 
Fecha de Ingreso: enero-2002
Ubicación: Perez Zeledon Costa Rica
Mensajes: 1.006
Antigüedad: 15 años, 11 meses
Puntos: 11
cain, gracias, pero siempre pasa el insert!

:negar:

Qué hago?
  #4 (permalink)  
Antiguo 31/03/2003, 19:03
 
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago, Chile
Mensajes: 35
Antigüedad: 15 años, 1 mes
Puntos: 0
lo que yo hago es una funcion, y de acuerdo al valor hago o no el insert

la funcion es
Código PHP:
function BuscaReg($tabla$camp$valor_camp){
 
$nroRow=0;
 
$tope=1;
 
$existe=1;
 
$result=mysql_query("SELECT $camp FROM $tabla WHERE $camp='$valor_camp' LIMIT ".$nroRow.", $tope ");
 if(!(
$row mysql_fetch_array($result))) {  
    
$nf mysql_num_rows($result);    
    
$existe=0;
 }
 return 
$existe;

quizas hay mejores formas pero esta funciona
__________________
Raúl Angulo
Webmaster Profisica.cl
  #5 (permalink)  
Antiguo 31/03/2003, 19:39
 
Fecha de Ingreso: enero-2002
Ubicación: Perez Zeledon Costa Rica
Mensajes: 1.006
Antigüedad: 15 años, 11 meses
Puntos: 11
Este script funciona bien, me verifica si existe el nombre en la BD o no, pero debido a que algunos clientes meteran nombres comerciales con comillas como Ben's Beans, necesito que dichos nombres tambien sean revisados y en la actualidad no lo hace, siempre un nombre con comillas pasa como si nada.

C[omo lo hago?
  #6 (permalink)  
Antiguo 01/04/2003, 10:27
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Es probable que no te funcione por el tema "slashes" .. osese .. por el caracter de escape que mete Mysql en las BD o si usas magic_quotes_gpc o runtime ...

No funciona por:

1) a tu consulta SQL (al select) le llega para comparar:
Ben\'s Beans y en tu BD tienes Ben's Beans
.. por lo tanto no son iguales.

2) en tu BD guaras:
Ben\'s Beans y a tu consulta SQL llega Ben's Beans o incluso Ben\\'s Beans

El caso que influye las directivas de php:
magic_quotes_gpc
y
magic_quotes_runtime

Segun su estado .. habrá que aplicar funciones como stripslashes() o incluso addslashes() a la cadena que vas a buscar (usar en tu condición "WHERE ...." sql ..

Para saberlo .. te recomiendo que te hagas un phpinfo() a tu servidor y mires el estado de esas directivas ...

Tambien que hagas simples "echo $cadena_que_buscas" antes de atacar tu "SELECT" (consulta) .. y que mires en tu BD como se guarda un nombre del tipo: Ben's Beans .. mm aunque si usas algun administrador de Msyql (phpMyadmin) es porbable "que te engañe" con las \ .. pues es probable que las elimine al mostrate esos datos ..

mas info sobre addslashes() ... stripslashes() y afines:
http://www.php.net/manual/en/function.addslashes.php
(mira los comentarios de los usuarios .. Hablan bastande del tema cadenas con ' ... )

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #7 (permalink)  
Antiguo 01/04/2003, 19:31
 
Fecha de Ingreso: enero-2002
Ubicación: Perez Zeledon Costa Rica
Mensajes: 1.006
Antigüedad: 15 años, 11 meses
Puntos: 11
muchas gracias por su ayuda, estoy pegado en esto.

Primero, trato de hacer un phpinfo() y no se como hacerlo, sera asi?

voy ami sitio
www.misitio.com/phpinfo()
??

o como lo hago?

por ahi empiezo.

Por favor tenganme pasiencia, soy un weY
toy aprendiendo
  #8 (permalink)  
Antiguo 01/04/2003, 21:03
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
phpinfo() es una función de PHP ..

crea un archivo .. llamalo ejemplo phpinfo.php y lo subes a tu servidor .. ha de tener el código de la lamada a la función simplemente:
Código PHP:
<?php
phpinfo
();
?>
Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #9 (permalink)  
Antiguo 03/04/2003, 15:38
 
Fecha de Ingreso: enero-2002
Ubicación: Perez Zeledon Costa Rica
Mensajes: 1.006
Antigüedad: 15 años, 11 meses
Puntos: 11
Por si alguien busca la respuesta, aqui estaba la solucion:
$title2= htmlspecialchars($title);

$sql =mysql_query("SELECT * FROM Comercials WHERE cTitle='$title2'")
or die(mysql_error());

if ($sql){
$cant =mysql_num_rows($sql);
}
// echo "title2 ",$title2,"<br>";
//echo "title ",$title,"<br>";
//echo "sql ",$sql,"<br>";


if($cant >0){
echo "that Comercial Name: <B>".$title."</B> is already taken -go back and chose another one.";
}else{
insert aqui
}
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:28.