Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Desvío de retorno de validación PHP al value de un input?

Estas en el tema de Desvío de retorno de validación PHP al value de un input? en el foro de PHP en Foros del Web. ¡Hola a todos! He leído que por razones de seguridad, lo ideal es que los datos de un formulario se valide dos veces. La primera ...
  #1 (permalink)  
Antiguo 28/07/2013, 07:38
Avatar de Evair_Peterson  
Fecha de Ingreso: enero-2013
Mensajes: 14
Antigüedad: 11 años, 3 meses
Puntos: 0
Desvío de retorno de validación PHP al value de un input?

¡Hola a todos!


He leído que por razones de seguridad, lo ideal es que los datos de un formulario se valide dos veces. La primera en el lado del cliente con javascript y una segunda vez en el lado del servidor con PHP. La validación con javascript la tengo (casi) lista. Pero estoy teniendo problemas en la validación con PHP...

Código HTML:
<html>
<head>
<title>Formulario</title>
<script type="text/javascript">
function frmRegisterValidate (){	
	var frmRegisterError = document.getElementById("frmRegisterError");
	var frmRegisterUN = document.getElementById("frmRegisterUN").value;
	var frmRegisterPW = document.getElementById("frmRegisterPW").value;
	if (frmRegisterUN == "")
		{
			frmRegisterError.value = "Informe un usuario";
			return false;
		}
	else if (frmRegisterPW == "")
		{
			frmRegisterError.value = "Informe una contrasena";
			return false;
		}
		document.getElementById("frmRegister").submit();
} 
</script>
</head>

<body>
<form method="post" action="frmRegister.php" id="frmRegister" name="frmRegister" accept-charset="utf-8">
  <label>Nombre de usuario: </label>
  <input type="text" id="frmRegisterUN" value="" name="frmRegisterUN" />
  <br />
  <label>Informe una contrasena: </label>
  <input type="text" value="" id="frmRegisterPW" name="frmRegisterPW">
  <br />
  <label>Se encontro un error: </label>
  <input type="text" value="" id="frmRegisterError" name="frmRegisterError"/>
  <br />
  <input type="button" value="REGISTRAR" id="frmRegister_Button" onClick="frmRegisterValidate ()"/>
</form>
</body>
</html> 
Código PHP:
<?php
if (!empty ($_POST['frmRegisterUN']))
{
    
$frmRegisterUN $_POST['frmRegisterUN'];
}
else
{
    
$frmRegisterUN NULL;
    echo 
"Informe un usuario <br />";
}
if (!empty (
$_POST['frmRegisterPW']))
{
    
$frmRegisterPW $_POST['frmRegisterPW'];
}
else
{
    
$frmRegisterPW NULL;
    echo 
"Informe una contrasena <br />";
}
?>
Esta es una versión muy simplificada del formulario que estoy desarrollando. Como se puede ver, logro hacer la validación de datos en JavaScript y PHP ...

Mi pregunta es: con PHP como puedo hacer para que el mensaje de error se muestre en el value del input llamado frmRegisterError igual que lo que hice con javascript?
  #2 (permalink)  
Antiguo 28/07/2013, 10:02
 
Fecha de Ingreso: junio-2013
Ubicación: En cualquier parte de mi casa
Mensajes: 139
Antigüedad: 10 años, 11 meses
Puntos: 14
Respuesta: Desvío de retorno de validación PHP al value de un input?

Te explico!..el PHP es un lenguaje manejado desde el servidor funciona asi...
el cliente envia la solicitud por el navegador al servidor! el servidor procesa lo enviado con el codigo y luego genera una respuesta HTML la cual es enviada al navegador!
Mientras que el javascript es un lenguaje que trabaja en el lado del cliente o sea en el navegador y es por eso que puedes hacer lo que mencionaste con javascript! ahora hay una alternativa para lo que quieres hacer y es con ajax, te recomiendo que lo uses bajo la libreria jquery..donde podras hacer el envio del form y hacer la validacion y permitir que la respuesta generada por el servidor sea mostrada en el boton de tu formulario como explicaste!

Otra cosa! yo que tu, validaria sin el javascript! ya que actualmente existen otra tecnologia mas facil de implementar que son los atributos de las etiquetas de HTML 5
como lo es required o el type de los campos como number,email..etc!

Hace la misma funcion que con un javascript y hasta mejor..ademas sufre de las mismas debilidades por ser manejado del lado del cliente!
  #3 (permalink)  
Antiguo 28/07/2013, 10:15
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: Desvío de retorno de validación PHP al value de un input?

El truco está en validar en el mismo documento (es decir, el form action apunta al mismo documento que contiene el form) y generar reportes de error:

Código PHP:
Ver original
  1. <?php
  2. //reporte de errores
  3. $errors = array();
  4.  
  5. //compruebas envio
  6. if(isset($_POST['submit'])) {
  7.  
  8.     //recuperas datos
  9.     $name = (isset($_POST['name'])? $_POST['name']:NULL);
  10.    
  11.     //validacion
  12.     if($name !== NULL && strlen($name) > 0) {
  13.         //validacion ok
  14.                 return;
  15.     }
  16.     else {
  17.         $errors[] = "Indique un nombre";
  18.     }
  19. }
  20. ?>
  21. <html><head>
  22. <!-- aquí va el js -->
  23. </head><body>
  24.  
  25. <form action="" method="POST">
  26.     <?php
  27.     //vuelca los errores encontrados
  28.     foreach($errors as $error) {
  29.         echo "<div class=\"error_class_style\">".$error."</div><br />";
  30.     }
  31.     ?>
  32.     <label for="name">Nombre</label><br />
  33.     <input type="text" name="name" value="" />
  34.     <br /><br />
  35.     <input type="submit" name="submit" value="submit" />
  36. </form>
  37.  
  38. </body></html>

Cuando obtienes la validacion favorable solo tienes que aplicar las operaciones para las que envias los datos, o redirigir al documento que lo hace o lo que quieras, el return te asegura que no se reenviará el documento del form cuando la validacion es correcta.

A ver si te sirve de ayuda

Saludos
vosk
  #4 (permalink)  
Antiguo 28/07/2013, 10:15
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: Desvío de retorno de validación PHP al value de un input?

Ahi va, perdona edward1994 que acabo de colgar mi post sin darme cuenta del tuyo :)

Saludos
vosk
  #5 (permalink)  
Antiguo 28/07/2013, 10:18
 
Fecha de Ingreso: junio-2013
Ubicación: En cualquier parte de mi casa
Mensajes: 139
Antigüedad: 10 años, 11 meses
Puntos: 14
Respuesta: Desvío de retorno de validación PHP al value de un input?

Tranquil@! jaja...de todas formas como lo dices! no hace lo que el desea! que es mostrar el error en el boton del formulario! y eso lo debe hacer como le explique anteriormente!
  #6 (permalink)  
Antiguo 28/07/2013, 10:47
Avatar de Evair_Peterson  
Fecha de Ingreso: enero-2013
Mensajes: 14
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Desvío de retorno de validación PHP al value de un input?

Cita:
Iniciado por vosk Ver Mensaje
El truco está en validar en el mismo documento (es decir, el form action apunta al mismo documento que contiene el form) y generar reportes de error:

Código PHP:
Ver original
  1. <?php
  2. //reporte de errores
  3. $errors = array();
  4.  
  5. //compruebas envio
  6. if(isset($_POST['submit'])) {
  7.  
  8.     //recuperas datos
  9.     $name = (isset($_POST['name'])? $_POST['name']:NULL);
  10.    
  11.     //validacion
  12.     if($name !== NULL && strlen($name) > 0) {
  13.         //validacion ok
  14.                 return;
  15.     }
  16.     else {
  17.         $errors[] = "Indique un nombre";
  18.     }
  19. }
  20. ?>
  21. <html><head>
  22. <!-- aquí va el js -->
  23. </head><body>
  24.  
  25. <form action="" method="POST">
  26.     <?php
  27.     //vuelca los errores encontrados
  28.     foreach($errors as $error) {
  29.         echo "<div class=\"error_class_style\">".$error."</div><br />";
  30.     }
  31.     ?>
  32.     <label for="name">Nombre</label><br />
  33.     <input type="text" name="name" value="" />
  34.     <br /><br />
  35.     <input type="submit" name="submit" value="submit" />
  36. </form>
  37.  
  38. </body></html>

Cuando obtienes la validacion favorable solo tienes que aplicar las operaciones para las que envias los datos, o redirigir al documento que lo hace o lo que quieras, el return te asegura que no se reenviará el documento del form cuando la validacion es correcta.

A ver si te sirve de ayuda

