Foros del Web » Programando para Internet » PHP »

Planteamiento con validacion de textboxes

Estas en el tema de Planteamiento con validacion de textboxes en el foro de PHP en Foros del Web. Hola, siento molestaros quizas con una pregunta redundante, pero creedme que me he leido casi un centenar de mensajes de este estupendo foro sobre el ...
  #1 (permalink)  
Antiguo 28/05/2005, 09:31
 
Fecha de Ingreso: mayo-2005
Ubicación: Valencia
Mensajes: 4
Antigüedad: 12 años, 7 meses
Puntos: 0
Pregunta Planteamiento con validacion de textboxes

Hola,

siento molestaros quizas con una pregunta redundante, pero creedme que me he leido casi un centenar de mensajes de este estupendo foro sobre el tema de validación. Uno esta en esto del PHP mas que por devoción por obligación laboral. Aunque para mi 'desgracia' - es broma - en mi empresa a medio plazo se va a implantar este tipo de tecnología gratuita y efectiva, aunque uno provenga mas del campo del hardware que del soft .Vayamos al grano.

Tengo que filtrar en la clausula WHERE de una sql 2 campos : fechainicial y fechafinal. Estos me vienen en formato ISO YYYYMMDD. Debo recoger su valor de un input de formulario y en la clausula WHERE condicionar que tabla.campo >=fechainicio AND tabla.campo <= fechafin . Sin validación no hay problema, el script se ejecuta perfectamente si el rango es pequeño ya que la tiene alrededor de 200.000 registros . Pero debo validar lo siguiente:

1) El año de fechainicial sea entre 2003 a 2005
2) El mes y dia de fechainicial y fechafinal sean correctos. ( no vale 41 ).
3) Los dias con sus respectivos meses sean correctos (no valdria 31 de Feberero)
4) El año de fechafinal sea igual o mayor que el año de la fechainicial
5) Como genero un excel con cabeceras, si el numero de registros entre este rango de fechas es mayor a 65534, que no se procese el formulario.

Muchas cosas, verdad?.

No pretendo que me resolvais este problema, pero si orientarme.

¿Que usuarías cajas de texto o listas?.
¿Como seria mejor, validarlo en javascript o desde php?
¿Hay algun ejemplo parecido de validación tanto en javascript como php?.
¿Alguna sugerencia mas?

Eso es todo, que no es poco . Gracias por leerme.

Un saludo, terraKeo

Última edición por terrakeo; 28/05/2005 a las 10:02
  #2 (permalink)  
Antiguo 28/05/2005, 09:43
Avatar de Seppo  
Fecha de Ingreso: marzo-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.284
Antigüedad: 12 años, 8 meses
Puntos: 17
Yo usaría listas, me parece más fácil.
Validaría en Javascript (eliminando/agregando días según corresponda) y después en PHP
Para hacer la lista dinámica en las FAQ de Javascript http://www.forosdelweb.com/f13/faqs-javascript-105325-post325615/
Para validar la fecha en PHP usá checkdate http://ar.php.net/manual/es/function.checkdate.php
  #3 (permalink)  
Antiguo 28/05/2005, 10:00
Avatar de Gabriel0702  
Fecha de Ingreso: febrero-2005
Mensajes: 155
Antigüedad: 12 años, 9 meses
Puntos: 0
Bueno mira, voy a ir paso por paso:

-para empezar sería mejor que en tu consulta pusieras algo como:

Código:
 "Select ....  where tabla.campo between fechainicio and fechafinal"
que con una sola condición (between=entre) te evalúa los registros

1) para esto utilizaría un combobox que sólo acepte los valores 2003, 2004 y 2005
2)igualmente, un combobox que vaya de 1 a 31
3) que el combobox de los días se actualizara dependiendo del valor del mes, algo así:
para los meses ene,mar,may,jul,ago,oct,dic que sea de 1 a 31;
para feb que sea 1 a 28
y para el resto de los meses que sea de 1 a 30
4)de esta la verdad no sé si exista alguna función que te facilite la tarea, pero me imagino que sí
5)por medio de una consulta:
Código:
select count(tabla.campo) as TotalRegistros....where tabla.campo between fechainicio and fechafinal group by tabla.campo
validas que TotalRegistros sea menor que 65534

Ahora las preguntas:

Yo usaría listas
Yo validaría parte con javascript y parte con php, donde php lo utilizaría para la parte de la validación de las consultas

Eso es todo, espero que te sirva de guía...
  #4 (permalink)  
Antiguo 29/05/2005, 03:00
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
Una validación JavaScript, así como el uso de listbox o textbox son solo ceuestiones de practicidad y/o presentación... no es un mètodo de validaciòn seguro...

1) Depende de cómo los recibes.. primero plantea eso... pero como sea, no será problema; si los recibes de forma independiente, no importa sea list o text, sería una validación directa ( if($anyoInicial>=2003 && $anyoInicial<=2005) ); si recibez tu fecha completa, sería hacer un explode() ó substr() (de nuevo, depende de cómo recivaz) para obtener solo los carácteres del año y hacer la misma validación directa

2) checkdate(): www.php.net/checkdate

3) Igual a 2

4) Igual a 1

