PHP - Como insertar o actualizar un registro si existe en la base de datos

   
Vista:

Como insertar o actualizar un registro si existe en la base de datos

Publicado por Jose (5 intervenciones) el 03/07/2016 01:14:50

Como insertar o actualizar un registro si existe en la base de datos




Hola a todos espero que encuentren muy bien, soy nuevo en éste foro y requiero de ayuda para un problema típico que se menciona mucho en la web, pero las soluciones que encontrado no se adaptan a lo que en realidad necesito, aunque éstas las tome como ejemplo, el punto es que no puedo actualizar registros existentes en la base de datos, sólo se insertan como nuevos, les voy a explicar el contexto de lo que busco para mi proyecto:

1) Imaginemos que recibimos insumos médicos en un departamento de recepcion y depacho (donación) de éstos insumos.

2) Nos encontramos con la opción de registrar los insumos nuevos que no están registrados en el sistema (obviamente) y con otra para registrar o actualizar los datos de recepcion que sabemos que son muy diferentes a los anteriores.

3) Ahora bien, a nivel de base de datos obtenemos dos tablas: la tabla de datos de los insumos y la tabla de datos de recepción.

4) En el caso que recibamos insumos ya existentes en la tabla de los datos de los insumos, optamos por registrar o actualizar los datos de recepcion, dependiendo si se encuentran registrados para actualizar y sino registrarlos solamente, se nos muestra un formulario de registro de los datos de recepción, y como dijimos éstos son muy distintos a los datos de los insumos.

5) Disponemos de un botón llamado "buscar" que abre una ventana pop-up con la opción de buscar de alguna formar un insumo, en específco, que justamente son los datos de la primera tabla de los datos de los insumpos de la que ya hablamos, y luego al seleccionar los datos se cierre ésta ventana y se muestre en el formulario sólo la clave primera de la tabla de los insumos y un dato de referencia (descripcion), siendo ésta clave primaria, la clave foránea obviamente de la tabla de recepcion.

6) Finalmente pulsamos el boton "botón" guardar para insertar o actualizar los datos datos como ya dijimos dependiendo si ya fueron recibidos por primera vez para actualizarlos y sino insertarlos solamente.

Este es el codigo que tengo, como dije me inserta registros nuevos solamente, y me da errores en el mysql_num_row, que es la condición para que me inserte o me actualize los registros. De ante mil gracias.

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
<?php
 
include ('conexionbd.php');
 
$idmed=$_POST['id_med'];
$cantidad=$_POST['cantidad'];
$fecha=$_POST['fecha'];
$responsable=$_POST['responsable'];
 
$con = new DBManager;
if($con->conectar()==true){
$consulta=("SELECT * FROM recepcion WHERE numero='$idmed'");
$resultado=mysql_query($consulta) or die (mysql_error());
}
while($row = mysql_fetch_array($resultado)) {
	$cont4++;
}
mysql_free_result($resultado);
$cant1=$cont4;
 
if (mysql_num_rows($resultado) == 0) {
 
$consulta2="INSERT INTO recepcion (numero,cantidad_recep,fecha_recep,resp_recep)
VALUES ('$idmed','$cantidad','$fecha','$responsable')";
$consulta3=mysql_query($consulta2,$consulta);
 
echo"
<script language='javascript'>
alert('LOS DATOS HAN SIDO GUARDADOS CON EXITO')
window.location='registroins.php'
</script>";
exit();
 
}
else
 
if (mysql_num_rows($resultado) > 0) {
 
$consulta4="UPDATE recepcion SET numero='$idmed', cantidad_recep='$cantidad', fecha_recep='$fecha', resp_recep='$responsable' where numero='$idmed'";
$consulta5=mysql_query($consulta4,$consulta);
 
 
 
echo"
<script language='javascript'>
alert('LOS DATOS HAN SIDO ACTUALIZADOS CON EXITO')
window.location='registroins.php'
</script>";
exit();
 
}
else
{
 
                 echo"
<script language='javascript'>
alert('NO SE HAN ENCONTRADO DATOS PARA GUARDAR O ACTUALIZAR')
window.location='registroins.php'
</script>";
exit();
 
 
}
?>
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

Como insertar o actualizar un registro si existe en la base de datos

Publicado por Jose (5 intervenciones) el 03/07/2016 02:54:04
Me pueden escribir a mi corre por sino entienden algo.
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 kip