Saludos
vosk
Cita:
Iniciado por edward1994 Ver Mensaje
Te explico!..el PHP es un lenguaje manejado desde el servidor funciona asi...
el cliente envia la solicitud por el navegador al servidor! el servidor procesa lo enviado con el codigo y luego genera una respuesta HTML la cual es enviada al navegador!
Mientras que el javascript es un lenguaje que trabaja en el lado del cliente o sea en el navegador y es por eso que puedes hacer lo que mencionaste con javascript! ahora hay una alternativa para lo que quieres hacer y es con ajax, te recomiendo que lo uses bajo la libreria jquery..donde podras hacer el envio del form y hacer la validacion y permitir que la respuesta generada por el servidor sea mostrada en el boton de tu formulario como explicaste!

Otra cosa! yo que tu, validaria sin el javascript! ya que actualmente existen otra tecnologia mas facil de implementar que son los atributos de las etiquetas de HTML 5
como lo es required o el type de los campos como number,email..etc!

Hace la misma funcion que con un javascript y hasta mejor..ademas sufre de las mismas debilidades por ser manejado del lado del cliente!


Gracias por sus respuestas al topico. Bueno....


Vosk, el "gran" problema que tengo y que busco solución es que, cuando se ejecuta la segunda validación con el PHP si se encuentra algún error se va generar un mensaje de advertencia. Pero necesito rellenar en value de un campo input de tipo texto especifico con el contenido de ese mensaje. Con javascript es posible hacerlo con algo +/- así: frmRegisterError.value = "el texto que va rellenar el input".

Pero... Cómo hacer igual con la verificación PHP?

edward1994, no sé si las etiquetas de HTML5 me podría ayudar en eso que necesito. Como he dicho, esa es una versión muy simplificada del formulario que estoy desarollando... Para que comprendas mejor que habrá en el, le dejo abajo el contenido del formulario y el codigo completo para la validacion javascript. Asi mismo, hay mucho más que mejorarse en la validación JS, que por ahora es basica apenas para la fase de prueba para la evaluación de sus características funcionales. Ahora acerca de las librerias JQuery sé que son buenísimas, aunque por ahora no tengo conocimiento de como usarselas. Pero por estos momento, ya se me esta funcionando la función de evaluación en el lado del cliente, quisiera hacer que funcionara el mismo en el lado del servidor. En otro momento sí iba estudiar mejor esa libreria para poder quizá cambiar el codigo de una manera que funcione mejor y de modo más simple. En un otro sítio web vi uno diciendo que se podría hacer algo semejando a lo que necesito con sessions, pero ni tampoco puedo imaginar como hacerlo. No sé si usted podría ayudarme en eso?



Agradezco por la atención de ustedes.
Saludos desde Brasil, Evair.
  #7 (permalink)  
Antiguo 28/07/2013, 10:53
Avatar de Evair_Peterson  
Fecha de Ingreso: enero-2013
Mensajes: 14
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Desvío de retorno de validación PHP al value de un input?

Aqui sigue el codigo que se me olvide de pegar para que lo puedan comprender mejor...

