PHP - donde y como guardar datos temporales

 
Vista:
sin imagen de perfil
Val: 5
Ha aumentado su posición en 28 puestos en PHP (en relación al último mes)
Gráfica de PHP

donde y como guardar datos temporales

Publicado por Francisco Daniel (74 intervenciones) el 13/02/2021 13:02:54
Hola a todos, como siempre gracias por contestar mis dudas en este foro. Estoy haciendo un sistema para registrar curriculum de los usuarios. El problema lo tengo a la hora e cargar los títulos que tiene una persona, ya que tengo que darle la posibilidad que cargue mas de uno. La idea es tener un imput con el nombre del título y un botón agregar donde lo incorpore a una especie de tabla. El tema es que esos datos todavia no se guardan en la base de datos, solo se guardan cuando el usuario termina de cargar todos los datos y hace clic en el boton Guardar Información. Las pregunstas que tengo son varias:
1) como hago para que cuando haga clic en el boton agregar me agregue el titulo a la tabla para visualizarlo.
2) Donde tengo que guardar los datos temporales de los titulos que va cargando la persona? En un array?
3) Tendrá, algún ejemplo de como hacer esto ya que estoy bastante perdido y no se como empezar.

Muchas Gracias
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
sin imagen de perfil

donde y como guardar datos temporales

Publicado por anonymous (53 intervenciones) el 13/02/2021 14:49:46
Los datos de los títulos ya deberían estar creados en la BD, porque es un maestro que alimenta la información del usuario.

Eso es una relación M:M porque un usuario tiene varios títulos, lo que da para una tabla intermedia donde se relacione título con usuario

De manera que tú lo que puedes hacer es cargar una listbox con los diferentes títulos y seleccionar varios, a la hora de grabar, lo hará en dos tablas una con la información del usuario y otra con los títulos que tenga, por cada título seleccionado mediante un checkbox por ejemplo

1. Tecnólogo en XXX
2. Ingeniero en YYY

Así las cosas te queda una tabla con la información del usuario supongo que: Usuario_Id, Documento, Nombres, teléfono, Email...
Otra con los títulos Titulo_Id, Nombre...
Y una más con su propio ID y los ID de las otras dos valga decir Usuario_Id y Titulo_Id

Si tuviésemos el usuario con Id = 580 y es tecnólogo e ingeniero a la vez, esa intermedia nos queda con dos registros así:

Usuario_Titulo_ID Usuario_Id Titulo_Id
1 580 1
2 580 2
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 Mauro
Val: 2.761
Oro
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

donde y como guardar datos temporales

Publicado por Mauro (1048 intervenciones) el 15/02/2021 19:34:14
Hola Francisco:

Lo que puedes usar para ese almacenamiento temporal es el mecanismo de sesiones.

En este video puedes ver algunos ejemplos de cómo tratar con este tipo de situación:


Espero te ayude, cualquier duda consúltame ;)
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
sin imagen de perfil
Val: 393
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

donde y como guardar datos temporales

Publicado por Jefferson (211 intervenciones) el 16/02/2021 05:29:39
Hola amigo Francisco

Dado que no eres muy específico, asumo que en la tabla usuarios tienes un campo para almacenar el título. Ahora bien supongo no tienes más campos para ir almacenando titulo_a, titulo_b, etc .... Y es lógico pues desconoces cuántos títulos pueda tener ese usuario.

Me inclino por la respuesta de Jorge. Debes crear otra tabla si o si, que se llame sub_titulos y con dos campos idusuario y titulo_name.

De crear sesiones para almacenar los subtítulos puede que funcione mientras este activa la página, pero al cerrar sesión .... Adiós luz que te apagaste.

Aunque puedes tratar esas sesiones al momento de insertar los primeros datos, también es válido. El problema es que desconoces cuántos títulos pueda tener ese usuario y para ello tendrías que crear una sesión array.

En fin trabajar con sesiones (respetando la intervención del maestro Mauro) no es recomendable por el tema de la vulnerabilidad. Recordemos que las sesiones fluyen como texto en la URL e inyectarlas es lo más fácil del mundo, ahora imaginemos una variedad de sesiones fluyendo en la URL.? Es caótico.

Entonces que haría yo?
1) Crearía una tabla dinámica dónde mediante un boton agregar tantas columnas requiera el usuario.
2) Cuando se pulse el botón guardar inserto en la tabla usuario lo que tengas para insertar y recorro la tabla dinámica donde guardo lo que consiga en un array y lo envío a insertar en la otra tabla sub_titulos con el idusuario correspondiente.

Espero sea así como visualice tu pregunta. De ser cierto puedes escribir y con gusto te preparo un ejemplo sencillo de cómo hacerlo.

Saludos desde Venezuela
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
sin imagen de perfil
Val: 5
Ha aumentado su posición en 28 puestos en PHP (en relación al último mes)
Gráfica de PHP

donde y como guardar datos temporales

Publicado por Francisco Daniel (74 intervenciones) el 16/02/2021 14:09:31
Muchas Gracias por todos los comentarios. Me sirvieron bastante. Ahora los voy a implementar y les cuento.

Muchas gracias a todos.
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
sin imagen de perfil
Val: 393
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

donde y como guardar datos temporales

Publicado por Jefferson (211 intervenciones) el 16/02/2021 15:14:21
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
83
84
85
86
87
88
89
90
91
92
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<style>
    body,
    html {
        margin: 0;
        padding: 0;
        margin-top: 2.5em;
        box-sizing: border-box;
        width: 100%;
        height: 100%;
        font-size: 14px;
    }
    .container {
        padding-right: 15px;
        padding-left: 15px;
        margin-right: auto;
        margin-left: auto;
    }
</style>
 
<body>
    <div class="container">
        <form id="frm">
            Nombre: <input type="text" name="nombre"><br>
            Apellido: <input type="text" name="apellido"><br>
            Titulo: <input type="text" name="titulo"><button id="mas_titulo">+</button><br>
            <table>
                <tbody>
                </tbody>
            </table>
            <button id="agregar">agregar</button>
        </form>
 
    </div>
<script>
        const tbody = document.querySelector('tbody'); //comentamos el tbody
        let jsonTitulo = []; //comentamos el array
 
        mas_titulo.addEventListener('click', (e) => {
            e.preventDefault();  // evitamos el submit
            var td = []; // comentamos un array para los td
            var cell = tbody.rows.length + 1; // contamos las columnas y vamos incrementando
            var row = tbody.insertRow(0); //creamos la columna
            td[cell] = row.insertCell(0); //creamos la celda
            td[cell].innerHTML = '<input id="titulo_' + cell + '" placeholder="Otro titulo &#8230;"/>'; //inyectamos el input
        });
 
        agregar.addEventListener('click', (e) => {
            e.preventDefault(); // evitamos el submit
            //recorremos el tbody
            document.querySelectorAll("tbody tr").forEach(function(el) {
                item = {}; //preparamos el json
                item[el.firstChild.lastChild.id] = el.firstChild.lastChild.value; //vamos preparando lo que encuentre
                jsonTitulo.push(item); //lo agregamos al array
            });
            fetch("pagina_b.php", { //donde agregas el form
                    method: 'POST',
                    body: new FormData(frm)
                })
                .then(response => response.text())
                .then(data => {
                    // Con esta instruccion recibes en la pagina normal como siempre se hace
                    // $nombre=$_POST['nombre'] , etc...
                    console.log(data);
                });
            fetch("pagina_c.php", {  //donde agregas los sub_titulos
                    method: 'POST',
                    body: JSON.stringify(jsonTitulo),
                    headers: {
                        'Content-Type': 'application/json'
                    }
                })
                .then(response => response.text())
                .then(data => {
                    // Cuando recibas en esta pagina recuerda estas enviado un json
                    // debes recojerlo asi
                    // $json = json_decode(file_get_contents('php://input'), true);
                    // luego le haces un for para recojer los datos e insertas
                    console.log(data);
                });
        });
</script>
 
</body>
 
</html>

Suerte...
Desde Venezuela
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