PHP - Recordar opcion select al volver a la pagina php

 
Vista:

Recordar opcion select al volver a la pagina php

Publicado por ricardo (3 intervenciones) el 05/01/2021 21:46:17
Hola, tengo el siguiente problema , cuando mando un formulario y hay algun campo incorrecto vuelvo a la pagina y quiero que el valor seleccionado en el select se guarde y al volver muestre el que seleccione , lo que conseguido hacer facil con el campo nombre... que son input type="text" con sessiones pero con el select no se como hacerlo , este es el codigo de la pagina donde inserto los datos
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
<?php
$conexion = new PDO('mysql:host=localhost;dbname=dwes_dic2020', 'root', '');
$consultaNacionalidad = $conexion->query('SELECT id ,nacionalidad FROM paises');
$consultaDepartamento = $conexion->query('SELECT id , nombre FROM departamentos');
session_name("sesion");
session_start();
 
 
 
?>
<!DOCTYPE html>
<html lang="es">
<head>
  <meta charset="utf-8">
  <title>
    Empresa - Empleados - Insertar
  </title>
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
 
<body>
<form action="ejercicio-06-03.php" method="post">
  <h1>Insertar Empleado</h1>
 
  <div>
    Nombre<input type="text" name="nombre" value="<?php if(isset($_SESSION["nombre"])){print $_SESSION["nombre"];} ?>"><br><br>
    Apellidos<input type="text" name="apellidos" value="<?php if(isset($_SESSION["apellido"])){print $_SESSION["apellido"];} ?>"><br><br>
    Salario<input type="number" name="salario" value="<?php if(isset($_SESSION["salario"])){print $_SESSION["salario"];} ?>"><br><br>
  Hijos <select name="numhijos">
  <option selected="selected" value="-1">seleccione el numero de hijos</option>
  <option value="0">0</option>
  <option value="1">1</option>
  <option value="2">2</option>
  <option value="3">3</option>
  <option value="4">4</option>
</select><br>
<br>
Nacionalidad <select name="nacionalidad">
<option selected="selected" value="-1">Selecciona nacionalidad</option>
    <?php
 
    while ($row = $consultaNacionalidad->fetch(PDO::FETCH_ASSOC)) {
      print"<option value=$row[id]>$row[nacionalidad]</option>";
    }
 
 
 
    ?>
 
    </select>
    <br>
<br>
Departamento <select name="departamento">
<option selected="selected" value="-1">Selecciona departamento</option>
    <?php
 
    while ($row = $consultaDepartamento->fetch(PDO::FETCH_ASSOC)) {
      print"<option value=$row[id]>$row[nombre]</option>";
    }
 
 
 
    ?>
 
    </select><br>
    <?php
    if(isset($_REQUEST["value"])){
    print $_REQUEST["value"];
    }
    ?>
    <p>
    <input type="submit" name="guardar" value="Guardar"><br>
      <a href="ejercicio-06-01.php">Volver</a>
    </p>
  </div>
  </form>
  <?php
 
session_destroy();
?>
</body>
</html>

y esta es la pagina que lo recibe y me redirecciona a la segunda si algo esta mal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?php
$mensaje="";
$ok=true;
print_r($_REQUEST);
session_name("sesion");
session_start();
 
if($_REQUEST["nombre"]==""){
  $mensaje=$mensaje."No has escrito el nombre<br>";
  $ok=false;
 
}else
$_SESSION["nombre"]=$_REQUEST["nombre"];
if($_REQUEST["apellidos"]==""){
  $mensaje=$mensaje."No has escrito el apellido<br>";
  $ok=false;
 
 
}else
$_SESSION["apellido"]=$_REQUEST["apellidos"];
if($_REQUEST["salario"]==""){
  $mensaje=$mensaje."No has escrito el salario<br>";
  $ok=false;
 
 
}else
$_SESSION["salario"]=$_REQUEST["salario"];
if($_REQUEST["numhijos"]==-1){
  $mensaje=$mensaje."Selecciona el numero de hijos<br>";
 
  $ok=false;
}else
$_SESSION["numhijos"]=$_REQUEST["numhijos"];
if($_REQUEST["nacionalidad"]==-1){
  $mensaje=$mensaje."Selecciona la nacionalidad<br>";
 
  $ok=false;
}else
$_SESSION["nacionalidad"]=$_REQUEST["nacionalidad"];
if($_REQUEST["departamento"]==-1){
  $mensaje=$mensaje."Selecciona el departamento<br>";
  $ok=false;
 
 
}else
$_SESSION["departamento"]=$_REQUEST["departamento"];
 
