0

yo ya tengo mi formulario y mis validaciones hechas, lo que enrealidad quiero es que cuando introduzca informacion en las cajas de texto (input) del formulario y cuando deje alguna caja de texto (input) vacias o con la valiadacion incorrecta, no se borre los campos que estan correctos al momento de que se actualiza el formulario para mostrar el mensaje de error

Veran tengo mi formulario.php

<div class="form-group">
  <label>Nombre(s) del socio</label>
     <input type="text" name="nom" class="form-control" placeholder="Ingrese nombre...">
 </div>
 <?php     
   if(isset($_SESSION['error1'])){
      echo "<div class='alert alert-danger'>".$_SESSION['error1']."</div>";
         }else{
          echo "";
         }
          unset($_SESSION['error1']);
    ?>
  <!-- /.form-group -->

  <div class="form-group">
    <label>Apellido Paterno</label>
      <input type="text" name="paterno" class="form-control" placeholder="Ingrese apellido...">
     </div>
      <?php     
       if(isset($_SESSION['error2'])){
         echo "<div class='alert alert-danger'>".$_SESSION['error2']."</div>";
                }else{
                    echo "";
                }
                unset($_SESSION['error2']);
              ?>
              <!-- /.form-group -->

              <div class="form-group">
                <label>Apellido Materno</label>
                <input type="text" name="materno" class="form-control" placeholder="Ingrese apellido...">
              </div>
              <?php     
                if(isset($_SESSION['error3'])){
                    echo "<div class='alert alert-danger'>".$_SESSION['error3']."</div>";
                }else{
                    echo "";
                }
                unset($_SESSION['error3']);
              ?>
              <!-- /.form-group -->

y tengo el archivo de mis validaciones.php

<?php
 session_start();
    $nombre = $_POST["nom"];
    $paterno = $_POST["paterno"];
    $materno = $_POST["materno"];
$errores = array();

    if($nombre == ""){
        $errores[] = true;
        $_SESSION["error1"] = "¡Campo vacío! Ingrese el dato solicitado.";
    }
    if($paterno == ""){
        $errores[] = true;
        $_SESSION["error2"] = "¡Campo vacío! Ingrese el dato solicitado.";
    }
    if($materno == ""){
        $errores[] = true;
        $_SESSION["error3"] = "¡Campo vacío! Ingrese el dato solicitado.";
    }
   if(count($errores)>0){
        header("Location: form_add.php");
    }else{
    //aqui hago la consulta para agrgar los datos a la BD


       $_SESSION['exito']="¡Registro éxitoso!";
                header("Location: lista_socios.php");
}
?>
Anthony
  • 15
  • 1
  • 6

1 Answers1

1

En cada uno de los inputs que tienes en tu formulario, deberás añadir el atributo value y darle el valor ingresado por el usuario.

<input value="<?=$nombre?>" type="text" name="materno" class="form-control" placeholder="Ingrese apellido...">

Para adaptarlo a tu código lo puedes hacer de la siguiente manera:

En validaciones.php cuando compruebas que hay un error y debes de volver al formulario, debes de pasarle los valores que el usuario había introducido, puedes hacerlo por sesiones o por por GET.

Ejemplo GET (El usuario vería los parámetros en la URL)

if(count($errores)>0){
     header('Location: form_add.php?nombre='.$nombre.'&paterno='.$paterno);
}

Ejemplo SESIONES (Ocultarlo a la vista del usuario)

 if(count($errores)>0){
     $_SESSION['nombre'] = $nombre;
     $_SESSION['paterno'] = $paterno;
     header('Location: form_add.php');
 }

Ahora en formulario.php, debes de mostrar los valores que mandas en validaciones.php La funcionalidad de los siguientes códigos es comprobar si $_SESSION[] o $_GET[] tienen algo definido si es así pasarle el valor a una variable y sino iniciar esa variable en un valor vacío.

Ejemplo con sesiones:

if(isset($_SESSION['nombre'])){ $nombre = $_SESSION['nombre']; }else{ $nombre = ''; } 
if(isset($_SESSION['paterno'])){ $paterno = $_SESSION['paterno']; }else{ $paterno = ''; } 

Ejemplo con GET:

if(isset($_GET['nombre'])){ $nombre = $_GET['nombre']; }else{ $nombre = ''; } 
if(isset($_GET['paterno'])){ $paterno = $_GET['paterno']; }else{ $paterno = ''; } 

Ambas dos son muy similares, esta es la parte común de ambos ejemplos, deberás seguir los ejemplos para cada uno de los inputs:

<input value="<?=$paterno?>" type="text" name="paterno" class="form-control" placeholder="Ingrese apellido...">

PD: Deberías de leer cómo evitar una inyección sql y también ¿Cómo evitar la inyección SQL en PHP?, te lo comento porque he visto el siguiente código y no haces uso de real_escape_string:

$nombre = $_POST["nom"];
$paterno = $_POST["paterno"];
$materno = $_POST["materno"];

Si realizas una consulta a la base de datos con alguna de las variables anteriores tal y como están tu código es vulnerable a inyecciones sql.

AntoTGa
  • 727
  • 6
  • 20
  • Disculpa y donde declaro la variable para que no me salga el error del que hace mencion.. Disculpe es que apenas me estoy familiarizando con php :( – Anthony Nov 27 '16 at 02:51
  • Antes de responderte, ¿Cómo accedes al archivo validaciones? ¿Mandas allí el formulario o lo incluyes en el código de formulario.php? – AntoTGa Nov 27 '16 at 02:54
  • lo incluyo en el formulario, con el action="" – Anthony Nov 27 '16 at 03:00
  • @Anthony He modificado mi respuesta, quizás ahora te aclare un poco más las ideas. – AntoTGa Nov 27 '16 at 03:18
  • excelente, eres genial, muchas gracias!! – Anthony Nov 27 '16 at 03:20
  • @Anthony Me alegra de que te haya servido, si tienes cualquier duda de cómo funciona algún fragmento del código, puedes dejarla por aquí. – AntoTGa Nov 27 '16 at 03:22
  • Disculpa ya por ultimo, como se le podria hacer para que no quede almacenada los datos en los inputs? porque ya termine de hacer el registro, ya refresco la pagina y cuando vuelvo a colocarme en el formulario, sigue pareciendo la informacion que introduje anteriormente.. – Anthony Nov 27 '16 at 03:37
  • Con `unset($_SESSION['nombre']);` deja de existir la sesión mencionada. – AntoTGa Nov 27 '16 at 03:39
  • ese lo pongo dentro del input value="=$nombre?>" o dentro de esto; if(isset($_SESSION['nombre'])){ $nombre = $_SESSION['nombre']; }else{ $nombre = ''; } – Anthony Nov 27 '16 at 03:43
  • 1
    @AntoTGa está muy bien la recomendación para evitar la inyección SQL, pero conviene usar [sentencias preparadas](http://es.stackoverflow.com/a/18233/127) – Mariano Nov 27 '16 at 06:46
  • @Anthony ¿Cuando debes de vaciar la sesión? Cuando la hayas utilizado, por ello debes ponerlo después de usarla. – AntoTGa Nov 27 '16 at 15:12
  • @Mariano Toda la razón, me lo guardo para futuras recomendaciones. – AntoTGa Nov 27 '16 at 15:14
  • Muchisimas gracias @Mariano por su conocimiento he aprendido algo nuevo ... Un gran saludo – Anthony Nov 27 '16 at 18:07
  • Igual a usted @AntoTGa por brindarme su conociemiento – Anthony Nov 27 '16 at 18:08