Código HTML:
<form method="post" action="PHP/frmRegister.php" id="frmRegister" name="frmRegister" accept-charset="utf-8">
        <label>
        <header>
          <h2>Registre-se grátis!</h2>
        </header>
        </label>
        <input type="text" class="frmRegisterText" maxlength="20"  value="Nome de usuário" id="frmRegisterUN" name="frmRegisterUN"
          onfocus="if (this.value=='Nome de usuário') {this.value = ''; this.style.color='#303030'; this.style.backgroundColor='#FFFFFF';}"
          onblur="if (this.value=='') {this.value = 'Nome de usuário'; this.style.color='#C0C0C0';}" />
        <input type="text" class="frmRegisterText" value="Informe seu e-mail" id="frmRegisterEM" name="frmRegisterEM"
          onfocus="if (this.value=='Informe seu e-mail') {this.value = ''; this.style.color='#303030'; this.style.backgroundColor='#FFFFFF';}"
          onblur="if (this.value=='') {this.value = 'Informe seu e-mail'; this.style.color='#C0C0C0';}" />
        <input type="text" class="frmRegisterText" value="Confirme seu e-mail" id="frmRegisterEM2" name="frmRegisterEM2" onKeyDown="return frmRegisterValidateBlock (event)"
          onfocus="if (this.value=='Confirme seu e-mail') {this.value = ''; this.style.color='#303030'; this.style.backgroundColor='#FFFFFF';}"
          onblur="if (this.value=='') {this.value = 'Confirme seu e-mail'; this.style.color='#C0C0C0';}" />
        <input type="text" class="frmRegisterText" value="Digite uma senha"  id="frmRegisterPW" name="frmRegisterPW"
          onfocus="if (this.value=='Digite uma senha') {this.value = ''; this.style.color='#303030'; this.style.backgroundColor='#FFFFFF';
          this.style.fontSize='30px'; this.type='password'; this.style.letterSpacing='3px';}"
          onblur="if (this.value=='') {this.value = 'Digite uma senha'; this.style.color='#C0C0C0'; this.style.fontSize='18px'; this.type='text'; this.style.letterSpacing='1px';}" />
        <input type="text" class="frmRegisterText" value="Confirme sua senha"  id="frmRegisterPW2" name="frmRegisterPW2"onKeyDown="return frmRegisterValidateBlock (event)"
					onfocus="if (this.value=='Confirme sua senha') {this.value = ''; this.style.color='#303030'; this.style.backgroundColor='#FFFFFF';
          this.style.fontSize='30px'; this.type='password'; this.style.letterSpacing='3px';}"
          onblur="if (this.value=='') {this.value = 'Confirme sua senha'; this.style.color='#C0C0C0'; this.style.fontSize='18px'; this.type='text'; this.style.letterSpacing='1px';}" />
        <select id="frmRegisterCO" name="frmRegisterCO"
          onfocus="{this.style.color='#303030'; this.style.backgroundColor='#FFFFFF';}"
          onBlur="if (document.getElementById('frmRegisterCountry').value=='Select') {this.style.color='#C0C0C0';}">
          <option selected value="Select">Selecione seu país</option>
          <option disabled></option>
          <option value="af">Afeganistão</option>
          <option value="za">África do Sul</option>
          <option value="al">Albânia</option>
          <option value="de">Alemanha</option>
          <option value="ad">Andorra</option>
          <option value="ao">Angola</option>
          <option value="ag">Antígua e Barbuda</option>
          <option value="sa">Arábia Saudita</option>
          <option value="dz">Argélia</option>
          <option value="ar">Argentina</option>
          <option value="am">Armênia</option>
          <option value="au">Austrália</option>
          <option value="at">Áustria</option>
          <option value="az">Azerbaidjão</option>
          <option value="bs">Bahamas</option>
          <option value="bd">Bangladesh</option>
          <option value="bb">Barbados</option>
          <option value="bh">Barein</option>
          <option value="by">Belarus</option>
          <option value="be">Bélgica</option>
          <option value="bz">Belize</option>
          <option value="bj">Benin</option>
          <option value="bo">Bolívia</option>
          <option value="ba">Bósnia-Herzegóvina</option>
          <option value="bw">Botsuana</option>
          <option value="br">Brasil</option>
          <option value="bn">Brunei</option>
          <option value="bg">Bulgária</option>
          <option value="bf">Burkina Faso</option>
          <option value="bi">Burundi</option>
          <option value="bt">Butão</option>
          <option value="...">LOS OTROS PAÍSES</option>
        </select>
        <label>
        <h5>Ao clicar no botão REGISTRAR você declara que leu, entendeu e aceita nossos
          <a href="#">Termos e condições</a>
          e a nossa
          <a href="#">Política de privacidade</a>
          .</h5>
        </label>
        <input type="text" id="frmRegisterError" value="" />
        <input type="button" value="REGISTRAR" id="frmRegister_Button" onClick="frmRegisterValidate ()"/>
      </form> 