if(!$ok){
  header("Location:ejercicio-06-02.php?value=$mensaje");
}else{
 
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de joel
Val: 3.828
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Recordar opcion select al volver a la pagina php

Publicado por joel (1269 intervenciones) el 06/01/2021 10:31:30
Creo que seria algo así...

Esto es lo que tienes:
1
2
3
while ($row = $consultaNacionalidad->fetch(PDO::FETCH_ASSOC)) {
  print"<option value=$row[id]>$row[nacionalidad]</option>";
}

y una posibilidad seria:
1
2
3
4
5
6
7
while ($row = $consultaNacionalidad->fetch(PDO::FETCH_ASSOC)) {
    if ($row[nacionalidad]==$_POST["nacionalidad"]) {
        print"<option value=$row[id] selected>$row[nacionalidad]</option>";
    } else {
        print"<option value=$row[id]>$row[nacionalidad]</option>";
    }
}


Te sirve?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Recordar opcion select al volver a la pagina php

Publicado por ricardo (3 intervenciones) el 06/01/2021 17:19:51
Si , me ha servido he tenido que cambiar un par de cosas y ya lo tengo, pero mi duda es sobre todo para el primer select, que le meto los valores en html , no de la base de datos como el ejemplo que has hecho.
Este es el codigo modificado y ya me funciona
1
2
3
4
5
6
7
while ($row = $consultaNacionalidad->fetch(PDO::FETCH_ASSOC)) {
      if (isset($_SESSION["nacionalidad"]) && $_SESSION["nacionalidad"]==$row["id"]) {
          print"<option value=$row[id] selected>$row[nacionalidad]</option>";
      } else {
          print"<option value=$row[id]>$row[nacionalidad]</option>";
      }
  }

Y este es el select al que me refiero , que es el primero que tengo en mi pagina
1
2
3
4
5
6
7
8
Hijos <select name="numhijos">
  <option selected="selected" value="-1">seleccione el numero de hijos</option>
  <option value="0">0</option>
  <option value="1">1</option>
  <option value="2">2</option>
  <option value="3">3</option>
  <option value="4">4</option>
</select><br>

Muchas gracias por la ayuda
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Recordar opcion select al volver a la pagina php

Publicado por ricardo (1 intervención) el 06/01/2021 21:08:09
Actualizo tengo el siguiente codigo para el select , pero me falla algo porque lo estoy pintando porque no se como seleccionar el que ya seleccione, que tengo el valor guardado en una variable
Este es el codigo que tengo
1
2
3
4
5
6
7
8
9
Hijos <select name="numhijos">
  <?php if(isset($_SESSION["numhijos"])){print"<option selected=selected value=$_SESSION[numhijos]>$_SESSION[numhijos]</option>";}?>
  <option value="-1">seleccione el numero de hijos</option>
  <option value="0">0</option>
  <option value="1">1</option>
  <option value="2">2</option>
  <option value="3">3</option>
  <option value="4">4</option>
</select><br>
Y esto es lo que me hace adjunto foto (He seleccionado el tres mando el formulario es erroneo porque hay campos mal y me sale asi el select)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de joel
Val: 3.828
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Recordar opcion select al volver a la pagina php

Publicado por joel (1269 intervenciones) el 07/01/2021 09:16:34
Tienes que poner los option en un array... algo así:

1
2
3
4
5
6
7
8
9
10
11
12
Hijos <select name="numhijos">
    <option selected="selected" value="-1">seleccione el numero de hijos</option>
    <?php
    foreach (range(0,4) as $number) {
        if ($_POST["numhijos"]==="$number") {
            echo "<option value='$number' selected>$number</option>";
        } else {
            echo "<option value='$number'>$number</option>";
        }
    }
    ?>
</select>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Recordar opcion select al volver a la pagina php

Publicado por ricardo (3 intervenciones) el 07/01/2021 17:15:29
Me sirvio , muchas gracias por tu ayuda!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar