Foros del Web » Programando para Internet » PHP »

Problema con consulta mysql y formulario php!

Estas en el tema de Problema con consulta mysql y formulario php! en el foro de PHP en Foros del Web. Hola, tengo un problemilla. Tengo una base de datos con los atributos user,fecha, hora, entrada_salida. En entrada_salida se guarda la variable del formulario (Entrada ó ...
  #1 (permalink)  
Antiguo 17/06/2008, 02:52
 
Fecha de Ingreso: junio-2008
Mensajes: 56
Antigüedad: 15 años, 10 meses
Puntos: 1
Problema con consulta mysql y formulario php!

Hola, tengo un problemilla. Tengo una base de datos con los atributos user,fecha, hora, entrada_salida. En entrada_salida se guarda la variable del formulario (Entrada ó Salida), hago una consulta antes del formulario a la bbdd: si hay entrada, que sólo me muestre el botón de salida, pero me falla ya que a día de hoy no tener nada en entrada_salida me muestra el botón de salida cuando me debería mostrar el de ENTRADA.

Pongo el código:

Cita:
<form name="ficha" method="post" action="confirm.php" >
<table border=0>
<tr><td>Fiche:</td></tr>
<?php
$bbdd = mysql_connect($host, $usuario, $password) or die ("Could not connect: " . mysql_error()); //conectamos con base de datos.
$tablausuario = mysql_select_db($bd, $bbdd) or die(mysql_error());//seleccionamos base de datos fichaje de nuestra base de datos.
$ftiempo = time ();
$fecha = date ("j/n/Y");
$consES = 'select entrada_salida from fichaje where user="'.$_SESSION[login].'" AND fecha="$fecha" '; //consulto la entrada o salida
$respES = mysql_query($consES, $bbdd) or die(mysql_error());; //ejecutamos la consulta.
$filaES = mysql_fetch_array($respES); //se guarda en un array las consultas.
$contES = $filaES['entrada_salida'];
if ($contES = "Entrada") {
echo '<tr><td><input type="Radio" name="ensa" value="Salida"> Salida</td></tr>' ;}
else {
echo '<tr><td><input type="Radio" name="ensa" value="Entrada" checked> Entrada</td></tr>'; }
mysql_close();
?>


<tr><td><input type="submit" name="BotonFicha" value="Fichar"></td></tr></table>
</form>
El problema ya digo que sin tener nada aún en la base de datos para hoy, me muestra el botón SALIDA cuando debería mostrarme el de ENTRADA, es decir, pasa por la sentencia del IF cuando debería pasar por la de ELSE.

Agradecería que me pudiérais hechar una mano.

Muchas Gracias.
  #2 (permalink)  
Antiguo 17/06/2008, 02:59
 
Fecha de Ingreso: octubre-2004
Mensajes: 2.627
Antigüedad: 19 años, 5 meses
Puntos: 48
Respuesta: Problema con consulta mysql y formulario php!

Código PHP:
if ($contES "Entrada") { 
Un solo = es asignacion, no comparacion. Lo que estas haciendo realmente es meter en $contES el valor "Entrada". Y lo que querias hacer es comparar, con ==:
Código PHP:
if ($contES == "Entrada") { 
Mejor aun:
Código PHP:
if ( "Entrada" == $contES) { 
porque si pones primero el valor constante, si se te olvida un igual te dara un error porque nose puede asignar valores a valores constantes.
  #3 (permalink)  
Antiguo 17/06/2008, 03:06
 
Fecha de Ingreso: junio-2008
Mensajes: 56
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Problema con consulta mysql y formulario php!

OK, ya he modificado el código php de la sentencia if
Cita:
if ( "Entrada" == $contES) {
Pero ahora ficho la Entrada, reinicio y me debería salir el botón del formulario de SALIDA, ya que en la base de datos si que tengo Entrada en el atributo entrada_salida. Una vez pulsado entrada debería pasar por la rama del IF que es la del botón salida, y no por la del ELSE que está pasando siempre.

Sabéis porque puede ser ocasionado???Me podríais dar alguna solución??

Gracias.
  #4 (permalink)  
Antiguo 17/06/2008, 05:03
 
Fecha de Ingreso: junio-2008
Mensajes: 56
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Problema con consulta mysql y formulario php!

Lo que trato es que si en el atributo entrada_salida de la base de datos se encuentra:

Entrada: que me muestre el botón de salida sólamente, es decir, que solo deje fichar la salida.

Salida: que me muestre o bien el de entrada, o bien un mensaje "Hoy ya has fichado entrada y salida" por ejemplo.

El problema es que sólo me pasa por la rama de ELSE.

Algún consejo o idea???

Gracias.
  #5 (permalink)  
Antiguo 17/06/2008, 05:12
 
Fecha de Ingreso: junio-2008
Mensajes: 30
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Problema con consulta mysql y formulario php!

estas seguro de que a la tabla de la DB le ha llegado el cambio de Entrada por Salida.

Seria conveniente que pusieras el codigo del confirm.php
  #6 (permalink)  
Antiguo 17/06/2008, 05:18
 
Fecha de Ingreso: junio-2008
Mensajes: 56
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Problema con consulta mysql y formulario php!

Cita:
Iniciado por filzix Ver Mensaje
estas seguro de que a la tabla de la DB le ha llegado el cambio de Entrada por Salida.

Seria conveniente que pusieras el codigo del confirm.php
No es que haya un cambio sino que se guarda la fecha y hora de entrada y la fecha y hora de salida, un registro válido podría ser.

ALFREDO 17/06/2008 13:16 Entrada

ALFREDO 17/06/2008 13:30 Salida

Entonces lo que quiero es recoger en el mismo dia el atributo entrada_salida, y si existe entrada en el mismo día de hoy que me dé sólamente la opción de salida, y si existe salida que me muestre o bien la opción de entrada o un mensaje como x ejemplo "ya has fichado hoy la entrada y salida", eso es lo de menos.

Pongo el código de confirm.php para que quede más claro:

Cita:
<?php $ftiempo = time ();
$hora = date ('G:i:s');

$fecha = date ("j/n/Y");


$ip = $HTTP_SERVER_VARS['REMOTE_ADDR'];

include("conectarbbdd.php");

$user = $_SESSION['login'];
$entra_sale = $_POST['ensa'];

$ins = "INSERT INTO fichaje (id,user,fecha,hora,IP,entrada_salida) VALUES (null,'$user','$fecha','$hora','$ip','$entra_sale' )";
$res = mysql_query($ins,$bbdd) or die(mysql_error());
if ($res) {

echo $user;
echo ' acabas de fichar la ';
echo $entra_sale;
echo ' a las ';
echo $hora;
echo ' del dia ';
echo $fecha;
echo '<br><br> Muchas Gracias.'; }
else
{ echo 'no se ha fichado, consulte con su administrador'; }

mysql_close();

?>
Espero que os sea útil y me podáis ayudar a resolver el problema.
  #7 (permalink)  
Antiguo 17/06/2008, 06:07
 
Fecha de Ingreso: junio-2008
Mensajes: 30
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Problema con consulta mysql y formulario php!

te creado este codigo que creo que es lo que quieres:


fichar.php
Código PHP:
<?php
$cxn 
mysql_connect($host$usuario$password) or die ("Could not connect: " mysql_error());
mysql_select_db($bd$cxn) or die(mysql_error());
  
if(isset(
$_POST[BotonFicha])){
    
$hora date ('G:i:s');
    
$fecha date ("j/n/Y");
    
$ip $HTTP_SERVER_VARS['REMOTE_ADDR'];
    
$user $_SESSION['login'];
    
$entra_sale $_POST['ensa'];
    
    
//si en tu base datos el id es autoincrement puedes obviarlo
    
$Select "INSERT INTO fichaje (user,fecha,hora,IP,entrada_salida) 
                    VALUES ('"
.$user."','".$fecha."','".$hora."','".$ip."','".$entra_sale."')";
    
$res mysql_query($Select,$cxn) or die(mysql_error());
    if (
$res) {
        echo 
$user.' acabas de fichar la '.$entra_sale.' a las '.$hora.' del dia '.$fecha;
        echo 
'<br><br> Muchas Gracias.'
    } else { 
        echo 
'No se ha fichado, consulte con su administrador';
    }
    if(
$entra_sale == "Salida"){//esto es para que cuando ya ha fichado las dos cosas, como siempre vuelve salir el formulario , paramos aqui el codigo y ya no sale el form
        
exit;
    } 
}

$head='<form name="ficha" method="post" action="fichar.php" >
<table border=0>
<tr><td>Fiche:</td></tr>'
;
$foot='<tr><td><input type="submit" name="BotonFicha" value="Fichar"></td></tr></table>
</form>'
;
$ftiempo time ();
$fecha date ("j/n/Y");
$Select "SELECT entrada_salida 
                   FROM fichaje 
                    WHERE user='"
.$_SESSION['login']."' 
                    AND fecha='"
.$fecha."'";                    
$Query mysql_query($Select$cxn) or die(mysql_error());
$rows mysql_num_rows($Query);
switch (
$rows){
    case 
2:
        echo 
"Ya has fichado la Entrada y la Salida";
    break;
    case 
1:    
        echo 
$head;
        
$row mysql_fetch_array($Query);
        
$contES $row['entrada_salida'];
        if(
$contES == "Entrada"){
            echo 
'<tr><td><input type="Radio" name="ensa" value="Salida" checked> Salida</td></tr>' ;
        } else {
            echo 
'<tr><td><input type="Radio" name="ensa" value="Entrada" checked> Entrada</td></tr>';
        }
        echo 
$foot;
    break;    
    case 
0:
        echo 
$head;
        echo 
'<tr><td><input type="Radio" name="ensa" value="Entrada" checked> Entrada</td></tr>';
        echo 
$foot;
    break;
}
mysql_close($cxn);
?>

Última edición por filzix; 17/06/2008 a las 06:22
  #8 (permalink)  
Antiguo 25/06/2008, 03:52
 
Fecha de Ingreso: junio-2008
Mensajes: 56
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Problema con consulta mysql y formulario php!

Gracias filzix, pero aún sigo teniendo el problema, me estoy volviendo loco y no sé ya por qué es!!!!Realmente he reutilizado la última parte de tu código, que es la que necesito, la consulta a la bbdd y si no hay nada, q muestre el botón de entrada sólamente, si hay entrada que muestre salida, y si hay salida (ó entrada y salida) que muestre un mensaje que ya ha fichado.

Peeero siempre me muestra el botón de entrada, y ya no sé xq será.

Pongo el código:

Cita:
<?php $ftiempo = time ();
$hora = date ('G:i:s');
echo "Son las ";
echo "$hora horas <br>";
$dia = array ("Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sabado");
$mes = array ("Diciembre", "Enero", "Febreo", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre");
$fechadia = date('j');
$fechames = date('n');
$fechaanyo = date ('Y');
$fecha = date ("j/n/Y");
echo "del dia " .$dia[date('w')];
echo " ";
echo "$fechadia";
echo " de " .$mes[$fechames];
echo " del ";
echo "$fechaanyo";
echo "<br>";

$ip = $HTTP_SERVER_VARS['REMOTE_ADDR'];
$nombredeip= gethostbyaddr($ip);

?></p>
<br />
<form name="ficha" method="post" action="confirm.php" >
<table border=0>
<tr><td>Fiche:</td></tr>
<?php
$bbdd = mysql_connect($host, $usuario, $password) or die ("Could not connect: " . mysql_error()); //conectamos con base de datos.
$tablausuario = mysql_select_db($bd, $bbdd) or die(mysql_error());//seleccionamos base de datos fichaje de nuestra base de datos.
$ftiempo = time ();
$fecha = date ("j/n/Y");
$consES = 'select entrada_salida from fichaje where user="'.$_SESSION[login].'" AND fecha="$fecha" '; //consulto la entrada o salida
$respES = mysql_query($consES, $bbdd) or die(mysql_error());; //ejecutamos la consulta.
$filaES = mysql_fetch_array($respES); //se guarda en un array las consultas.
$contES = $filaES['entrada_salida'];
$rows = mysql_num_rows($respES);
switch ($rows){
case 2:
echo "Ya has fichado la Entrada y la Salida";
break;
case 1:
$row = mysql_fetch_array($respES);
$contES = $row['entrada_salida'];
if($contES == "Entrada"){
echo '<tr><td><input type="Radio" name="ensa" value="Salida" checked> Salida</td></tr>' ;
} else {
echo '<tr><td><input type="Radio" name="ensa" value="Entrada" checked> Entrada</td></tr>';
}

break;
case 0:

echo '<tr><td><input type="Radio" name="ensa" value="Entrada" checked> Entrada</td></tr>';

break;
}

mysql_close();
?>


<tr><td><input type="submit" name="BotonFicha" value="Fichar"></td></tr></table>
</form>
Me podéis ayudar??Dónde puede estar el fallo??Porqué no reconoce si en la base de datos hay Entrada o Salida??Siempre me pasa por el "ELSE".

MUCHAS GRACIAS
  #9 (permalink)  
Antiguo 25/06/2008, 04:06
 
Fecha de Ingreso: octubre-2004
Mensajes: 2.627
Antigüedad: 19 años, 5 meses
Puntos: 48
Respuesta: Problema con consulta mysql y formulario php!

Creo que es porque lees 2 registros y solo hay uno. El primer registro lo lees aqui
Código PHP:
$respES mysql_query($consES$bbdd) or die(mysql_error());; //ejecutamos la consulta.
$filaES mysql_fetch_array($respES); //se guarda en un array las consultas.
$contES $filaES['entrada_salida'];
$rows mysql_num_rows($respES); 
Ahi ejecutas el mysql_fetch_array() que lee el primer registro de $respES. Y luego lees el siguiente registro en
Código PHP:
case 1:
$row mysql_fetch_array($respES);
$contES $row['entrada_salida'];
if(
$contES == "Entrada"){ 
Ahi tienes el segundo mysql_fetch_array() que lee el segundo registro. Como ese case se ejecuta cuando la consulta solo devuelve un registro, esa segunda lectura da como resultado false, y contES tiene un valor vacio (compruebalo con echo, var_dump, ... lo que tu veas en la base de datos no tiene por que coincidir con lo que esta leyendo tu script).

Si no lo necesitas, quita el $filaES=mysql_fetch_array() y la siguente linea (creo que sobran).
  #10 (permalink)  
Antiguo 25/06/2008, 04:23
 
Fecha de Ingreso: junio-2008
Mensajes: 56
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Problema con consulta mysql y formulario php!

Ya e quitado $filaES y $contES, pero sigue mostrando ENTRADA cuando el usuario ya ha fichado la entrada, es decir, en el atributo de "entrada_salida" a fecha de hoy ya tiene el valor de Entrada por lo que debería mostrar el botón de SALIDA del formulario.

Reescribo código actual para que quede más claro:

Cita:
<form name="ficha" method="post" action="confirm.php" >
<table border=0>
<tr><td>Fiche:</td></tr>
<?php
$bbdd = mysql_connect($host, $usuario, $password) or die ("Could not connect: " . mysql_error()); //conectamos con base de datos.
$tablausuario = mysql_select_db($bd, $bbdd) or die(mysql_error());//seleccionamos base de datos fichaje de nuestra base de datos.
$ftiempo = time ();
$fecha = date ("j/n/Y");
$consES = 'select entrada_salida from fichaje where user="'.$_SESSION[login].'" AND fecha="$fecha" '; //consulto la entrada o salida
$respES = mysql_query($consES, $bbdd) or die(mysql_error());; //ejecutamos la consulta.

$rows = mysql_num_rows($respES);
switch ($rows){
case 2:
echo "Ya has fichado la Entrada y la Salida";
break;
case 1:
$row = mysql_fetch_array($respES);
$contES = $row['entrada_salida'];
if($contES == "Entrada"){
echo '<tr><td><input type="Radio" name="ensa" value="Salida" checked> Salida</td></tr>' ;
} else {
echo '<tr><td><input type="Radio" name="ensa" value="Entrada" checked> Entrada</td></tr>';
}

break;
case 0:

echo '<tr><td><input type="Radio" name="ensa" value="Entrada" checked> Entrada</td></tr>';

break;
}

mysql_close();
?>


<tr><td><input type="submit" name="BotonFicha" value="Fichar"></td></tr></table>
</form>
  #11 (permalink)  
Antiguo 25/06/2008, 04:57
 
Fecha de Ingreso: octubre-2004
Mensajes: 2.627
Antigüedad: 19 años, 5 meses
Puntos: 48
Respuesta: Problema con consulta mysql y formulario php!

¿Ya has hecho un print_r($row) antes del if? O un echo de $contES. No basta con que tu veas directamente en la base de datos que el registro tiene ese valor. Tienes que ver los datos que esta leyendo tu script. Quizas tu consulta no esta leyendo los registros que tu crees. Al final todo codigo no es mas que procesar los datos de entrada, tienes que verificar que esos datos de entrada son leidos correctamente.
  #12 (permalink)  
Antiguo 25/06/2008, 05:07
 
Fecha de Ingreso: junio-2008
Mensajes: 56
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Problema con consulta mysql y formulario php!

Si, he hecho un print_r($rows) y un echo $consES, pero simplemente no muestra nada :(
No sé que pasa con el código....en qué falla....
  #13 (permalink)  
Antiguo 25/06/2008, 05:10
 
Fecha de Ingreso: junio-2008
Mensajes: 56
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Problema con consulta mysql y formulario php!

Ya me ha devuelto.

Con print_r($rows) me devuelve '0'
y con echo de $respES me devuelve select entrada_salida from fichaje where user="alfredo" AND fecha=".$fecha."

user="alfredo" es el usuario que en este caso soy yo.

Haber si con esta información ya sabes dónde estoy fallando.

Gracias.
  #14 (permalink)  
Antiguo 25/06/2008, 05:45
 
Fecha de Ingreso: octubre-2004
Mensajes: 2.627
Antigüedad: 19 años, 5 meses
Puntos: 48
Respuesta: Problema con consulta mysql y formulario php!

Esta mal la consulta, fijate que en el echo te sale $fecha sin sustituir por su valor. Revisar las comillas. Por eso la consulta te sale sin registros.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:33.