Cita:
function frmRegisterValidate (){
var frmRegisterError = document.getElementById("frmRegisterError");
var frmRegisterUN = document.getElementById("frmRegisterUN").value;
var frmRegisterUNSp = frmRegisterUN.indexOf (' ');
var frmRegisterEM = document.getElementById("frmRegisterEM").value;
var frmRegisterEMAt = frmRegisterEM.indexOf ('@');
var frmRegisterEMDot = frmRegisterEM.lastIndexOf ('.');
var frmRegisterEMDom = frmRegisterEM.substring (frmRegisterEMDot).length;
var frmRegisterEM2 = document.getElementById("frmRegisterEM2").value;
var frmRegisterPW = document.getElementById("frmRegisterPW").value;
var frmRegisterPW2 = document.getElementById("frmRegisterPW2").value;
var frmRegisterCO = document.getElementById("frmRegisterCO").value;

if (frmRegisterUN == "Nome de usuário")
{
frmRegisterError.value = "Digite um nome de usuário";
frmRegisterValidateError ();
return false;
}
else if (frmRegisterUN.length < 5 || frmRegisterUN.length > 20)
{
frmRegisterError.value = "Seu nome de usuário deve conter de 5 à 20 caracteres";
frmRegisterValidateError ();
return false;
}
else if (frmRegisterUNSp > -1)
{
frmRegisterError.value = "Seu nome de usuário não pode conter espaços";
frmRegisterValidateError ();
return false;
}
else if (frmRegisterEM == "Informe seu e-mail")
{
frmRegisterError.value = "Informe um e-mail para registro";
frmRegisterValidateError ();
return false;
}
else if (frmRegisterEMAt < 1 || frmRegisterEMDot < 3 || frmRegisterEMAt > frmRegisterEMDot || [frmRegisterEMDot - frmRegisterEMAt] < 2 || frmRegisterEMDom <2 || frmRegisterEM.length < 5 || frmRegisterEM.length > 75)
{
frmRegisterError.value = "O e-mail informado é inválido";
frmRegisterValidateError ();
return false;
}
else if (frmRegisterEM2 == "Confirme seu e-mail")
{
frmRegisterError.value = "Digite novamente seu endereço de e-mail";
frmRegisterValidateError ();
return false;
}
else if (frmRegisterEM != frmRegisterEM2)
{
frmRegisterError.value = "Os e-mails informados não conferem";
frmRegisterValidateError ();
return false;
}
else if (frmRegisterPW == "Digite uma senha")
{
frmRegisterError.value = "Digite uma senha";
frmRegisterValidateError ();
return false;
}
else if (frmRegisterPW.length < 6 || frmRegisterPW.length > 15)
{
frmRegisterError.value = "A senha deve ter entre 6 e 15 caracteres";
frmRegisterValidateError ();
return false;
}
else if (frmRegisterPW2 == "Confirme sua senha")
{
frmRegisterError.value = "Digite novamente sua senha";
frmRegisterValidateError ();
return false;
}
else if (frmRegisterPW != frmRegisterPW2)
{
frmRegisterError.value = "As senhas informadas não conferem";
frmRegisterValidateError ();
return false;
}
else if (frmRegisterCO == "Select")
{
frmRegisterError.value = "Selecione seu país";
frmRegisterValidateError ();
return false;
}
document.getElementById("frmRegister").submit();
}

function frmRegisterValidateError () {
document.getElementById("frmRegisterCO").style.mar ginBottom = "10px";
document.getElementById("frmRegisterError").style. visibility = "visible";
document.getElementById("frmRegisterError").style. height = "20px";
}

function frmRegisterValidateBlock (evt)
{
var ctrl=window.event.ctrlKey;
var tecla=window.event.keyCode;
if (ctrl && tecla==86)
{
event.keyCode=0; event.returnValue=false;
// Incrementar código com bloqueio ao botão direito
}
}
La función function frmRegisterValidateError () del archivo JS esta porque frmRegisterError con visibility=hidden en la CSS, y solo se muestra cuando hay esos mensajes de error generados en la validación.


Gracias, Evair.
  #8 (permalink)  
Antiguo 28/07/2013, 10:59
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: Desvío de retorno de validación PHP al value de un input?

Vuelca el reporte de error en el campo de texto:

Código PHP:
Ver original
  1. <input type="text" value="<?php
  2. if($existe_un_reporte_de_error) {
  3.     echo $reporte_de_error;
  4. }
  5. ?>" id="frmRegisterError" name="frmRegisterError"/>

Saludos
vosk
  #9 (permalink)  
Antiguo 28/07/2013, 11:06
 
Fecha de Ingreso: junio-2013
Ubicación: En cualquier parte de mi casa
Mensajes: 139
Antigüedad: 10 años, 11 meses
Puntos: 14
Respuesta: Desvío de retorno de validación PHP al value de un input?

Ok, bueno podriamos juntar la respuesta que te dio Vosk con la mia! asumiendo que envias el formulario en la misma pagina! pues esa es la forma como se me ocurre, y es que al procesar los datos en la misma pagina la respuesta del php la des en un javascript ejemplo...

Código PHP:
Ver original
  1. <?php
  2. $datos=$_POST['datos_obtenidos'];
  3. if(isset($_POST['datos'])){
  4. //el proceso en caso de que todo este correcto
  5. }else{
  6. //si hay un error, la respuesta me la muestra en el boton asi...
  7.  
  8. ?>
  9. <script>
  10. var frmRegisterError = document.getElementById("frmRegisterError");
  11. frmRegisterError.value = "Debes enviar un dato";
  12. </script>
  13. <?php
  14.  
  15.  
  16.  
  17. }
  18.  
  19. ?>

Eso como te comente, asumiendo que envies el formulario a la misma pagina! ahora..puedes hacer lo mismo con sessiones o con la variable $_GET en caso de que proceses el formulario en otra pagina!
y es asi...

envias el formulario..procesas lo enviado y la respuesta que generes sea una redireccion a la pagina de formulario! pero asignando una variable por la URL en esa redireccion o creando una session..el ejemplo seria algo asi..

Luego que envias el formulario
//pagina de proceso
if(isset($_POST['dato'])){
//en caso de que todo este bien, procesa!
}else{

//primera opcion
echo '<META HTTP-EQUIV=Refresh CONTENT="0; URL=paginaAnterior.php?respuesta="Hubo un erro con el dato enviado"">';

//segunda opcion
$_SESSION['respuesta']="Hay un error con el dato enviado"
y redireccionas..a la pagina!

}

ok, ya en esa pagina anterior!

en el formulario deberias de tener una validacion para mostrar el boton, para el primer caso...

if(isset($_GET['respuesta'])){
//muestras el boton o lo que quieras y en el value le colocas el $_GET['respuesta'];
}else{
//de lo contrario muestras el boton solo, normal pues seria como si no hubiese sido enviado el formulario
}

//segundo caso con la session, es practicamente lo mismo! solo que...deberias mostrar la respuesta una sola vez! o sea quedando asi

if(isset($_SESSION['respuesta'])){
//muestras el boton y en el value colocas el $_SESSION['respuesta']
y aca es lo diferente a la anterior! que invalidaras esa variable con unset($_SESSION['respuesta']);
eso para que si se recarga la pagina ya no entre en esta sección de la validacion si no en la siguiente..

}else{
//esta seria la otra seccion de la validacion!...aca mostrarias lo que es el boton solo para enviar
}


De igual forma te envio saludos desde mi Venezuela querida! :D
  #10 (permalink)  
Antiguo 28/07/2013, 13:07
Avatar de Evair_Peterson  
Fecha de Ingreso: enero-2013
Mensajes: 14
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Desvío de retorno de validación PHP al value de un input?

Bueno... Tengo resuelto la problemilla que dejé en ese topico. Para solucionarla hice una mexcla de todo lo que me han dicho Vosk y edward1994, luego tuve que hacer algunos arreglos para que me funcionara bien en todo lo que necesito.


Probé con los codigos que me dejó en el edward1994 en su ultimo mensaje, una mexcla del javascript con el PHP, pero no sé por cual motivo no me funcionó la ejecución de la parte del JS. Pero bueno, segui probando de otras maneras...

La manera que me funcionó perfectamente fué la que me dijo Vosk, la de usar PHP en el interior del value del input. En esa parte le metí ese código para que funcionara bien:

Código HTML:
<input type="text" id="frmRegisterError" value="<?php if($frmRegisterError){echo $frmRegisterError;}?>" /> 
Yo estaba usando la validación en otro archivo porque creo ser mejor para la organización del codigo, y queda más simples para una posible modificación en el futuro. Pero si no me funcionaba asi, luego le cambié todo el codigo poniendolo todo en el encabezado de la pagina. Tan solo para probar si me iba funcionar de esa manera, hice el seguiente codigo:

Código PHP:
<?php
$frmRegisterError 
"";
if (!empty(
$_POST))
{
$frmRegisterError "ERRO PHP";}
?>
Y con eso me funcionó muy bien: me cambió el value de la input frmRegisterError como quisiera. Pero aún tenia una problemilla: esa input tenia visibility:hidden en una CSS. Aunque me cambiara el value de la input, no era mostraba el mensaje. Asi que hice un arreglo al archivo JS agregando una función más a el:

Código:
window.onload = function ()
{
	var frmRegisterError = document.getElementById("frmRegisterError").value;
	if (frmRegisterError != "")
	{
		frmRegisterValidateError ();
	}
}
Con eso luego que se carga nuevamente la pagina seguido del submit, se verifica el value del input, y si tiene cualquier valor diferente de "" se va ejecutar el codigo para que se muestre el contenido de frmRegisterError, que antes estaba invisible.