5) Consulta las FAQ para generar tu EXCEL; haz tu consulta como lo indicó Gabriel0702 al incio:
Código:
SELECT campos FROM tabla WHERE campo_fecha BETWEEN $fechaInicio AND $fechaFinal
, una vez que hayas hecho tu consulta puedes condicionar el número de resultados para seguir gracias a la función mysql_num_rows():
Código PHP:
$consultamysql_query("SELECT....");
$resultadosmysql_num_rows($consulta);
// de paso condicionamos a que haya resultados; si es igual a 0 no los hubo
if($resultados>&& $resultados<65534) { 
     echo 
"Seguimos...";
} else {
     echo 
"ERROR: Hubo $resultados resultados";

Preguntas:
- ... un calendario??... más práctico, mejor presentación. En su defecto listbox

- Ya lo dije al inicio... una validación JS no es segura, solo es para ahorrar recursos

- Te dejé el link a la función checkdate(), no creo necesites más... para JavaScript busca en su respectivo foro.

- No sugerencia, comentario na más... Si usas un calendario no necesitarías hacer una validación en JavaScript pués solo estarían fechas válida . BUSCA en aquel foro, verás que encuentras calendarios einterezantes... el de Tunait es muuuy bueno.

Documentación:
www.php.net/explode
www.php.net/substr
www.php.net/mysql_num_rows
www.php.net/checkdate
www.php.net/strtotime
www.php.net/mktime << Las dos últimas... no deberían de hacerte falta, pero quizá te interezen.

Suerte!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #5 (permalink)  
Antiguo 31/05/2005, 13:46
 
Fecha de Ingreso: mayo-2005
Ubicación: Valencia
Mensajes: 4
Antigüedad: 12 años, 7 meses
Puntos: 0
Pregunta aun con dudas :(

Bueno, lo primero muchas gracias a los tres

Aun asi no acabo de pillarle el truco a la validación, disculpadme.

En principio adapte el javascript que me recomendaisteis. (no lo voy a poner pos su excesiva longitud) . Concretamente este http://www.forosdelweb.com/showthread.php?postid=325615
que me genera 7 controles list :
añoinicial, mesinicial, diainicial,añofinal,mesfinal, diafinal y añobuque.

Hasta ahi todo correcto.

Pero lo que no se es como validar del lado del servidor. Es decir , si ya tengo en memoria estas 7 variables como hago para que en codigo php se validen. A modo de curiosidad me he creado una funcion (perdon a los puristas del lenguaje), que hace lo que yo quiero, pero no se como meterla en el script.

Os recuerdo el predicado de la select resumido:

Código PHP:
INSERT INTO tablareceptora (campo1 ... campon)
SELECT campo1 ... campon  FROM tablaorigen
WHERE 
(CONDICIONES PREVIAS ) AND (tablaorigen.campo BETWEEN $fechainicial AND $fechafinal
Lo que hace esta select es hacer una insercion de datos siempre que el rango de fechas sea el de la clausula WHERE . De modo que el año del buque debe ser o bien el añoinicial o bien el final

La funcion de testeo es esta

Código PHP:
<?

function chequeo_fecha ($fechainicio,$fechafin,$an)
{

// Array Fechas Iniciales
$m_fechas_0=array(substr($fechainicio,0,4),substr($fechainicio,4,2),substr($fechainicio,6,2),"Fecha inicio");

// Array Fechas Finales
$m_fechas_1=array(substr($fechafin,0,4),substr($fechafin,4,2),substr($fechafin,6,2),"Fecha fin");
// Array compuesto de fechas iniciales y fechas finales
$m_fechas=array($m_fechas_0,$m_fechas_1);

// Array de comprobacion dia mes
$comp_dm=array(0,0);

// Chequeo fechas iniciales y finales
for ( $i=0$i<;$i++ ) {


$varcheckdate$m_fechas[$i][1], $m_fechas[$i][2],$m_fechas[$i][0]);

if (!
$var// si la fecha esta mal construida

        
$comp_dm[$i]= // mal

    
else


        
$comp_dm[$i]= // bien

}

if (
$an== $m_fechas[0][0] || $an== $m_fechas[1][0]) // Compruebo año del buque


        
$comp_a// bien
    
else

        
$comp_a//mal



 // ******BUCLE COPROBACIÓN*****

if ( $comp_a== && $comp_dm[0] == && $comp_dm[1] == 1  ){


// Comprobamos años

   
if ($m_fechas[0][0] > $m_fechas[1][0]) {

    
$resp"INCORRECTO" ;
    return 
$resp;
    exit();

    }
    
// Igual año y comparamos mes
    
   
if ($m_fechas[0][0] == $m_fechas[1][0] && $m_fechas[0][1] >    $m_fechas[1][1]) {

    
$resp"INCORRECTO" ;
    return 
$resp;
    exit();

  }

 
// Igual mes y comparamos día


  
if( $m_fechas[0][1] == $m_fechas[1][1] && $m_fechas[0][2] > $m_fechas[1][2]){

    
$resp"INCORRECTO" ;
    return 
$resp;
    exit();


  }
  
    
$resp"CORRECTO" ;
    return 
$resp;
    exit();

 }
  

     else
     
    
$resp"INCORRECTO" ;
    return 
$resp;
}
?>
Bueno, gracias de antemano por vuestra paciencia y ayuda.

Saludos , terrakeo
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 16:21.