2

Buenas para todos, tengo un inconveniente con este error, soy principiante he buscado y no he encontrado solución. Se trata de un formulario de citas y la base de datos esta en phpMyAdmin, este formulario es para atender una cita entonces Primero se listan solo las citas cuyo estado sea Asignado.:

<?php  
require "ConexionDatos.php";
$objConexion=Conectarse();
$sql="select ci.idCita, ci.cit_fecha, ci.cit_hora, p.pac_nombres,     

p.pac_apellidos, m.med_nombres, m.med_apellidos, m.med_especialidad,  

c.con_nombre, ci.cit_estado, ci.cit_observaciones
from pacientes p, medicos m, consultorios c, citas ci
where (p.id_paciente=ci.cit_paciente)and
(m.idMedico=ci.cit_medico) and
(c.idConsultorio=ci.cit_consultorio) and
(ci.cit_estado='Asignado')";

$resultado=$objConexion->query($sql);
?>
<h1 align="center">LISTADO CITAS</h1>
<table width="90%" border="1" align="center">
<tr align="center" bgcolor="#99ff66" class="texto">
<td>Fecha</td>
<td>Hora</td>
<td>Paciente</td>
<td>Medico</td>
<td>Consultorio</td>
<td>Estado</td>
<td>Obervaciones</td>
<td>Atender</td>
</tr>
<?php 
while ($citas=$resultado->fetch_object())
{
?>
<tr>
<td><?php echo $citas->cit_fecha ?></td>
<td><?php echo $citas->cit_hora ?></td>
<td><?php echo $citas->pac_nombres." ".$citas->pac_apellidos?></td>
<td><?php echo $citas->med_nombres." " .$citas->med_apellidos?></td>
<td><?php echo $citas->con_nombre ?></td>
<td><?php echo $citas->cit_estado ?></td>
<td><?php echo $citas->cit_observaciones ?></td>


<td align="center">
<a href="frmEditarCita.php?idCita= <?php echo $citas->idCita ?>" title="clic para atender la cita"> 
<img src="../img/editar.png" width="62" height="51" border="0"    align="middle" /></a></td>
</tr>
<?php
}// cerramos ciclo while
?>
</table>

Este es el codigo que me lleva al formulario para editar la cita:

<?php 
require "ConexionDatos.php";

//se hace la consulta de acuerdo al idCita que llega
$objConexion=Conectarse();
$sql="select p.pac_nombres, p.pac_apellidos, c.cit_observaciones
from pacientes p, citas c
where (p.idPaciente=c.cit_paciente) and
(c.idCita='$_REQUEST[$idCita]')";

$resultadoCitas=$objConexion->query($sql);
$cita=$resultadoCitas->fetch_object();  
?>

<form id="form1" name="form1" method="post" action="actualizarCita.php">
<table width="43%" border="0" align="center" >
<tr bgcolor="#99ff66" class="texto">
<td colspan="2" align="center">ATENDER CITA</td>
</tr>
<tr>

<td width="33%" align="right" bgcolor="#99ff66">Paciente:</td>
<td width="67%"><label for="paciente"></label>
<input name="paciente" type="text" id="paciente" readonly="readonly"                                             

size="60" value="<?php echo $cita->pac_nombres." ".$cita->pac_apellidos ?  

>"/></td>
</tr>
<tr>
<td align="right" bgcolor="#99ff66">Observacione</td>
<td><label for="observaciones"></label>
<textarea name="observaciones" id="observaciones" cols="50" rows="10"
required="required"></textarea></td>
</tr>
<tr bgcolor="#99ff66" class="texto">
<td colspan="2" align="center"><input type="submit" name="button"  

id="button" value="enviar"/></td>
</tr>
</table>
/*se inserta un campo oculto y le asigno el valor de idCita para pasarlo con el formulario. el idCita llega a este formulario*/
<input name="idCita" type="hidden" value="<?php echo $_REQUEST['idCita']? 

>"/>
</form>

El otro código de archvio para validar la cita:

<?php 
require "ConexionDatos.php";
extract ($_REQUEST);

$objConexion=Conectarse();
$sql="update citas set       
cit_observaciones='$_REQUEST[observaciones]',cit_estado='Atendido'
where idCita='$_REQUEST[idCita]'";
$resultado=$objConexion->query($sql);