Pero aún no estaba en todo contento. Quisiera tener el codigo en un otro archivo para que se pueda cambiarlo de modo más fácil. Pensé en probar lo de las sessions como me dijo edward1994, pero luego me vino a la mente que iba volver algo más lento el sistema, ya que tendría que cargar la pagina con el codigo PHP para después volver a la pagina anterior. Pero me vino otra idea a la mente, le puse todo el codigo PHP en un archivo externo como quisiera todo el tiempo, pero para evitar eso de volver lento la carga de las paginas, le puse tan solo esa unica linea de codigo en el encabezado de la misma:

Código PHP:
<?php
include '/PHP/frmRegister.php';
?>
Con eso, aunque el codigo esté en un otro archivo, el sera cargado junto a la pagina principal y después sera como si fuera parte de ella, avitando con eso el retraso en la carga de la pagina despues del submit!!! Pues claro que ahora que sé que me funciona de esa manera, voy cambiar el codigo PHP por el de la validación...

En Brasil llamamos eso que hice de GAMBIARRAS, pero no sé como traducirlo en una unica palabra al español. La definición es: constituye un acto de solución improvisada .Pero que generalmente unfciona... O nooo.... Jejejeje

Agradezco mucho a Vosk y edward1994, pues realmente me fueron muy utiles toda la ayuda que me han dado. Espero un dia poder pagarlos.

Saludos desde Brasil, Evair.
  #11 (permalink)  
Antiguo 28/07/2013, 16:13
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: Desvío de retorno de validación PHP al value de un input?

"...Con eso, aunque el codigo esté en un otro archivo, el sera cargado junto a la pagina principal y después sera como si fuera parte de ella, avitando con eso el retraso en la carga de la pagina despues del submit!!! Pues claro que ahora que sé que me funciona de esa manera, voy cambiar el codigo PHP por el de la validación..."

Ok esa es la forma correcta, pero incluyelo solo cuando tengas el submit. Normalmente eso se usa cuando se necesitan varios tipos de validaciones diferentes aplicados a un formulario de datos variables, con tantos archivos externos de validaciones como posibilidades de validacion, y en todos los archivos la funcion de validacion bajo el mismo nombre; por contra de lo que consideras de usar el externo para no retrasar la carga, se usa para automatizar las validaciones.

La otra forma que te comentó edward1994 tambien tendría que haberte funcionado, comprueba que no haya ningun error de tipeo.

Saludos
vosk
  #12 (permalink)  
Antiguo 30/07/2013, 07:26
Avatar de Evair_Peterson  
Fecha de Ingreso: enero-2013
Mensajes: 14
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Desvío de retorno de validación PHP al value de un input?

Hola a todos nuevamente...


Tengo un nuevo problema que es resultado de todo lo que estábamos discutiendo aquí antes...

Como he dicho en mi último mensaje, usé la forma que me propuso vosk para poder rellenar el value del input como quisiera antes. Y eso me funcionó muy bien en todos los navegadores, excepto en el Mozilla Firefox.


Me cuesta creerlo, pero incluso en la desgracia que es el IE me funciona bien! Pero en Firefox no!

Asi que que decidi probar nuevamente la manera que me propuso edward1994, que como también me dijo vosk era para funcionar bastante bien. Incluso creo que con ese modo me quedaria un tanto más "limpio" el codigo, ya que podria hacerlo en gran parte de modo dinamico. Aunque me funcionó bastante bien el primer modo, creo que me quedó demasiado lleno el codigo.

Igual que antes, aún no logré hacer funcionarme el segundo modo, mexclando el PHP con javascript...
La pagina funciona así: Al hacer click en el botón REGISTRAR, se llama la función javascript JSF (), que es la responsable por la primera validación. Si esta todo OK, esa le da el submit en el formulario que ejecutar la funcion PHP enviar () que es la responsable por la segunda validación... Y si nuevamente esta todo OK, va hacer el login del usuario normal... Para eso, hice unas cuantas pruebas con codigos más simples como ese:


Código HTML:
<form method="post" action="teste.php?function=enviar" id="frmRegister" name="frmRegister" accept-charset="utf-8">
  <label>Nombre de usuario: </label>
  <input type="text" id="frmRegisterUN" value="" name="frmRegisterUN" />
  <br />
  <label>Se encontro un error: </label>
  <input type="text" value="" id="frmRegisterError" name="frmRegisterError"/>
  <br />
  <input type="button" value="REGISTRAR" id="frmRegister_Button"/ onClick="JSF ()">
