Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Validar y enviar o no formulario a base de datos

Estas en el tema de Validar y enviar o no formulario a base de datos en el foro de PHP en Foros del Web. Hola a todos. Ante todo y como siempre, muchas gracias por leer esto y ayudarme u orientarme un poco. Tengo un formulario que envía una ...
  #1 (permalink)  
Antiguo 17/09/2014, 11:07
 
Fecha de Ingreso: octubre-2013
Ubicación: Madrid
Mensajes: 53
Antigüedad: 10 años, 6 meses
Puntos: 1
Validar y enviar o no formulario a base de datos

Hola a todos.

Ante todo y como siempre, muchas gracias por leer esto y ayudarme u orientarme un poco.

Tengo un formulario que envía una serie de datos a una base de datos. Casi todos son automáticos menos uno que rellena el usuario. Es una URL. Lo que me pasa es que tengo el campo marcado en html como "REQUIRED" pero aun así y sin rellenar el campo, me envía el formulario y me inserta los datos en la base.

No se si se puede hacer con PHP, lo que necesito es validar que el usuario ha rellenado el campo de la URL (es decir, que no está vacío) y que la URL es correcta, al menos una comprobación que compruebe que la url lleva "http://" al principio y que si está vacío, no envié los datos a la db y que si la url no es correcta aparezca un mensaje.

Este es el codigo que tengo:

Código PHP:
<?php

require_once("connect.php");
require_once(
"incl.php");

$surl substr(str_shuffle('awxyzABCDEFG126789'), 02);
date_default_timezone_set("Europe/Madrid");
$date date("d/m/Y");
$hits "1";
            
mysql_query("INSERT INTO wst_uss (wst_lurl, wst_surl, wst_date, wst_hits) VALUES

(
'"
.addslashes($_POST['lurl'])."',
'"
.$surl."',
'"
.$date."',
'"
.$hits."'
)

"
);

if(
filter_var($lurlFILTER_VALIDATE_URL))

   
header('Location: shorted.php?surl='.$surl);

?>
Encontré que FILTER_VALIDATE URL sirve para esto pero no lo he conseguido, posteriormente una vez validado y enviado a la db lo dirijo a otra pagina con una variable para usarla en la nueva página.

Puede alguien echarme una mano?
Mil gracias a todos.
  #2 (permalink)  
Antiguo 17/09/2014, 13:53
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Validar y enviar o no formulario a base de datos

Ya que estás validando la URL con la función filter_var, lo único que te queda hacer es trabajar con condiciones. Si la extensión del contenido de la variable es mayor a cero (o true) y se trata de una URL válida, guardas el dato en la BD y realizas la redirección, caso contrario, podrías redirigir al usuario hacia el formulario, es decir, la página anterior.

Código PHP:
Ver original
  1. if (strlen($_POST['lurl']) && filter_var($_POST['lurl'], FILTER_VALIDATE_URL)){
  2.     //Guardas el dato en la BD
  3.     //Realizas la redirección
  4. }
  5. else{
  6.     //Retorna a la página anterior
  7.     header ('Location: ' . $_SERVER['HTTP_REFERER']);
  8. }

También puedes hacer la validación del formato de la URL utilizando expresiones regulares, pero eso lo dejo a tu criterio.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 18/09/2014, 07:06
 
Fecha de Ingreso: enero-2011
Ubicación: Barcelona
Mensajes: 36
Antigüedad: 13 años, 3 meses
Puntos: 5
Respuesta: Validar y enviar o no formulario a base de datos

También sería interesante que también lo validades antes de enviar el formulario para no tener que hacer cambiar de páginas al usuario.
Por ejemplo:
Código HTML:
<form id="form1" onsubmit="return validaURL()">
    <input type="text" id="url" />
</form> 
Código Javascript:
Ver original
  1. <script>
  2.     function validaURL(){
  3.         var regex=/^(ht|f)tps?:\/\/\w+([\.\-\w]+)?\.([a-z]{2,4}|travel)(:\d{2,5})?(\/.*)?$/i;
  4.         var inputUrl=$('#form1 #url').val();
  5.         if(regex.test(inputUrl)){
  6.             return true;
  7.         }else{
  8.             alert('La URL esta mal!!');
  9.             return false;
  10.         }
  11.     }
  12. </script>

En caso de que la url coincida con la expresión regular devolverá true y se ejecutara el submit.
  #4 (permalink)  
Antiguo 18/09/2014, 10:01
 
Fecha de Ingreso: octubre-2013
Ubicación: Madrid
Mensajes: 53
Antigüedad: 10 años, 6 meses
Puntos: 1
Respuesta: Validar y enviar o no formulario a base de datos

Muchas gracias a los dos por vuestras respuestas, me han sido de gran ayuda.

