Comprobar la validez de una URL con Ajax

  • Por
  • Ajax
Ejercicio de Ajax y PHP para la comprobación de una URL escrita en un campo de texto: comprobar si está escrita correctamente y hay algo en esa dirección.
Seguimos presentando artículos que ilustran el trabajo con PHP y Ajax, para nuestro manual Trabajo con Ajax en PHP utilizando Xajax. En este caso vamos a realizar una comprobación de la validez de una URL escrita por el usuario.

En este ejemplo tendremos un formulario donde el usuario podrá escribir la URL de un sitio web. Con Ajax comprobaremos su validez, desde el punto de vista sintáctico (tiene que empezar por http://) y luego haremos una pequeña utilidad para que el visitante pueda ver el sitio web que se proporciona dentro de un iframe. Si el sitio web se ve correctamente dentro del iframe es que la URL es correcta.

Podemos ver el ejemplo en funcionamiento para hacernos una idea más concreta del objetivo de este taller.

De nuevo comento que este ejercicio lo hemos creado ayudándonos de las librerías Xajax, por lo que no explicaré los detalles del uso de Xajax.

Vamos a empezar viendo el formulario HTML que hemos creado:

<form name="formulario">
URL: <input type="text" name="url">
<input type="button" name="comprobar_url" value="Comprobar URL" onclick="xajax_comprobar_url(document.formulario.url.value)">
<div id="comprobacion"></div>
<br>
Título: <input type="text" name="titulo">
</form>


Simplemente tiene un campo de texto de la URL y un botón, que al pulsarlo se lanza la comprobación. Luego encontramos un <div id="comprobacion">, donde mostraremos el resultado de la validación por medio de Ajax. El último campo de texto no lo utilizamos para nada.

Al pulsar el botón, evento onclick, se llama a una función que hace uso de Ajax. Esta función está escrita en PHP. Mediante xajax conseguimos que se pueda ejecutar con una llamada desde Javascript a esta función PHP.

function comprobar_url($miurl){
   if($miurl == ""){
      $texto_result = "Debes escribir una URL";
   }elseif(substr($miurl, 0, 7) != "http://"){
      $texto_result = "La URL debe comenzar por http://";
   }else{
      $texto_result = '<iframe width="600" height="200" src="' . $miurl . '"></iframe>
                  <br>
                  <a href="#" onclick="xajax_NO_comprobar_url()">Ocultar...</a>';
   }
   $respuesta = new xajaxResponse('ISO-8859-1');
   $respuesta->addAssign("comprobacion","innerHTML",$texto_result);
   return $respuesta;
}


La función recibe en el parámetro $miurl la URL que se desea validar. Primero realiza un par de validaciones simples, que generan mensajes de error si no la URL es un string vacío o si la URL no comienza por "http://".

Luego, para que el usuario valide visualmente que la dirección que ha escrito corresponde con la URL que quería enviar, se muestra un <iframe> con la URL de la página que ha escrito en el formulario. Si la URL estaba bien escrita el usuario podrá verla dentro del <iframe>. Además, para comodidad del usuario, hemos puesto debajo un enlace para ocultar el <iframe>. Ese enlace llama a otra función por medio de Ajax que borra de la página el <iframe>.

function NO_comprobar_url(){
   $texto_result = '';
   $respuesta = new xajaxResponse('ISO-8859-1');
   $respuesta->addAssign("comprobacion","innerHTML",$texto_result);
   return $respuesta;
}


En realidad, si hemos seguido el manual Trabajo con Ajax en PHP utilizando Xajax, no será muy difícil poner en marcha este ejercicio por nuestra cuenta.

Dejamos el código fuente completo de este taller de Ajax y PHP con Xajax.

<?
session_start();

//incluímos la clase ajax
require ('xajax/xajax.inc.php');

//instanciamos el objeto de la clase xajax
$xajax = new xajax();
$xajax->setCharEncoding('ISO-8859-1');
$xajax->decodeUTF8InputOn();

function comprobar_url($miurl){
   if($miurl == ""){
      $texto_result = "Debes escribir una URL";
   }elseif(substr($miurl, 0, 7) != "http://"){
      $texto_result = "La URL debe comenzar por http://";
   }else{
      $texto_result = '<iframe width="600" height="200" src="' . $miurl . '"></iframe>
                  <br>
                  <a href="#" onclick="xajax_NO_comprobar_url()">Ocultar...</a>';
   }
   $respuesta = new xajaxResponse('ISO-8859-1');
   $respuesta->addAssign("comprobacion","innerHTML",$texto_result);
   return $respuesta;
}

function NO_comprobar_url(){
   $texto_result = '';
   $respuesta = new xajaxResponse('ISO-8859-1');
   $respuesta->addAssign("comprobacion","innerHTML",$texto_result);
   return $respuesta;
}

$xajax->registerFunction("comprobar_url");
$xajax->registerFunction("NO_comprobar_url");

//El objeto xajax tiene que procesar cualquier petición
$xajax->processRequests();
?>
<html>
<head>
   <title>Comprobar URL por iframe y ajax</title>
   <?
   //En el <head> indicamos al objeto xajax se encargue de generar el javascript necesario
   $xajax->printJavascript("xajax/");
   ?>
   
</head>

<body>

<form name="formulario">
URL: <input type="text" name="url">
<input type="button" name="comprobar_url" value="Comprobar URL" onclick="xajax_comprobar_url(document.formulario.url.value)">
<div id="comprobacion"></div>
<br>
Título: <input type="text" name="titulo">
</form>

</body>
</html>

Autor

Miguel Angel Alvarez

Miguel es fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Comenzó en el mundo del desarrollo web en el año 1997, transformando su hobby en su trabajo.

Compartir

Comentarios

Pepote

17/10/2007
Creo que es complicarse un poco la vida. Se puede hacer sin Ajax.

El problema es que como Ajax está de moda, se utiliza para todo aún siendo innecesario.

La alternativa sin Ajax:

<html>
<head>
<script language='Javascript'>
function checkURL(){
var msURL=document.fichero.txturl.value;
var ifrURL=document.getElementById("ichkURL");
var dvURL=document.getElementById("divURL");
if (msURL.indexOf("http://") < 0)
document.fichero.txturl.value="http://"+msURL;

dvURL.innerHTML="<b>URL comprobada: "+document.fichero.txturl.value+"</b>";

ifrURL.style.display="inline";
ifrURL.width="100%";
ifrURL.height="50%";
ifrURL.src=document.fichero.txturl.value;
}

</script>
</head>
<body>
<table border="0" align="center">
<form name="fichero">
<tr>
<td align="right">URL:</td>
<td><input type="texto" name="txturl">
<input type="button" value="Comprobar URL" onclick="checkURL()">
</td>
</tr>
</form>
</table>
<br>
<div id="divURL" align="center"></div>
<iframe align="center" id="ichkURL" src="" width="0" height="0"></iframe>

</body>
</html>

Harold Rivas

07/6/2010
Codigo modificado a la version 0.5
A continuacion dejo el codigo para quienes ya esten usando la version 0.5

<?
include('includes/funciones.inc.php');
include('includes/constantes.inc.php');
require_once('includes/js/xajax/xajax_core/xajax.inc.php');
//instanciamos el objeto de la clase xajax
$xajax = new xajax();
$xajax->configure('decodeUTF8Input',true);
$xajax->configure('decodeUTF8InputOn',true);
$xajax->configure('javascript URI','includes/js/xajax');
function comprobar_url($miurl)
{
if($miurl == ""){
$texto_result = "Debes escribir una URL";
}
elseif(substr($miurl, 0, 7) != "http://"){
$texto_result = "La URL debe comenzar por http://";
}
else
{
$texto_result = '<iframe width="600" height="200" src="' . $miurl . '"></iframe>
<br>
<a href="#" onclick="xajax_NO_comprobar_url()">Ocultar...</a>';
}
$respuesta = new xajaxResponse();
$respuesta->assign("comprobacion","innerHTML",$texto_result);
return $respuesta;
}

function NO_comprobar_url()
{
$texto_result = '';
$respuesta = new xajaxResponse();
$respuesta->assign("comprobacion","innerHTML",$texto_result);
return $respuesta;
}


$xajax->register(XAJAX_FUNCTION,"comprobar_url");
$xajax->register(XAJAX_FUNCTION,"NO_comprobar_url");
//El objeto xajax tiene que procesar cualquier petición
$xajax->processRequest();
?>

<html>
<head>
<title>Comprobar URL por iframe y ajax</title>
<?$xajax->printJavascript();?>
</head>
<body>
<?
echo '<form action="" method="post" name="frm_sitios">';
echo '<p>Introduzca URL: ';
echo ' <input type="text" value="http://" size="120" maxlength="100" name="sitio_url" id="sitio_url">';
echo ' <input type="hidden" value="1" name="primera" id="primera">';
echo ' <input type="button" name="comprobar_url" value="Comprobar URL" onclick="xajax_comprobar_url(document.frm_sitios.sitio_url.value)">';
echo '<div id="comprobacion"></div><br>';
echo '</form>';
?>

</body>
</html>