if ($resultado) {
header("location:listarCitas.php?x=1");// x=1 se actualizo correctamente
}
else{
header("location:listarCitas.php?x=2");// x=2 problemas actualizar la cita
$objConexion->close();
}
?>
Juanzu
  • 588
  • 3
  • 8
  • 32
  • El error que recibes es porque hay un error en la sentencia y entonces `query` devuelve `false`. Prueba a mostrar el valor de la variable `$sql` e intenta ejecutar esa sentencia directamente en PHPMyAdmin. – Alvaro Montoro May 22 '16 at 20:05
  • Gracias por responder, como digo soy novato yo he intentado lo que me comentas pero como hago para colocar el $_REQUEST en PHPMyAdmin?. por que quiero es el dato ingresado por el usuario se modifique la cita. – Juanzu May 22 '16 at 20:32
  • Haz `echo $sql;exit();` justo antes de la línea `$resultadoCitas=$objConexion->query($sql);`. Eso hará que se muestre la sentencia SQL y pare la ejecución del script. Entonces copia ese SQL y pégalo aquí o pruébalo directamente en PHPMyAdmin porque es la sentencia que se ejecutará – Alvaro Montoro May 22 '16 at 20:37
  • @AlvaroMontoro inserte el codigo $sql;exit() y me sale esto Parse error: syntax error, unexpected end of file in C:\xampp\htdocs\CentroMedico\Citas\frmEditarCita.php on line 44 – Juanzu May 22 '16 at 20:48
  • Antes de ese mensaje de error, ¿te aparece el SQL de la consulta? Puedes quitar el `exit()` lo que te interesa es la consulta en sí – Alvaro Montoro May 22 '16 at 20:51
  • Si, ya lo he reaizado y me sale esto: Notice: Undefined variable: idCita in C:\xampp\htdocs\CentroMedico\Citas\frmEditarCita.php on line 10. otice: Undefined index: in C:\xampp\htdocs\CentroMedico\Citas\frmEditarCita.php on line 10 select p.pac_nombres, p.pac_apellidos, c.cit_observaciones from pacientes p, citas c where (p.idPaciente=c.cit_paciente) and (c.idCita='') Fatal error: Uncaught Error: Call to a member function fetch_object() on boolean in C:\xampp\htdocs\CentroMedico\Citas\frmEditarCita.php:17 Stack trace: #0 {main} thrown in – Juanzu May 22 '16 at 20:56
  • Pues ese es el problema. No has definido la variable `$idcita` en ningún lugar y luego la usas, eso hace que la consulta que se genera sea incorrecta. ¿Qué valor esperabas que tuviese? – Alvaro Montoro May 22 '16 at 20:57
  • me equivoque lo coloque ahi para probar si funcionaba, pero el codigo es: `$sql="select p.pac_nombres, p.pac_apellidos, c.cit_observaciones from pacientes p, citas c where (p.idPaciente=c.cit_paciente) and (c.idCita='$_REQUEST[idCita]')";` y el del formulario es esta parte: `` Fijate en el primero formulario que envie. – Juanzu May 22 '16 at 21:22
  • Entonces el problema son las comillas, deberías ser `$_REQUEST['idCita']` como indico en la respuesta de abajo – Alvaro Montoro May 22 '16 at 21:24

1 Answers1

2

El error que recibes es porque hay un error en la sentencia y entonces query devuelve false. El valor false (booleano) no tiene ningún método/función llamado fetch_object() que es el error mostrado.

Como mencionas en los comentarios, el problema está en que la variable $idCita no está definida. En lugar de

(c.idCita='$_REQUEST[$idCita]')

Deberías hacer

(c.idCita='" . $_REQUEST['idCita'] . "')";

Porque ese es el nombre del input en tu formulario.

NOTA: como bien indica aldanux en su respuesta. Tu código puede sufrir ataques de inyección SQL, deberías usar sentencias preparadas. Puedes leer más sobre inyección SQL en esta otra pregunta de SOes.

Alvaro Montoro
  • 48,157
  • 26
  • 100
  • 179
  • Gracias, hago tal como me comentas y me sigue saliendo el mismo error que ingrese en la pregunta más esta: **Notice: Undefined index: idCita in C:\xampp\htdocs\CentroMedico\Citas\frmEditarCita.php on line 10** – Juanzu May 22 '16 at 21:37
  • @Juanzu Ok, si no es idCita, ¿cuál es el nombre de la variable?¿Qué variables pasas a esa página? Si no te funciona ahí, tampoco te va a funcionar en el `input` que hay más abajo – Alvaro Montoro May 22 '16 at 21:43
  • Pues esa es la variable que esta en la base de datos, la verdad no se que sucede, gracias igualmente he aprendido cositas. – Juanzu May 22 '16 at 21:49
  • $_REQUEST no viene de la base de datos, viene de otra página o de una cookie. ¿Cómo llegas a la página donde recibes el error? – Alvaro Montoro May 22 '16 at 22:02
  • Si viene de la base de datos, viene de un formulario donde dando clic en una cita especifica que esta actualmente en atender y me lleva a este formulario para colocar la cita atendido. – Juanzu May 23 '16 at 00:29
  • @Juanzu ¿cuál es el `name` del campo que tiene el id de la cita en el primer formulario? – Alvaro Montoro May 23 '16 at 06:18
  • @AlavaroMontoro Ya escribir el otro código para que lo mires, gracias. – Juanzu May 23 '16 at 22:21