entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

problemas al guardar multiples registros en pdo

saludos a la comunidad tengo un problema intento hacer esto:
en mi tabla examenes_laboratorio_pacientes

guardo el id que es auto incremen, la fk_cedula que es la cedula del paciente que se le genera ese recipe medico, fk_examen_laboratorio que es el id de los medicamentos y por ultimo la fecha de creación del recipe medico pero me da error

id ---- fk_cedula ---- fk_examen_laboratorio ---- fecha

1 87654321 25 02/03/2017
2 87654321 10 02/03/2017
3 14622737 8 02/03/2017
4 14622737 5 02/03/2017

este es el ejemplo de como debería ser, ahora para guardar estoy implementando esto:


<?php
if(isset($_POST['guardar'])){
  $sql = "SELECT id FROM examenes_laboratorio_pacientes WHERE id = :id LIMIT 1"; //Creamos la select
  $check = $DB_con->prepare($sql); //Preparamos la SELECT, de ésta manera evitamos SQL Injection
  $check->bindParam(':id', $_POST['id']);//Substituimos las variables de la SELECT
  $check->execute();//Ejecutamos la consulta
  $contador = $check -> rowCount();//Esta función devuelve el número de resultados que ha devuelto la SELECT
  if ($contador > 0) {
  $check->closeCursor();

$mensaje = "<div class='col s12 card-panel blue lighten-2 center'>
<h5 class='black-text text-darken-2 center CONDENSED LIGHT5'>
¡ Ups Aviso: El Registro ya se Encuentra Insertado ! 
</h5>
</div>";
header("refresh:5;examenes_laboratorio.php");
$sql = false;
    }else{

    for ($i = 0; $i < count($fk_examen_laboratorio); $i++){
    foreach ($fk_cedula as $key => $fk_cedula) {

$sql=$DB_con->prepare("INSERT INTO examenes_laboratorio_pacientes (id,fk_cedula,fk_examen_laboratorio,fecha) 
  VALUES (:id, :fk_cedula[$key], :$last_id, :fecha[$key])");
$sql->bindParam(':id',$_POST['id']);
$sql->bindParam(':fk_cedula',$_POST['fk_cedula']);
$sql->bindParam(':fk_examen_laboratorio',$_POST['fk_examen_laboratorio']);
$sql->bindParam(':fecha',$_POST['fecha']);
$sql->execute();
    }

}
}

if($sql)
{

$mensaje ="<div class='col s12 card-panel teal lighten-2 center'>
<h5 class='black-text text-darken-2 center CONDENSED LIGHT5'>
¡ Bien Hecho: Registro Insertado Correctamente !
</h5>
</div>";
header("refresh:5;examenes_laboratorio.php");

}
}
?>

y porque cuando hago el proceso para guardar se cae la consutta, anexo imágenes para se mas claro,

foto1

foto2

el formulario, nota primero consulto luego después de haber consultado hago el registro.

<!-- formulario de registro-->

<div class="row">

<?php
$id= $_GET['id'];
$consulta = $DB_con->prepare("SELECT * FROM historia_clinica WHERE id=:id");
$consulta->execute(array(':id'=>$id));
$editar_linea = $consulta->fetch(PDO::FETCH_ASSOC);{
//extract($editar_linea);
extract((array)$editar_linea);

echo "<form class='col s12' action='examenes_laboratorio.php' name='frmContacto' method='POST'>

$mensaje

<h4 class='left-align black-text thin'>

<input type='hidden' name='id' value='{$editar_linea['id']}'>
<input type='hidden' name='fecha' value='<?php echo date('d/m/Y');?>
<input type='hidden' name='fk_cedula' value='{$editar_linea['cedula']}'>

<span>Paciente:</span>&nbsp;$nombres&nbsp;$apellidos&nbsp;
<span>Edad:</span>&nbsp;$edad&nbsp;<span>E-Mail:</span>&nbsp;$email
<br>
<span>Fecha Historia Clinica:</span>&nbsp;<?php echo $fecha_creacion_historia_clinica; ?>
<br>
<span>N° Historia Clinica:</span>&nbsp;$id

</h4>

<hr>

<h4 class='center-align black-text thin'>Examen Laboratorio</h4>";
}

$id= $_GET['id'];
$consulta = $DB_con->prepare("SELECT * FROM historia_clinica WHERE id=:id");
$consulta->execute(array(':id'=>$id));
$editar_linea = $consulta->fetch(PDO::FETCH_ASSOC);{
//extract($editar_linea);
extract((array)$editar_linea);
echo "
<div class='row' style='max-width: 600px;'>
<div class='card-panel white lighten-1 col s12'>
<img src='../img cintillo/cintillo.png' class='responsive-img rectangule'>
<hr>
<br>
<div class='col s12'>
<span>Pac:</span>&nbsp;$nombres&nbsp;$apellidos&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>Edad:</span>&nbsp;$edad
<br>";

}
?>

<span>Fecha:</span>&nbsp;<?php echo date('d/m/Y');?>
<br>
<h5 class='center-align thin'>Examen Laboratorio</h5>

</br>

<?php
$consulta = $DB_con->query("SELECT * FROM examen_laboratorio ORDER BY id");
while ($linea = $consulta->fetch(PDO::FETCH_ASSOC)) {

echo "<p>";
echo "<input type='checkbox' name='fk_examen_laboratorio[]' id='chk1{$linea['id']}' value='{$linea['id']}' />";
echo "<label class='black-text' for='chk1{$linea['id']}'>*&nbsp;{$linea['examen']}:&nbsp;&nbsp;{$linea['descripcion']}</label>";
echo "</p>";

}
?>

OTROS:_________________________________________________________
              _______________________________________________________________

<div class="center-align">

<br><br>

Sector Las Avenidas. Av. La Paz, Quinta Doña Gaetana. Centro Médico-quirúrgico ALFA.
Maturín, Estado Monagas. Lunes- Viernes
<br>
Email: [email protected]

</div>

</div>

</div>

</div>

<br>
<div class='center-align'>

<button class='btn waves-effect blue-grey darken-4 btn-medium' data-position='bottom' type='submit' name='guardar'>Agregar Examen Laboratorio</button>

<button class='btn waves-effect blue-grey darken-4 btn-medium' data-position='bottom'
 type='reset' name='borrar'>Borrar</button>

<a href='javascript:history.back(1)' class='btn waves-effect blue-grey darken-4 btn-medium'>Volver</a>

</div>

</form>

<!-- FIN formulario-->

gracias de ante mano

0voto

Leonardo-Tadei comentado

No se ven las imágenes. Verifica que se puedan ver sin estar logueado al servicio al que las hayas subido. Tal vez copiar y pegar el error que obtenés también sirva.

Podrías también agregar el código del formulario que envías las cosas?

0voto

yoclens comentado

ok ya lo acomodo amigo

2 Respuestas

1voto

yoclens Puntos1770

ya lo pude resolver anexo como debería quedar

for ($i = 0; $i < count($_POST['fk_examen_laboratorio']); $i++) {
  $sql=$DB_con->prepare("INSERT INTO examenes_laboratorio_pacientes (fk_cedula,fk_examen_laboratorio,fecha) VALUES 
    (:fk_cedula, :fk_examen_laboratorio, :fecha)");
  $sql->bindParam(':fk_cedula',$_POST['fk_cedula']);
  $sql->bindParam(':fk_examen_laboratorio',$_POST['fk_examen_laboratorio'][$i]);
  $sql->bindParam(':fecha',$_POST['fecha']);
  $sql->execute();
}

0voto

Peter comentado

Gracias por compartir la solución!

1voto

Leonardo-Tadei Puntos227240

Hola @yoclens,

uno de los problemas que veo es que en el formulario, fk_examen_laboratorio[] es un vector HTML, pero al recibirlo para hacer el INSERT lo estás tratando con un valor al hacer:

...
$sql->bindParam(':fk_examen_laboratorio',$_POST['fk_examen_laboratorio']);
...

Con lo que ese valor, cuando PHP lo convierta a un string tendrá el valor 'array' y cuando lo reciba la query lo pondrá en 0, con lo que en la práctica todos los registros de una práctica tienen el mismo valor.

Lo que tenés que hacer es recorrer el vector $_POST['fk_examen_laboratorio'] y con los valores que tenga, ir generando los INSERT correspondientes.

Saludos cordiales!

0voto

yoclens comentado

gracias @Leonardo-Tadei por tu respuesta fijate le hice un var_dump($_POST); y mira el resultado

array(4) { ["fk_examen_laboratorio"]=> array(4) { [0]=> string(1) "1" [1]=> string(1) "2" [2]=> string(1) "3" [3]=> string(1) "4" } ["guardar"]=> string(0) "" ["id"]=> string(8) "14622737" ["fecha"]=> string(10) "03/03/2017" } 

1voto

Leonardo-Tadei comentado

Es lo que te digo @yoclens: la variable $_POST['fk_examen_laboratorio'] es un array.

Por tanto tenés que recorrer ese array para generar los INSERT y poder cargar cada uno de los valores!

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta