PHP - campos booleanos

   
Vista:

campos booleanos

Publicado por movick (824 intervenciones) el 23/09/2014 20:51:12
Para ir al grano; Estoy creando un formulario para actualizar una tabla en postgresql la cual tiene dos campos booleanos
el campo polio y otro campo de nombre hepatitis
y con este codigo creo el registro:
Nota: el resto del codigo lo estoy obviando ya que es muy grande, solo estoy enviando el codigo que necesito.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<th width='100' style='font-size:15px;'>
   		   Hepatitis A:<td>
		   <input name="checkhepa" type="checkbox" value="">
           Polio:
		   <input name="checkpoli" type="checkbox" value="">
 
<table align="center">
   <tr>
    <td>
         <input class="color1" type="submit" name="action" value="Guardar"/>
         <input class="color1" type="reset" value="Deshacer">
    </td>
    </tr>
</table>
$hepatitisa = $_POST['checkhepa'];
$polio = $_POST['checkpoli'];
$consulta = "INSERT INTO consulta(
					 fecha,
					 polio,
					 hepatitisa) 
			 VALUES (' $hepatitisa, $polio)";
    $agrega  = @pg_query($conexion,$consulta);
Mi pregunta es ¿con cual variable debo actualizar dichos campos ya que estos son booleanos?
en realidad no se que variable deberia enviar.
si pueden ayudarme. 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

campos booleanos

Publicado por Gonzalo (338 intervenciones) el 23/09/2014 22:44:27
dependiendo si el checkbox tiene definido un valor entonces regresa lo que este en value, si no entonces regresa true, pero unicamente si fue activado, si fue desactivado no regresa nada.

<input name="checkpoli" type="checkbox">

si este checkbox esta activado regresa true, inacitvo no regresa nada, por default aparece sin activar.

<input name="checkpoli" type="checkbox" checked>

si este check box esta activado entonces regresa true, si esta inactivo no regresa nada, por default aparece como activo

<input name="checkpoli" type="checkbox" value="movik">

si este checkbox esta activado entonces regresa movik, sino no regresa nada por default aparece inactivo.

para el caso de tu codigo en ninguno de los 2 casos va a regresar nada, posiblemente va a regresar true si es que fueron activados pero debes hacer la prueba.

debido a ese problema te recomiendo siempre inicializar los valores antes de recupearlos

<input name="checkhepa" type="checkbox" value="">No tiene value
<input name="checkpoli" type="checkbox" value="">No tiene value

$hepatitisa =0;
$polio = 0;

if(isset($_POST['checkhepa']))
{
$hepatitisa=1;
}
if(isset($_POST['checkpoli']))
{
$polio = 1;
}

los deje como 0 o 1 porque el value del checkbox no tiene nada, si escribes algo en el value entonces si puedes pasar el post a la variable

<input name="checkhepa" type="checkbox" value="Hepa">Si tiene value
<input name="checkpoli" type="checkbox" value="Poli">Si tiene value

$hepatitisa ="";
$polio = "";

if(isset($_POST['checkhepa']))
{
$hepatitisa=$_POST['checkhepa'];
}
if(isset($_POST['checkpoli']))
{
$polio = $_POST['checkpoli'];
}

el query esta mal, ya que mandas insertar fecha, polio y hepatitis, pero solo pasas los valores de polio y hepatitis, te falta el valor para la fecha.

$consulta = "INSERT INTO consulta
(fecha,polio,hepatitisa) //3 campos
VALUES
(FaltaLaFecha,' $hepatitisa, $polio)"; //3 valores


espero sea de ayuda, suerte, salu2.
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

campos booleanos

Publicado por movick (824 intervenciones) el 23/09/2014 23:02:06
Gracias Gonzalo, voy a analizrlo bien y lo aplicare, y te comentare.
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

campos booleanos

Publicado por Gonzalo (338 intervenciones) el 23/09/2014 23:15:46
si solo vas a guardar true o false en la base de datos entonces el checkbox no necesita value, yo se lo quitaria, pero asi como esta explicado no importa si tiene o no value, lo que isset detecta es si el checkbox esta activo, con eso cambia el valor de $hepatitisa a 1 sino lo deja en 0, eso es al final lo que necesitas.

olvide comentar, el post no va a detectar el checkbox inactivo, por eso agregue la orden isset(), si no esta activo isset rregresa false, si esta activo regresa true;

si lo pasas directo creo que te va a marcar error ya que el post no va a encontrar el checkbox cuando este inactivo.

has la prueba

$hepatitisa = $_POST['checkhepa']; // que pasa si no esta activo?

suerte, salu2.
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

campos booleanos

Publicado por movick (824 intervenciones) el 24/09/2014 03:59:27
bueno este es el codigo que me aconsejaste que aplicara pero no esta creando el registro:
dividí el codigo
este es el que procesa los datos del formulario pacientes.php
y se llama cargapacientes.php y luego regresa al formulario pacientes.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
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
<?php
$conexion = pg_connect("host=localhost port=5432 dbname=pediatria user=postgres password=1234");
$fecha = $_POST['fecha'];
$anio  = substr($fecha,6,4);
$mes   = substr($fecha,3,2);
$dia   = substr($fecha,0,2);
$fecha = $anio."-".$mes."-".$dia;
$peso = $_POST['peso'];
$talla = $_POST['talla'];
$circunf = $_POST['circenf'];
$cirbrazo = $_POST['circbrazo'];
 
$hepatitisa ="";
$hepatitisb ="";
$polio = "";
 
if(isset($_POST['checkhepa']))
{
echo $hepatitisa=$_POST['checkhepa'];
}
 
if(isset($_POST['checkhepb']))
{
echo $hepatitisb=$_POST['checkhepb'];
}
 
 
if(isset($_POST['checkpoli']))
{
echo $polio = $_POST['checkpoli'];
}
 
 
 
 
/*$hepatitisa = $_POST['checkhepa'];
$polio = $_POST['checkpoli'];
*/
$consulta = "INSERT INTO consulta(
					 fecha,
					 peso,
					 talla,
					 circunfcefalica,
					 circunfbrazo,
					 polio,
					 hepatitisa,
					 hepatitisb) 
			 VALUES ('$fecha',
			 		 $peso,
					 $talla,
					 $circunf,
					 $cirbrazo,
					 $polio,
					 $hepatitisa,
					 $hepatitisb)";
    $agrega  = @pg_query($conexion,$consulta);
          echo("<script type='text/javascript'>window.location='pacientes.php'; </script>");
          header("Location:pacientes.php");
?>

esta es la tabla:
1
2
3
4
5
6
7
8
9
10
11
12
13
id_consulta serial NOT NULL,
  fecha date NOT NULL,
  id_paciente serial NOT NULL,
  peso numeric(5,2) NOT NULL,
  talla numeric(3,2) NOT NULL,
  circunfcefalica numeric(3,2) NOT NULL,
  circunfbrazo numeric(3,2),
  cod_hcm integer,
  observacion text,
  edad numeric,
  polio boolean,
  hepatitisa boolean,
  hepatitisb boolean,

¿pudieras ver si falta 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

campos booleanos

Publicado por Gonzalo (338 intervenciones) el 24/09/2014 16:49:40
los valores booleanos solo guardan {0,1} o {true,false}, cambia esta parte del codigo y pruebalo de nuevo.

salu2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$hepatitisa =0;
$hepatitisb =0;
$polio = 0;// valor inicial es falso, si el post los detecta los cambio a true
 
if(isset($_POST['checkhepa']))
{
$hepatitisa=1; // elimine echo
}
 
if(isset($_POST['checkhepb']))
{
$hepatitisb=1; //elimine echo
}
 
 
if(isset($_POST['checkpoli']))
{
$polio = 1; //elimine echo
}

luego viene la $consulta etc etc, lo demas es igual.

en valores booleanos no tiene caso pasar el valor del checkbox a la variable, si $_POST lo detecta significa que esta activo, asi que le paso directo el valor 1 a la variable, si no funciona asi entonces cambia los =0; por =false; y los =1; a =true;

aunque con 0 y 1 deberia funcionar.

suerte, salu2.
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

campos booleanos

Publicado por movick (824 intervenciones) el 24/09/2014 17:20:37
Bueno lo coloque asi para ver como funciona pero aun sigue sin crear el registro:

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
<?php
$conexion = pg_connect("host=localhost port=5432 dbname=pediatria user=postgres password=1234");
$fecha = $_POST['fecha'];
$anio  = substr($fecha,6,4);
$mes   = substr($fecha,3,2);
$dia   = substr($fecha,0,2);
$fecha = $anio."-".$mes."-".$dia;
$peso = $_POST['peso'];
$talla = $_POST['talla'];
$circunf = $_POST['circenf'];
$cirbrazo = $_POST['circbrazo'];
$consulta = $_POST['consulta'];
$edad = $_POST['fechanac'];
$hcm = $_POST['cmbohcm'];
Nota: agregue otros campos que hacina falta
estoy obligandolo a que me diga si es verdadero o falso en este caso de los booleanos
if(isset($_POST['checkhepa']))
{
 $hepatitisa=$_POST['checkhepa'];
  if($hepatitisa){
     $hepatitisa = true;
   }
  else
   {
     $hepatitisa = false;
   }
}
 
if(isset($_POST['checkhepb']))
{
 $hepatitisb=$_POST['checkhepb'];
  if($hepatitisb){
     $hepatitisb = true;
   }
  else
  {
     $hepatitisb = false;
  }
}
 
 
if(isset($_POST['checkpoli']))
{
 $polio = $_POST['checkpoli'];
  if($polio){
  $polio= true;
  }
  else{
  $polio = false;
  }
}
 
echo $consulta = "INSERT INTO consulta(
					 fecha,
					 peso,
					 talla,
					 edad,
					 cod_hcm,					 
					 circunfcefalica,
					 circunfbrazo,
					 observacion,
					 polio,
					 hepatitisa,
					 hepatitisb) 
			 VALUES ('$fecha',
			 		 $peso,
					 $talla,
					 $edad,
					 $hcm,					 
					 $circunf,
					 $cirbrazo,
					 '$consulta',
					 $polio,
					 $hepatitisa,
					 $hepatitisb)";
    $agrega  = @pg_query($conexion,$consulta);
?>
y crea este query:
y estan completos los campos y variables.
1
2
3
4
5
6
7
8
9
10
11
12
INSERT INTO consulta( fecha,
                                                peso,
                                                talla,
                                                edad,
                                                cod_hcm,
                                                circunfcefalica,
                                                circunfbrazo,
                                                observacion,
                                                polio,
                                                hepatitisa,
                                                hepatitisb) VALUES
                                                 ('2014-09-24', 23.6, 56.8, 15, 1, 8.7, 4.3, 'nvcvndfjgdff', 1, 1, 1)
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

campos booleanos

Publicado por movick (824 intervenciones) el 24/09/2014 17:58:26
Te cuento, primeramente los campos tipo booleanos reciben variables rodeados de comillas simples, eso lo reparé,
pero fijate el error que me arroja ahora:

1
2
3
ERROR: insert or update on table "consulta" violates foreign key constraint "consulta_id_paciente_fkey"
SQL state: 23503
Detail: Key (id_paciente)=(8) is not present in table "paciente".

te muestro las tablas a ver que me aconsejas al respecto.
esta es la de consulta:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
id_consulta serial NOT NULL,
  fecha date NOT NULL,
  id_paciente serial NOT NULL,
  peso numeric(5,2) NOT NULL,
  talla numeric(5,2) NOT NULL,
  circunfcefalica numeric(5,2) NOT NULL,
  circunfbrazo numeric(5,2),
  cod_hcm integer,
  observacion text,
  edad numeric,
  polio boolean,
  hepatitisa boolean,
  hepatitisb boolean,
  CONSTRAINT consulta_pkey PRIMARY KEY (id_consulta),
  CONSTRAINT consulta_cod_hcm_fkey FOREIGN KEY (cod_hcm)
      REFERENCES hcm (codigo) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE RESTRICT,
  CONSTRAINT consulta_id_paciente_fkey FOREIGN KEY (id_paciente)
      REFERENCES paciente (id_paciente) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE RESTRICT

y esta es la de paciente:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
nrohistoria integer NOT NULL,
  nombre text NOT NULL,
  sexo text,
  direccion text,
  telefono numeric,
  fecha_nac date NOT NULL,
  id_paciente serial NOT NULL,
  cod_sanguineo integer NOT NULL,
  cod_sexo integer,
  CONSTRAINT paciente_pkey PRIMARY KEY (id_paciente),
  CONSTRAINT paciente_cod_sanguineo_fkey FOREIGN KEY (cod_sanguineo)
      REFERENCES gsanguineo (codigo) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE RESTRICT,
  CONSTRAINT paciente_cod_sexo_fkey FOREIGN KEY (cod_sexo)
      REFERENCES sexo (codigo) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
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

campos booleanos

Publicado por Gonzalo (338 intervenciones) el 24/09/2014 18:14:44
hasta donde veo el query esta bien, tengo dudas sobre el campo text pero segun la documentacion de PostgreSQL asi se deben manejar.

campos numericos, enteros y booleanos estan bien.

eso nos deja la fecha, segun la documentacion de postgre se pudieran usar las literales TIMESTAMP o to_timestamp ya que el campo Date no usa "formato", me parece que hay que convertirlo primero de cadena de texto a timestamp

intenta con esta orden, fijate que les quite el 'echo' del inicio.

