Foros del Web » Programando para Internet » PHP »

validar direccion

Estas en el tema de validar direccion en el foro de PHP en Foros del Web. Estamos insertando unos links a una bd, pero quiero validar la direccion, es decir quiero que antes de insertar el registro compare para ver si ...
  #1 (permalink)  
Antiguo 24/08/2004, 16:46
Avatar de el_cesar  
Fecha de Ingreso: mayo-2001
Ubicación: Cali
Mensajes: 2.411
Antigüedad: 16 años, 6 meses
Puntos: 20
validar direccion

Estamos insertando unos links a una bd, pero quiero validar la direccion, es decir quiero que antes de insertar el registro compare para ver si la direccion ya se encuentra en la bd, lo pense con un if y aqui easta el codigo que uso:

Código PHP:
<?

$dbh
=mysql_connect ("localhost""root""") or die ('I cannot connect to the database because: ' mysql_error());
mysql_select_db ("consultex"); 
$titulo=$_POST['A'];
$url=$_POST['B'];
$categoria=$_POST['categ'];
$descripcion=$_POST['D'];

$sqlurl=mysql_db_query("consultex","select * from links where link like'%".$url."%'");



if(
$sqlurl==$url){
echo 
"La Direccion ya se encuentra en la Base de Datos";
}else {
mysql_db_query("consultex","insert into links(titulo,link,descripcion,categoria) Values ('$titulo','$url','$descripcion','$categoria')");
}
?>
pero no me esta haciendo la comparacion, es decir inserta el registro como si nada y pues hice la prueba y le puse que me reportara el error y el error que me arroja es Resource id #3 y pues no se que sea, por fa ayudenme con esto
__________________
Say no more.......
  #2 (permalink)  
Antiguo 24/08/2004, 18:03
Avatar de el_cesar  
Fecha de Ingreso: mayo-2001
Ubicación: Cali
Mensajes: 2.411
Antigüedad: 16 años, 6 meses
Puntos: 20
bueno ya estuve organizando algunas cosillas y pues ya tengo un poco solucionado el problema, ya le cuadre para que dejara de mostrarme ese error y pues funciona bien, pero no entiendo es por que no me esta haciendo la consulta desde la variable.

mi codigo quedo asi:

Código PHP:

<?

$dbh
=mysql_connect ("localhost""root""") or die ('I cannot connect to the database because: ' mysql_error());
mysql_select_db ("consultex"); 
$titulo=$_POST['A'];
$url=$_POST['B'];
$categoria=$_POST['categ'];
$descripcion=$_POST['D'];
?>
<table align="center" border="1">
<tr>
<th>Titulo</th>
</tr>
<?
echo $url;
$sqlurl=mysql_db_query("consultex","select * from links where link ='%".$url."%'");
//$sqlurl=mysql_db_query("consultex","select * from links where link ='http://www.prochile.cl/'");
while ($row=mysql_fetch_array($sqlurl))
{
    
echo 
'<tr><td>'.$row["link"].'</td></tr>';
}
mysql_free_result($sqlurl);

?>
si en lugar de asignar la variable $url a la consulta le asigno un valor predeterminado, el hace bien la consulta, pero cuando le pongo la variable, que es lo que realmente necesito, no me muestra nada, y pues el si me esta recogiendo la variable y todo.

que pasa?????
__________________
Say no more.......
  #3 (permalink)  
Antiguo 24/08/2004, 19:57
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Fijate bien el valor que toma $url antes de atacar tu sentencia SQL.

Es probable que uses magic_quote_gpc = ON (que es lo normal y "seguro" en la mayoría de casos) .. eso ocasiona un escape (caracter /) antes de los / así que tal vez estés recibiendo:

http:////www.tal.tal// y no http://www.tal.tal que es lo que esperas y lo que seguramente tienes en tu BD almacenado actualmente.

Para solventar ese problema puedes aplicar la función:

stripslashes()
http://www.php.net/manual/en/function.stripslashes.php

que, elimina los / de más que tienes.

-------

Por otro lado .. NO puedes hacer esto:

Código PHP:
$sqlurl=mysql_db_query("consultex","select * from links where link like'%".$url."%'"); 

if(
$sqlurl==$url){ 
No sé si realmente sabes que hace la ejecución de una consulta SQL vía tu mysq_db_query() (o mysql_query() previo mysql_selec_db() que es lo que deberías usar).

Cuando tu ejecutas una consulta SQL vía esa función .. se origina un "record-set" .. pero los resultados que "puedas" obtener debes de "sacarlos" hacia PHP vía funcoines como mysql_fetch_array() (o del grupo mysql_fetch_xxxx()) o mysql_result() .. pero NOOOO esperar que esa consulta SQL te va a devolver un sólo registro y el dato concreto que andas buscando .. te recuerdo que un "registro" tiene N campos .. campos que "llamas a todos" con ese * que usas para tu SELECT de SQL .. así que NUNCA vas a obtener lo esperado así .. Además usas "LIKE" .. con comodines (%) lo cual implica que te va a dar como resultado todo lo que contenga tu cadena a buscar .. NO exactametne lo que indiques (que sería lo lógico si es que andas UN sólo resultado).

Deberías hacer:
Contar los registros que coinciden con tu cadena a buscar entre los registros (y campo URL) de tu tabla "links" .. Eso lo haces vía SQL (lo más óptimo frente a un mysql_num_rows() .. ) con la función SQL: COUNT() ... Esa sentencia SQL devuelve -UN sólo registro- con el total de coincidencias de tu condición (lo que va despues del "WHERE" ..) .. así que si es > 0 ...(1 o más) no tendrás que hacer tu "INSERT" (crear tu registro) por qué ya existe.

Y para obtener ese único resultado ... como sé que sólo va a devolver un sólo registro .. ("record-set") uso la función directa: mysql_result() al resultado "0" (no va a existir más).

Código PHP:
mysql_select_db("consultex");
$sqlurl=mysql_query("select COUNT(*) from links where link = '".$url."'"); 

if(
mysql_result($sqlurl,0) == 0){ 
  
mysql_query("insert into links(titulo,link,descripcion,categoria) Values ('$titulo','$url','$descripcion','$categoria')"); 

} else { 
    echo 
"La Direccion ya se encuentra en la Base de Datos"


Un saludo,
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 04:09.