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

me podrías dar un ejemplo amigo, tratado de hacerlo así pero me da error:

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

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

$error = FALSE;
foreach ($idinscripcion_proyectos  as $key => $proyecto) {
   $sql="SELECT count(1) as item FROM pre_inscripcion WHERE estado IN('NO Asistio', 'Por Asistir') AND cedula='$cedula[$key]' LIMIT 1";
   $res=mysql_query($sql,$link);
// significa que tiene no asistio o tiene por asistir esa cedula
  if (mysql_num_rows($res) > 0) {
    $error = TRUE;
  } 
}

if ($error) {

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");

}

else 

  $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: El Registro ya se Encuentra Insertado ! 
</h5>
</div>";
header("refresh:5;registrar_inscripcion.php");

}

?>

0voto

Leonardo-Tadei comentado

La idea es esa... qué error te da?

Igual, yo haría la query más simple todavía, y preguntando por el valor positivo:

SELECT count(estado) as item FROM pre_inscripcion WHERE estado ='Asistio' AND cedula='$cedula[$key]'

Esta query te devolverá 1 si asistió o 0 si no asistió.

0voto

yoclens comentado

Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\scomunitario\admin\registrar_inscripcion.php on line 127

si tiene los estado No Asistio y Por Asistir no se puede inscribir

0voto

Leonardo-Tadei comentado

No estás poniendo el formulario que envía estos datos, pero el error es porque $nombres debería ser un vector y no lo es, lo que significa que $_POST['nombres']; no es un vector HTML...

0voto

yoclens comentado

el formulario

`<!-- formulario -->
<form class="col s12" action="registrar_inscripcion.php" name="frmContacto" method="POST">

<h6 class="left-align blue-grey-text">Datos generales para el Proyecto</h6>

<div class="row">
<div class="input-field col s12 m12">
<textarea id="titulo_proyecto" name="titulo_proyecto" class="materialize-textarea" length="600"
title="Describe tu Mensaje" autocomplete="off" required/></textarea>
<label for="titulo_proyecto">Título del Proyecto:</label>
</div>
</div>

<div class="row">
<div class="input-field col s12 m4">
<select select name="iddepartamentos" id="iddepartamentos"
title="Seleccione el departamento!" required/>
<option value="" disabled selected>Departamento:</option>
<?php
include('../conexion/conexion.php');
$result = mysql_query("SELECT * FROM departamentos");
while ($row=mysql_fetch_array($result)) {
?>
<option value="<?php echo $row['departamentos'] ;?>">
<?php echo $row['departamentos'] ;?></option>
<?php
}
mysql_close($link);
?>
</select>
</div>

<div class="input-field col s12 m4">
<select class="icons" name="idprofesor" id="idprofesor"
title="Seleccione el Porfesor!" required/>
<option value="" disabled selected>Asignar Profesor:</option>
<?php
include('../conexion/conexion.php');
$result = mysql_query("SELECT * FROM profesores");
while ($row=mysql_fetch_array($result)) {
?>
<option value="<?php echo $row['cedula'] ;?>" data-icon="../galerias_profesores/<?php echo $row['portada'];?>" class="left circle" width="70px" height="70px">
<?php echo $row['cedula'] ;?> <?php echo $row['nombres'] ;?> <?php echo $row['apellidos'] ;?></option>

<?php
}
mysql_close($link);
?>
</select>
</div>

<div class="input-field col s12 m4">
<select select name="idusuarios" id="idusuarios"
title="Disculpa, seleccione el usuario responsable!" required/>
<option value="" disabled selected>Responsable:</option>
<?php
include('../conexion/conexion.php');
$result = mysql_query("SELECT * FROM usuarios WHERE idnivel= 'Administrador'");
while ($row=mysql_fetch_array($result)) {
?>
<option value="<?php echo $row['cedula'];?>">
<?php echo $row['cedula'];?> <?php echo $row['nombres'] ;?> <?php echo $row['apellidos'] ;?></option>
<?php
}
mysql_close($link);
?>
</select>

</div>

<br>

<div class="col left s12 m12">
<h6 class="left-align blue-grey-text">Datos Alumnos</h6>
</div><br><br><br><br>

<div class="row">
<div class="inputs">

<div id="alumno1">

<div class="input-field col s12 m4">
<input id="cedula" type="text" name="cedula[]" autocomplete="off" title="Cedula!" autofocus="autofocus" required/>
<label for="cedula">Cédula:</label>
</div>

<div class="input-field col s12 m4">
<input id="nombres" type="text" name="nombres[]" autocomplete="off" title="Nombres!" autofocus="autofocus" required/>
<label for="cedula">Nombres:</label>
</div>

<div class="input-field col s12 m4">
<input id="apellidos" type="text" name="apellidos[]" autocomplete="off" title="Apellidos!" autofocus="autofocus" required/>
<label for="cedula">Apellidos:</label>
</div>
</div>

<div id="alumno2">

<div class="input-field col s12 m4">
<input id="cedula" type="text" name="cedula[]" autocomplete="off" title="Cedula!" autofocus="autofocus" required/>
<label for="cedula">Cédula:</label>
</div>

<div class="input-field col s12 m4">
<input id="nombres" type="text" name="nombres[]" autocomplete="off" title="Nombres!" autofocus="autofocus" required/>
<label for="cedula">Nombres:</label>
</div>

<div class="input-field col s12 m4">
<input id="apellidos" type="text" name="apellidos[]" autocomplete="off" title="Apellidos!" autofocus="autofocus" required/>
<label for="cedula">Apellidos:</label>
</div>
</div>

<div id="alumno3">

<div class="input-field col s12 m4">
<input id="cedula" type="text" name="cedula[]" autocomplete="off" title="Cedula!" autofocus="autofocus" required/>
<label for="cedula">Cédula:</label>
</div>

<div class="input-field col s12 m4">
<input id="nombres" type="text" name="nombres[]" autocomplete="off" title="Nombres!" autofocus="autofocus" required/>
<label for="cedula">Nombres:</label>
</div>

<div class="input-field col s12 m4">
<input id="apellidos" type="text" name="apellidos[]" autocomplete="off" title="Apellidos!" autofocus="autofocus" required/>
<label for="cedula">Apellidos:</label>
</div>
</div>

</div>
</div>

<div class="center-btn">
<button id="agregar" type="button"
class="btn waves-effect blue-grey darken-4 btn-medium">+</button>

<button id="quitar" type="button" style="display:none;"
class="btn waves-effect blue-grey darken-4 btn-medium">-</button>

<button type="submit" name="guardar"
class="btn waves-effect blue-grey darken-4 btn-medium">Aceptar</button>

<button type="reset"
class="btn waves-effect blue-grey darken-4 btn-medium">Cancelar</button>

<a href='inscripcion.php'
button class='btn waves-effect blue-grey darken-4 btn-medium'type='submit'>
Volver Atrás
</button></a>

</div>

<input type='hidden' name='id' value='id'>
<input type='hidden' name='idinscripcion_proyectos' value='id'>
</form>

</div>

</div>
</div>
</section>
<!-- fin formulario -->`