Como insertar o actualizar un registro si existe en la base de datos

Publicado por kip (567 intervenciones) el 03/07/2016 04:02:32
Hola, intenta de esta forma :

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
<?php
 
include ('conexionbd.php');
 
$idmed=$_POST['id_med'];
$cantidad=$_POST['cantidad'];
$fecha=$_POST['fecha'];
$responsable=$_POST['responsable'];
 
$con = new DBManager;
if($con->conectar()==true){
$consulta=("SELECT * FROM recepcion WHERE numero='$idmed'");
$resultado=mysql_query($consulta) or die (mysql_error());
}
while($row = mysql_fetch_array($resultado)) {
$cont4++;
}
 
$cant1=$cont4;
 
if (mysql_num_rows($resultado) == 0) {
 
$consulta2="INSERT INTO recepcion (numero,cantidad_recep,fecha_recep,resp_recep)
VALUES ('$idmed','$cantidad','$fecha','$responsable')";
$consulta3=mysql_query($consulta2);
 
echo"
<script language='javascript'>
alert('LOS DATOS HAN SIDO GUARDADOS CON EXITO')
window.location='registroins.php'
</script>";
exit();
 
}
else {
 
if (mysql_num_rows($resultado) != 0) {
 
$consulta4="UPDATE recepcion SET numero='$idmed', cantidad_recep='$cantidad', fecha_recep='$fecha', resp_recep='$responsable' where numero='$idmed'";
$consulta5=mysql_query($consulta4);
 
echo"
<script language='javascript'>
alert('LOS DATOS HAN SIDO ACTUALIZADOS CON EXITO')
window.location='registroins.php'
</script>";
exit();
 
}
else
{
 
echo"
<script language='javascript'>
alert('NO SE HAN ENCONTRADO DATOS PARA GUARDAR O ACTUALIZAR')
window.location='registroins.php'
</script>";
exit();
 
}
}
?>

Me fije que usabas como parametro en mysql_query dos consultas, cuando en realidad deberia ser una que contenga sintaxis sql y otra variable que sea el objeto de conexion, pero en este caso como ya abres la conexion desde el inicio no es necesario.

Ademas de eso vi que no encerrabas correctamente una llave para indicar el else.

Espero asi te funciones, nos cuentas como te fue.

Saludos
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

Como insertar o actualizar un registro si existe en la base de datos

Publicado por Jose (5 intervenciones) el 03/07/2016 21:22:53
Hola, gracias por responder a éste tema, he logrado resolver el problema, con después de dias intentandólo, hice unas modificaciones y funcionó de 10 :

Aquí se los dejo:

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
<?php
 
include ('conexionbd.php');
 
$idmed=$_POST['id_med'];
$cantidad=$_POST['cantidad'];
$fecha=$_POST['fecha'];
$responsable=$_POST['responsable'];
 
$con = new DBManager;
if($con->conectar()==true){
$result = mysql_query("SELECT count(*) as total FROM recepcion where numero='$idmed'");
$row = mysql_fetch_assoc($result);
$numero = $row['total']+$cantidad;
}
else
{
               echo"
<script language='javascript'>
alert('NO SE HAN ENCONTRADO DATOS PARA GUARDAR O ACTUALIZAR')
window.location='registroins.php'
</script>";
exit();
}
if($numero > 0){
	mysql_query("UPDATE recepcion SET numero='$idmed', cantidad_recep=cantidad_recep+'$cantidad', fecha_recep='$fecha', resp_recep='$responsable' where numero='$idmed'");
 
    echo"
<script language='javascript'>
alert('LOS DATOS HAN SIDO ACTUALIZADOS CON EXITO')
window.location='registroins.php'
</script>";
exit();
 
}
else
{
mysql_query("INSERT INTO recepcion (numero,cantidad_recep,fecha_recep,resp_recep)
VALUES ('$idmed','$cantidad','$fecha','$responsable')");
   echo"
<script language='javascript'>
alert('LOS DATOS HAN SIDO GUARDADOS CON EXITO')
window.location='registroins.php'
</script>";
exit();
}
while($cant1 = mysql_fetch_array($result)) {
	$cont4++;
  }
 mysql_free_result($result);
$cant2=$cont4;
 
?>

Cualquier me dicen si puedo optimizarlo o mejorarlo.
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