$consulta = "INSERT INTO consulta(
fecha,peso,talla,edad,cod_hcm,circunfcefalica,circunfbrazo,observacion,polio,hepatitisa,hepatitisb)
VALUES
(TIMESTAMP '$fecha',$peso,$talla,$edad,$hcm,$circunf,$cirbrazo,'$consulta',$polio,$hepatitisa,$hepatitisb)";

sino con esta

$consulta = "INSERT INTO consulta(
fecha,peso,talla,edad,cod_hcm,circunfcefalica,circunfbrazo,observacion,polio,hepatitisa,hepatitisb)
VALUES
(to_timestamp('$fecha'),$peso,$talla,$edad,$hcm,$circunf,$cirbrazo,'$consulta',$polio,$hepatitisa,$hepatitisb)";
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

campos booleanos

Publicado por movick (824 intervenciones) el 25/09/2014 01:17:40
Bueno Ya resolvi el problema con los campos booleanos.
Aqui va el codigo que procesa la creacion del registro:
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
101
102
103
104
105
106
107
108
109
110
111
<?php
$conexion = pg_connect("host=localhost port=5432 dbname=pediatria user=postgres password=1234");
$NroHistoria = $_POST['nrohistoria'];
$nombres = $_POST['nombres'];
$apellidos = $_POST['apellidos'];
$direccion = $_POST['direccion'];
$telefono = $_POST['telefono'];
$fecha_nac = $_POST['fechanac'];
 
$sexo = $_POST['cmbosexo'];
$gsanguineo = $_POST['cmbosang'];
 
$fecha = $_POST['fecha'];
$anio  = substr($fecha,6,4);
$mes   = substr($fecha,3,2);
$dia   = substr($fecha,0,2);
$fecha = $anio."-".$mes."-".$dia;
$peso = $_POST['peso'];
$talla = $_POST['talla'];
$circunf = $_POST['circenf'];
$cirbrazo = $_POST['circbrazo'];
$consulta = $_POST['consulta'];
$edad = $_POST['fechanac'];
$hcm = $_POST['cmbotipgasto'];
 
if(isset($_POST['checkhepa']))
{
 $hepatitisa=$_POST['checkhepa'];
  if($hepatitisa){
     $hepatitisa = true;
   }
  else
   {
     $hepatitisa = false;
   }
}
 
if(isset($_POST['checkhepb']))
{
 $hepatitisb=$_POST['checkhepb'];
  if($hepatitisb){
     $hepatitisb = true;
   }
  else
  {
     $hepatitisb = false;
  }
}
 
 
if(isset($_POST['checkpoli']))
{
 $polio = $_POST['checkpoli'];
  if($polio){
  $polio= true;
  }
  else{
  $polio = false;
  }
}
 
 
 
 
/*$hepatitisa = $_POST['checkhepa'];
$hepatitisb=$_POST['checkhepb'];
$polio = $_POST['checkpoli'];*/
/****/
$paciente = "INSERT INTO paciente(
					 nrohistoria,
					 nombre,
					 direccion,
					 telefono,
					 fecha_nac,
					 cod_sexo,
					 cod_sanguineo)
			 VALUES ($NroHistoria,
			 		'$nombres',
					'$direccion',
					$telefono,
					'$fecha_nac',
					$sexo,
					$gsanguineo)";
    $agregapaciente  = @pg_query($conexion,$paciente);
 
/****/
$consulta = "INSERT INTO consulta(
					fecha,
					peso,
					talla,
					edad,
					 cod_hcm,					 
					 circunfcefalica,
					 circunfbrazo,
					 observacion,
					 polio,
					 hepatitisa,
					 hepatitisb) 
			 VALUES ('$fecha',
			 		 $peso,
					 $talla,
					 15,
					 $hcm,					 
					 $circunf,
					 $cirbrazo,
					 '$consulta',
					 '$polio',
					 '$hepatitisa',
					 '$hepatitisb')";
    $agrega  = @pg_query($conexion,$consulta);
?>
tuve que agregar otros campo necesarios.
Gracias Gonzalo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de xve

campos booleanos

Publicado por xve (5520 intervenciones) el 25/09/2014 09:08:16
Gracias por compartirlo Movick!!!
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