3

Buenas tengo un problema actualmente en mi código, estoy trabajando en un sistema de inscripción de alumnos, donde un representante puede inscribir varios alumnos, pero si elimino un alumno no quiero que se borren los datos del representante por que este puede tener otro alumno inscrito, solo se borraría si y solo si ya no posee alumnos inscritos.

PD: vale acotar que CedulaRepresentanteRef se encuentra en la tabla alumnos y es la clave foránea de CedulaRepresentante (Clave Primaria) ubicada en la tabla representante.

<?php

$Conexion = mysqli_connect("localhost","root","","prueba2") or die ("No se pudo realizar la conexion");


$Registros = mysqli_query($Conexion, "select * from documentos, estatusalumno, padres, alumnos inner join representantes on alumnos.CedulaRepresentanteRef = representantes.CedulaRepresentante where alumnos.CedulaAlumno = '$_REQUEST[CedulaAlumno]'") or die ("Problemas en el select: ".mysqli_error($Conexion));


if ($Reg = mysqli_fetch_array($Registros))
$CedulaRepresentanteRef = $Reg['CedulaRepresentanteRef'];

{
    mysqli_query($Conexion, "delete from alumnos where CedulaAlumno = '$_REQUEST[CedulaAlumno]'")
    or die ("Problemas en el select: ".mysqli_error($Conexion));

    mysqli_query($Conexion, "delete from estatusalumno where CedulaAlumno = '$_REQUEST[CedulaAlumno]'")
    or die ("Problemas en el select: ".mysqli_error($Conexion));

    mysqli_query($Conexion, "delete from padres where CedulaAlumno = '$_REQUEST[CedulaAlumno]'")
    or die ("Problemas en el select: ".mysqli_error($Conexion));

    mysqli_query($Conexion, "delete from documentos where CedulaAlumno = '$_REQUEST[CedulaAlumno]'")
    or die ("Problemas en el select: ".mysqli_error($Conexion));



            $Registros2 = mysqli_query($Conexion, "select * from alumnos, representantes") or die 
            ("Problemas en el segundo registro: ".mysqli_error($Conexion));

            $Reg2 = mysqli_fetch_array($Registros2);

            if ($CedulaRepresentanteRef <> $Reg2['CedulaRepresentante']) 

            {
            mysqli_query($Conexion, "delete from representantes where CedulaRepresentante = $CedulaRepresentanteRef")
            or die ("Problemas en el select: ".mysqli_error($Conexion));
            }

            else 

            {
                echo "Se ha eliminado el alumno";
            }
}

else 

{
    echo "No se encontro el alumno";
}   

mysqli_close($Conexion);

  ?>
shadowmors
  • 141
  • 2
  • 10

2 Answers2

2

Yo detecto en tu código un error de consulta del siguiente código:

$Registros2 = mysqli_query($Conexion, "select * from alumnos, reñpresentantes") or die ("Problemas en el segundo registro: "....

Yo creo que debes cambiar tu SELECT, porque estás consultando 2 tablas sin unirlas... Y al momento de solicitar la cedulaRepresentante pues no te mostrará la información que tu ocupas...

Alfonso Carrasco
  • 1,403
  • 6
  • 22
  • De echo si las esta uniendo, con esa sintaxis esta haciendo un **join implícito**. – Juan Pinzón Jun 08 '16 at 01:36
  • Ok, pero aun tengo el error y no lo localizo. Alguien tiene una idea de que debería hacer? – shadowmors Jun 08 '16 at 02:24
  • @JuanPinzón eso parece más un cross join que un join implícito. –  Jun 08 '16 at 02:25
  • @LuiggiMendoza ambos no son lo mismo??, un producto cartesiano. https://stackoverflow.com/questions/3918570/what-is-the-difference-between-using-a-cross-join-and-putting-a-comma-between-th – Juan Pinzón Jun 08 '16 at 02:31
  • 1
    @JuanPinzón es lo mismo decir `from t1, t2` que `from t1 cross join t2`, eso es correcto. Sin embargo, se conoce como `join` implícito una sentencia del tipo `from t1, t2 where ` como un `join` implícito. La verdad que decir que `from t1, t2` es un `join` implícito es extraño y poco usado. –  Jun 08 '16 at 03:09
  • @LuiggiMendoza Bueno yo lo conocía de esa manera, desde ahora lo tendré en cuenta, gracias por la corrección, :) – Juan Pinzón Jun 08 '16 at 03:14
0

si elimino un alumno no quiero que se borren los datos del representante por que este puede tener otro alumno inscrito

Antes de eliminar al representante a la ciega debes verificar que el representante no esté asociado a ningún otro alumno. Para ello, puedes utilizar un query como sigue:

//no conozco la estructura correcta de tus tablas, sería bueno
//si mostraras la relación entre alumno y cédula del representante
//o que arregles este query debidamente
$stmt = mysqli_prepare("SELECT COUNT(1) FROM alumnos WHERE CedulaRepresentante = ?");
mysqli_stmt_bind_param($stmt, "s", $CedulaRepresentanteRef);
mysqli_stmt_execute($stmt);
mysqli_stmt_bind_result($stmt, $alumnosDeRepresentante);
if ($alumnosDeRepresentante === 0) {
    //borrar representante
    //utiliza mysqli apropiadamente, como se muestra en el código previo
    mysqli_query($Conexion, "delete from alumnos where CedulaAlumno = '$_REQUEST[CedulaAlumno]'");
}

No es parte de la respuesta, pero tu código no está protegido contra ataques de inyección de SQL. Por favor revisa esta pregunta y respuesta respecto al tema.