Ahora si que comprueba la URL y sino es correcta no graba los datos en la db, en cambio si son correctos si que va bien.
Lo unico que el código php esta dentro de la misma página que contiene el formulario y ya casi lo tengo pero me gustaría que si la url introducida no es correcta el placeholder del input se cambiara a "URL no válida" por ejemplo, esto es posible, es decir, html dentro de php?

Código PHP:
if (strlen($_POST['lurl']) && filter_var($_POST['lurl'], FILTER_VALIDATE_URL)){

mysql_query("INSERT INTO wst_uss (wst_lurl, wst_surl, wst_date, wst_hits) VALUES

(
'"
.addslashes($_POST['lurl'])."',
'"
.$surl."',
'"
.$date."',
'"
.$hits."'
)

"
);

header('Location: shorted.php?surl='.$surl);

}

else {

    
'<input name="lurl" placeholder="URL no válida">';
}

?> 
Lo tengo así pero no hace nada, y no sé porque me parece que al estar el php y html juntos, nada mas abrir la página aparecería "URL no válida" en vez del placeholder original puesto que el php se ejecuta na mas abrir no?. Que puedo hacer, separo el código en dos páginas y valido el formulario con javascript o hay alguna manera de hacer algo así tal cual lo tengo?

Gracias de nuevo a los dos.
  #5 (permalink)  
Antiguo 18/09/2014, 10:12
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Validar y enviar o no formulario a base de datos

No ves al <input> porque no lo estás imprimiendo. Ahora, esa impresión tendrás que hacerla dentro del formulario para que siga perteneciendo al mismo y no sea un elemento externo.

Código Pseudocódigo:
Ver original
  1. Si Condición Entonces
  2.     Imprimes la caja con el placeholder original
  3. Si No
  4.     Imprimes la caja con el nuevo placeholder
  5. Fin Si

Aunque no le veo mucho sentido a hacer eso, es decir, con un mensaje en alguna parte de la página, te basta.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #6 (permalink)  
Antiguo 18/09/2014, 11:39
 
Fecha de Ingreso: octubre-2013
Ubicación: Madrid
Mensajes: 53
Antigüedad: 10 años, 6 meses
Puntos: 1
Respuesta: Validar y enviar o no formulario a base de datos

Gracias Alexis88 por tu ayuda.

Lo he hecho con un mensaje tal como decías pero ocurre lo que te comentaba, nada mas abrir la página, el php se ejecuta y sale el mensaje de URL no válida. He intentado hacer que haga la validación al pulsar el botón de envío "short" pero sigue haciendo lo mismo. Tampoco sé si lo estoy haciendo bien, estoy siguiendo ejemplos y el manual de php pero se me escapa.

Código PHP:
<?php

require_once("connect.php");
require_once(
"incl.php");

$surl substr(str_shuffle('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'), 05);
date_default_timezone_set("Europe/Madrid");
$date date("d/m/Y");
$hits "1";
            
if(isset(
$_POST["short"])) {  //intento que al pulsar el botón se ejecute

if (strlen($_POST['lurl']) && filter_var($_POST['lurl'], FILTER_VALIDATE_URL)) {

mysql_query("INSERT INTO wst_uss (wst_lurl, wst_surl, wst_date, wst_hits) VALUES

(
'"
.addslashes($_POST['lurl'])."',
'"
.$surl."',
'"
.$date."',
'"
.$hits."'
)

"
);

header('Location: shorted.php?surl='.$surl); // si está bien, inserta y lleva a la pagina

}

else {

    echo 
"URL NO VALIDA"// sino muestra el mensaje
        
    
}

}

?>
  #7 (permalink)  
Antiguo 18/09/2014, 12:26
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Validar y enviar o no formulario a base de datos

Fíjate si $_POST["short"] contiene algún valor, de otro modo, no tendría por qué ejecutarse el código.

Código PHP:
Ver original
  1. if (isset($_POST["short"])){
  2.     var_dump($_POST["short"]); //Aquí se mostrará el contenido de $_POST["short"]
  3.  
  4.     if (strlen($_POST['lurl']) && filter_var($_POST['lurl'], FILTER_VALIDATE_URL)){
  5.         //Guardas el dato
  6.         //Redireccionas
  7.     }
  8.     else{
  9.         echo 'URL no válida';
  10.     }
  11. }

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #8 (permalink)  
Antiguo 18/09/2014, 12:30
 
Fecha de Ingreso: octubre-2013
Ubicación: Madrid
Mensajes: 53
Antigüedad: 10 años, 6 meses
Puntos: 1
Respuesta: Validar y enviar o no formulario a base de datos

Gracias de nuevo.

No, disculpa, ha sido error mio, todo esta correcto, solo era que no se estaba actualizando la página... tantas horas ya le dejan a uno tonto perdido .

Muchas gracias por tu tiempo Alexis88.

Etiquetas: formulario, html, mysql, variable
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 12:22.