PHP - guardar datos enviados desde la aplicación en PHP a una base de datos

 
Vista:
Imágen de perfil de Antonio
Val: 17
Ha disminuido su posición en 9 puestos en PHP (en relación al último mes)
Gráfica de PHP

guardar datos enviados desde la aplicación en PHP a una base de datos

Publicado por Antonio (5 intervenciones) el 08/11/2019 22:05:47
necesito que esos datos que se piden ahí se guarden en una base de datos, el problema es con la tabla de abajo que lleva campos calculados, cada resultado de cada select debe guardarse en la base de datos, . ¿me podrian ayudar?
hola
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 Lawliet
Val: 998
Bronce
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

guardar datos enviados desde la aplicación en PHP a una base de datos

Publicado por Lawliet (351 intervenciones) el 09/11/2019 23:59:21
Hola!!!

Creo que por lo que te entendí esto es lo que necesitas, tendrías que adaptarlo a tus necesidades para que funcione completamente, así como también cambiar las tablas y conexiones por las tuyas ya que esto es un ejemplo sencillo.

HTML
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
93
94
95
96
97
98
99
100
<html>
	<head>
		<title>Buscador</title>
		<script type="text/javascript" src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
		<script type="text/javascript" src="main.js"></script>
	</head>
	<body>
		<div>
			<label>Departamento:</label><input type="text" id="departamento" placeholder="Completar informaci&oacute;n">
		</div>
		<div>
			<label>&Aacute;rea/Proceso:</label><input type="text" id="proceso" placeholder="Completar informaci&oacute;n">
		</div>
		<table id="tblDesempenio" border="1">
			<tr>
				<th>Actividades</th>
				<th>Periodo de Evaluaci&oacute;n</th>
				<th>Cantidad Entregables</th>
				<th>Calidad</th>
				<th>Tiempo de Entrega</th>
			</tr>
			<tr>
				<td>
					<input type="text" class="actividades" style="width: 100%;">
				</td>
				<td>
					<select class="periodo-evaluacion" style="width: 100%;">
						<option value="-1">Seleccione</option>
						<option value="1">1</option>
						<option value="2">2</option>
						<option value="3">3</option>
					</select>
				</td>
				<td>
					<select class="cantidad-entregables" style="width: 100%;">
						<option value="-1">Seleccione</option>
						<option value="10">10</option>
						<option value="20">20</option>
						<option value="30">30</option>
					</select>
				</td>
				<td>
					<select class="calidad" style="width: 100%;">
						<option value="-1">Seleccione</option>
						<option value="100">100</option>
						<option value="200">200</option>
						<option value="300">300</option>
					</select>
				</td>
				<td>
					<select class="tiempo-entrega" style="width: 100%;">
						<option value="-1">Seleccione</option>
						<option value="1000">1000</option>
						<option value="2000">2000</option>
						<option value="3000">3000</option>
					</select>
				</td>
			</tr>
			<tr>
				<td>
					<input type="text" class="actividades" style="width: 100%;">
				</td>
				<td>
					<select class="periodo-evaluacion" style="width: 100%;">
						<option value="-1">Seleccione</option>
						<option value="1">1</option>
						<option value="2">2</option>
						<option value="3">3</option>
					</select>
				</td>
				<td>
					<select class="cantidad-entregables" style="width: 100%;">
						<option value="-1">Seleccione</option>
						<option value="10">10</option>
						<option value="20">20</option>
						<option value="30">30</option>
					</select>
				</td>
				<td>
					<select class="calidad" style="width: 100%;">
						<option value="-1">Seleccione</option>
						<option value="100">100</option>
						<option value="200">200</option>
						<option value="300">300</option>
					</select>
				</td>
				<td>
					<select class="tiempo-entrega" style="width: 100%;">
						<option value="-1">Seleccione</option>
						<option value="1000">1000</option>
						<option value="2000">2000</option>
						<option value="3000">3000</option>
					</select>
				</td>
			</tr>
		</table>
		<input type="submit" id="btnGuarar" value="Guardar">
		<div id="response"></div>
	</body>
</html>

No hay mucha explicación en el HTML, sin embargo, es importante mencionar que yo uso la librería de JQuery por lo que es importante agregarla en la sección <head> tal y como podemos observar en la línea 4 del código. Imagino que la información que traerás de tu tabla será desde una base de datos por lo que solo es cuestión de adaptarlo a la consulta para mostrar la tabla dinamicamente.

JS
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
$(document).ready(function() {
	$("#btnGuarar").click(function() {
		var actividades = [];
		var periodos = [];
		var cantidades = [];
		var calidades = [];
		var tiempos = [];
 
		$('#tblDesempenio').find("input.actividades").each(function(){
			actividades.push($(this).val());
		});
 
		$('#tblDesempenio').find("select.periodo-evaluacion").each(function(){
			periodos.push(parseInt($(this).val()));
		});
 
		$('#tblDesempenio').find("select.cantidad-entregables").each(function(){
			cantidades.push(parseInt($(this).val()));
		});
 
		$('#tblDesempenio').find("select.calidad").each(function(){
			calidades.push(parseInt($(this).val()));
		});
 
		$('#tblDesempenio').find("select.tiempo-entrega").each(function(){
			tiempos.push(parseInt($(this).val()));
		});
 
		$.post("controller.php", {cache:false, departamento:$("#departamento").val(), proceso:$("#proceso").val(), actividades:actividades, periodos:periodos,
			cantidades:cantidades, calidades:calidades, tiempos:tiempos}, function(response) {
			$("#response").html(response);
		});
	});
});

Como podrás darte cuenta creo un arreglo para contener la información de cada uno de los elementos de la tabla. Aquí la magia se encuentra en el atributo class que tenemos en nuestro HTML, ya que lo que le estoy diciendo es que dentro de mi tabla con el ID tblDesempenio busca y/o encuentra (Función find() de JQuery) todos los select y/o input que tengan la clase <X> (Selectores de JQuery), posteriormente lo agrego al arreglo correspondiente con la función push(). Finalmente, toda la información como el departamento, proceso, arreglos, etc... Es enviado a través de AJAX a nuestro PHP quien se encargara de guardar la información en base de datos y la respuesta la mostramos en pantalla; es decir, el response de la petición AJAX.

A continuación, te dejo algunas referencias para que puedas investigar más sobre las funciones:

https://api.jquery.com/find/
https://api.jquery.com/each/
https://api.jquery.com/jQuery.post/
https://www.anerbarrena.com/jquery-selectors-selectores-4768/

PHP
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
<?php
	$conn = mysqli_connect('localhost','root','','lawliet');
	mysqli_set_charset($conn,"utf8");
	mysqli_autocommit($conn,false);
 
	$sql = "INSERT INTO tabla_padre(departamento,proceso) VALUES('".$_POST['departamento']."','".$_POST['proceso']."')";
	$result = mysqli_query($conn,$sql);
	if($result) {
		$id = mysqli_insert_id($conn);
		$count = count($_POST['actividades']);
		$sql = "INSERT INTO tabla_hija(id_tala_padre,actividad,periodo,cantidad,calidad,tiempo) VALUES";
		for($i = 0; $i < $count; $i++) {
			$sql.="(".$id.",'".$_POST['actividades'][$i]."','".$_POST['periodos'][$i]."','".$_POST['cantidades'][$i]."','".$_POST['calidades'][$i]."','".$_POST['tiempos'][$i]."')";
			$sql.=($i < $count - 1) ? "," : "";
		}
 
		if(mysqli_query($conn,$sql)) {
			if(mysqli_commit($conn)) {
				echo "Registro guardado correctamente.";
			} else {
				echo "Error al confirmar el guardado: " . mysqli_error($conn);
			}
		}else {
			echo "Error en la consulta secundaria: " . mysqli_error($conn);
		}
	} else {
		echo "Error en la consulta principal: " . mysqli_error($conn);
	}
?>

En este caso lo mejor es deshabilitar el commit como podemos observar en la línea 4 del código, caso contrario cuando guardemos en la tabla padre y ocurrió un error en la tabla hija al momento de guardar, en base de datos se verá el registro de la tabla padre más no el registro de la tabla hija por lo cual ese registro ya no es "funcional" debido a que por cada registro padre siempre tendrá mínimo un registro hijo.

Formamos la consulta y validamos la ejecución de la consulta padre, si fue correcta procedemos con la obtención del último id guardado tal y como podemos en la línea 9.

Hacemos un count tal y como podemos observar en la línea 10 ya que ese será el tamaño de nuestro arreglo a recorrer, como el tamaño de nuestros arreglos es el mismo para todos, nos es suficiente con obtener el tamaño de un arreglo y utilizar ese valor para recorrer todos los arreglos en un solo for tal y como podemos observar en la línea 12, para posteriormente hacer la estructura del insert de la tabla hija pasando como id el valor el id de la tabla padre.

Finalmente validamos la ejecución de la consulta hija, si fue correcto procedemos con la confirmación en base de datos; es decir, realizamos el commit como podemos ver en la línea 18.

Igualmente, te dejo algunas referencias para que puedas investigar más sobre las funciones:

https://www.php.net/manual/es/mysqli.set-charset.php
https://www.php.net/manual/es/mysqli.autocommit.php
https://www.php.net/manual/es/mysqli.insert-id.php
https://www.php.net/manual/es/mysqli.commit.php

Te recomiendo ampliamente revisar la documentación para poder completar tu trabajo, ya que como mencione al inicio de esta publicación, es solamente un ejemplo sencillo, práctico, rápido y funcional del problema planteado.

Sin más que comentar, quedo al pendiente de cualquier duda y/o comentario.

Suerte!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de Antonio
Val: 17
Ha disminuido su posición en 9 puestos en PHP (en relación al último mes)
Gráfica de PHP

guardar datos enviados desde la aplicación en PHP a una base de datos

Publicado por Antonio (5 intervenciones) el 10/11/2019 03:34:29
muchisimas gracias deberas, cualquier duda te la hare llegar eres un crack.
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 Antonio
Val: 17
Ha disminuido su posición en 9 puestos en PHP (en relación al último mes)
Gráfica de PHP

guardar datos enviados desde la aplicación en PHP a una base de datos

Publicado por Antonio (5 intervenciones) el 14/11/2019 18:24:16
buenas Bro, bueno entonces en este ejemplo tu también empleaste 2 tablas?
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