0voto

Leonardo-Tadei comentado

Tenés IDs repetidos en el HTML y no sé si esto hace que algo falle, pero los INPUT para nombres[] están bien definidos...

Poné antes de hacer la query con la validación un var_dump($_POST); y copianos la salida que obtengas, así vemos qué es lo que está recibiendo el script y qué pasa con el vector...

0voto

yoclens comentado

si ellos llegan perfectamente he modificado el codigo y el unico problema que tengo ahora es que se me activa el mjs de: ¡ Ups Aviso: Disculpe Este(os) Usuario no Puede Inscribirse en proyecto ya que no Asistio a la Charla ! que es lo que se quiere cuando los usuarios tiene el estado NO Asistio y Por Asisitir, pero en este caso los tres usuarios tienen el estado Asistio, lo que me faltaría es eso y cuando de ese tipo de mjs diga que cedula son las que no pueden registrarse. anexo el nuevo codigo.

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

//var_dump($_POST);

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

$titulo_proyecto=$_POST['titulo_proyecto'];
$iddepartamentos=$_POST['iddepartamentos'];
$idprofesor=$_POST['idprofesor'];
$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);
        if (mysql_num_rows($res) > 0) 

            {

                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 Asistio a la Charla ! 
                </h5>
                </div>";
                //header("refresh:5;registrar_inscripcion.php");

          }

            else

          {

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

          if($nrows==0)
            {

             if (mysql_query("INSERT INTO inscripcion_proyectos (id,titulo_proyecto,iddepartamentos,idprofesor,idusuarios) VALUES 
                ('$id','$titulo_proyecto','$iddepartamentos','$idprofesor','$idusuarios')",$link));
                  $last_id = mysql_insert_id();

                  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: El Reegistro ya se encuenta Insertado ! 
              </h5>
              </div>";
             //header("refresh:5;registrar_inscripcion.php");

          } 

   } 
?>

0voto

Leonardo-Tadei comentado

Te comentaba más arriba que la query no era la más adecuada...

La consulta

$sql_user="SELECT count(1) as item FROM pre_inscripcion WHERE estado IN('NO Asistio', 'Por Asistir') AND cedula='$cedula' LIMIT 1";

siempre devuelve un registro, que contendrá 0 o 1 según el caso.

Vos al validar estás preguntando si devolvió un registro, lo cual siempre se cumplirá, y no por el valor de la respuesta...

Lo que tenés que preguntar es si el resultado es 0 o 1.

0voto

yoclens comentado

como deberia ser amigo ya que en esa tabla hay usuarios on estado Por Asistir, NO Asistio y Asistio

0voto

Leonardo-Tadei comentado

No me estás entendiendo @yoclens: tu query siempre devuelve 1 registro.

Para validar estás haciendo

...
if (mysql_num_rows($res) > 0) 
...

Lo que siempre será verdadero, porque tu query siempre devuelve un registro.

Te das cuenta de por qué esta comparación no sirve? querés que te escriba una comparación que serviría?

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