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

3votos

ayuda con condición

Saludos amigos de la comunidad tengo una duda como puedo crear una condición que los usuarios que tengan el estado ¡por asistir!, ¡NO Asistio! no se puedan registrarse en la inscripción de un proyecto, ya que es un requisito que el usuario haya asistido a la charla para poder ser inscrito a un proyecto. Les explico el sistema funciona de esta manera los usuarios hacen una pre- inscripción en el sistema para almacenar esos datos tengo dos tablas las cuales son:

Tabla Usuarios
Id, usuario, clave, fk_nivel, correo, cedula, nombres, apellidos

Tabla pre_inscripcion
Fk_cedula, fk_idcarrera, estado

automáticamente cuando el usuario se registra su estado es Por Asistir, después dependiendo si el usuario(alumno) haya asistido a la charla o no haya asistido el administrador cambia su estado a No Asistio o Asistio.

Luego de eso tengo las siguientes tablas para hacer el registro de los proyectos y saber que alumnos están inscrito en ese proyecto

Tabla: inscripción_proyectos
Id, titulo_proyecto, fk_departamento, fk_profesor, fk_cedula_responsable

Tabla: inscripción_alumnos
Id, fk_inscripción_proyectos, fk_cedula

Ahora mi duda es como puede hacer esa condición… en el insert de inscripción_alumnos para validar que los alumnos que tengan ese estado no puedan inscribirse en un proyecto

código que uso para insertar en inscripción_alumnos:

<?php
if (isset ($_POST['guardar'])){

$id=$_POST['id'];
$idinscripcion_proyectos=$_POST['idinscripcion_proyectos'];
$cedula=$_POST['cedula'];
$nombres=$_POST['nombres'];
$apellidos=$_POST['apellidos'];

  $sql="SELECT * FROM inscripcion_alumnos WHERE id='$id' LIMIT 1";
  $res=mysql_query($sql,$link);
  $nrows=mysql_num_rows($res);

if($nrows==0){

for ($i = 0; $i < count($idinscripcion_proyectos); $i++) {
    foreach ($nombres as $key => $nombre) {

 if (mysql_query("INSERT INTO inscripcion_alumnos (id,idinscripcion_proyectos,cedula,nombres,apellidos) VALUES 
    ('$id','$last_id','$cedula[$key]','$nombres[$key]','$apellidos[$key]')",$link));

}
}

echo "<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;registrar_inscripcion.php");

          }
  else 

echo "<div class='col s12 card-panel blue lighten-2 center'>
<h5 class='black-text text-darken-2 center CONDENSED LIGHT5'>
¡ Ups Aviso: Disculpe Este Usuario no Puede Inscribirse en proyecto ya que no asistio a la charla ! 
</h5>
</div>";
header("refresh:5;registrar_inscripcion.php");

}

?>

2 Respuestas

2votos

yoclens Puntos1770
 // cuantos registros tiene $_POST['cedula']
  $countCedula = count($cedula);
  //
  $where="pre_inscripcion.estado = 'Asistio' AND (";
  foreach ($cedula as $key => $value) {
    $where.= ' pre_inscripcion.cedula="'.$value.'"' ;
    if( ($countCedula-1) > $key){ $where.= ' OR '; }
  }
  $where.=' )';

  //echo $where;
  $sql_user="SELECT usuarios.cedula,
                    usuarios.nombres,
                    usuarios.apellidos,
                    pre_inscripcion.estado
            FROM pre_inscripcion
            INNER JOIN usuarios ON pre_inscripcion.cedula=usuarios.cedula
            WHERE $where";
  //echo $sql_user;
        $res=mysql_query($sql_user,$link); 
        $nrows=mysql_num_rows($res);
        //echo '<br>numero de filas:'.$nrows;
          if($nrows < 3 OR $nrows > 5)

            {

                echo "<div class='col s12 card-panel blue lighten-2 center'>
                <h5 class='black-text text-darken-2 center CONDENSED LIGHT5'>
                ¡ Ups Aviso: Disculpe Este(os) Usuario no Puede Inscribirse en Proyecto ya que no Asistieron a la Charla ! 
                </h5>
                </div>";
                header("refresh:5;registrar_inscripcion.php");
                //exit;

          }

agradecido con un amigo que me pudo orientar y ayudar con esto...

1voto

Peter comentado

Gracias por compartirlo!

1voto

Leonardo-Tadei Puntos227320

Hola @yoclens,

y por qué no puedes simplemente hacer una query en pre_inscripcion con el ID del alumno, como si fuera una validación antes del INSERT, para ver si el usuario asistió o no asitió?

0voto

yoclens comentado

claro amigo los buenos consejos siempre son bien recibidos, disculpa que no te respondi

0voto

Leonardo-Tadei comentado

Perdón @yoclens, pero no entiendo tu respuesta ni por qué me pedís disculpas (que no hacen falta!)

Se entiende lo que te digo sobre la query y la forma en que estás usando la respuesta?

0voto

yoclens comentado

ok amigo te entiendo he redactado mi consulta mal, sera que me podrás dar un ejemplo de como debería ser esa consulta

0voto

Leonardo-Tadei comentado

Claro que sí!

Cómo te decía, tu query siempre devolverá un registro, así que no sirve preguntar de la manera en que lo hacés.

Podría cambiarse de esta manera:

...
$idusuarios=$_POST['idusuarios'];

        $sql_user="SELECT count(1) as item FROM pre_inscripcion WHERE estado IN('NO Asistio', 'Por Asistir') AND cedula='$cedula' LIMIT 1";
        $res=mysql_query($sql_user,$link);
        $reg=mysql_fetch_array($res); // cargo el registro con el resultado
        if ($reg[] == 0) 

            {
...

De esta forma lo que analizas es el contenido de la query, y no la cantidad de registros que devuelve.

Saludos cordiales!

0voto

yoclens comentado

gracias amigo por tu aporte, ya le he podido resolver el problema era que $cedula lo estoy mandando como un array porque no es solamente un usuario si no mínimo 3 máximo 5, bueno y otras cositas anexare la solución

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