</form> 
Y en el HEAD de la pagina le puse los codigos javascript y los codigos PHP:

Código:
<script type="text/javascript">
function JSF ()
{
document.getElementById("frmRegister").submit();
}
</script>
Código PHP:
<?php
if($_GET['function'] == "enviar")
{
    
enviar();
}

function 
enviar ()
{
    if (isset(
$_POST))
    {
        
$usuario $_POST['frmRegisterUN'];
        if (
$usuario != "")
        {
            
?>
            <script>
            document.write("OK. EL CODIGO FUNCIONA.");
            </script>
      <?php
        
}
        else
        {
            echo 
"EL NOME DE USUARIO ES REQUERIDO";
        }
    }
}
?>
En ese modo de prueba me funciona perfectamente el codigo. Me devuelve el mensaje con el PHP igual que con el javascript. Con eso pienso que solo necesitaba cambiar el codigo PHP de la función enviar () para rellenar el value del input con el mensaje de error que necesito. Asi que probé ese código:

Código PHP:
<?php
function enviar ()
{
    if (isset(
$_POST))
    {
        
$usuario $_POST['frmRegisterUN'];
        if (
$usuario != "")
        {
            
?>
      <script>
            var error = document.getElementById("frmRegisterError");
            error.value = "OK. EL CODIGO FUNCIONA.";
            </script>
      <?php
        
}
        else
        {
            echo 
"EL NOME DE USUARIO ES REQUERIDO";
        }
    }
}
?>
Pero no sé por cual motivo no me funciona de esa manera. Después de unas cuantas pruebas llegué a la seguiente conclusión: Cuando se tiene javascript dentro del PHP no funciona el "getElementById". Para saber si es cierto eso, cambié la funcion javascript JSF () y la funcion PHP enviar () de ese modo:

Código:
<script type="text/javascript">
function JSF ()
{
var error = document.getElementById("frmRegisterUN").value;
alert (error);
document.getElementById("frmRegister").submit();
}
</script>
Código PHP:
<?php
if($_GET['function'] == "enviar")
{
    
enviar();
}

function 
enviar ()
{
    if (isset(
$_POST))
    {
        
$usuario $_POST['frmRegisterUN'];
        if (
$usuario != "")
        {
            
?>
      <script>
            var error = document.getElementById("frmRegisterUN").value;
            alert (error);
            </script>
      <?php
        
}
        else
        {
            echo 
"EL NOME DE USUARIO ES REQUERIDO";
        }
    }
}
?>
Con eso, si el usuario inserta su username era para ser muestro el mensaje dos veces, pero lo que pasa es que se mustra apenas una. La pagina ejecuta todo el codigo javascript de la funcion JSF (), incluso nos muestra el mensaje que se espera. Pero cuando va ejecutar el javascript internet al PHP, es como si encontrara algun error y no sé ejecuta nada después de usar el "getElementById".


Alguién sabe como corrigir ese problema? No sé qué debo hacer para solucionarlo!

Lo siento lo tan extenso quedó ese mensaje, pero con eso creo que a cualquier persona quedará bastante claro lo que se esta pasando en el codigo...
  #13 (permalink)  
Antiguo 30/07/2013, 15:18
Avatar de rocha7778  
Fecha de Ingreso: mayo-2013
Ubicación: Cartagena Colombia
Mensajes: 79
Antigüedad: 11 años
Puntos: 1
Respuesta: Desvío de retorno de validación PHP al value de un input?

Amivo investiga sobre la tevlogia ajax' el patron modeko vista controlador, con eso haces lo que quieres sin tanto codigo invasivo. Solo es una sugerencia,tendras un codigo mad limpio y fascil de entender.
  #14 (permalink)  
Antiguo 30/07/2013, 16:10
Avatar de Evair_Peterson  
Fecha de Ingreso: enero-2013
Mensajes: 14
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Desvío de retorno de validación PHP al value de un input?

Bueno... Yo que queria ahorrar tiempo usando lo poco que sé, veo en realidad eso esta tomando todo mi tiempo.
Creo sera mejor dejar todo un poco de lado para poder estudiar otras tecnologias , como el AJAX, o a lo menos JQuery que mucho veo en todo lugar.

Gracias a todos.

Etiquetas: formulario, input, javascript, return, validacion
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 15:18.