0% encontró este documento útil (0 votos)
37 vistas26 páginas

PHP 5

Descargar como pdf o txt
Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1/ 26

Aplicaciones Web

[email protected]

Dr. Leonardo Chancay García 1


PHP - SQL

[email protected]

Dr. Leonardo Chancay García 2


INSERT (y consulta de otra tabla)
<html> <head> <title>Problema</title> </head> <body>
• Vamos a ver como resolver el <form action="pagina2.php" method="post">
problema del alta de un Ingrese nombre:
alumno seleccionando el <input type="text" name="nombre"><br>

curso de la tabla "cursos". Ingrese mail:


<input type="text" name="mail"><br>
• Es decir, el formulario de Seleccione el curso:
carga de datos no es HTML <select name="codigocurso">
<?php
puro ya que debemos cargar
$conexion = mysqli_connect("localhost", "root", "", "base1") or
el control "select" con los die("Problemas con la conexión");
datos de la tabla cursos: $registros = mysqli_query($conexion, "select codigo,nombrecurso from cursos") or
die("Problemas en el select:" . mysqli_error($conexion));
while ($reg = mysqli_fetch_array($registros)) {
echo "<option value=\"$reg[codigo]\">$reg[nombrecurso]</option>";
}
?>
</select>
<br>
<input type="submit" value="Registrar">
</form> </body> </html>

pagina1.php

Dr. Leonardo Chancay García 3


INSERT (y consulta de otra tabla)
• Las opciones del "select" se generan dentro del while, imprimiendo el campo
nombrecurso y asociando el campo codigo a la propiedad value
• Tengamos en cuenta que cuando queremos imprimir una comilla doble dentro de un
string en PHP debemos escaparla con el caracter \
• La página que efectúa el insert es parecida a las vistas anteriormente:
<html> <head> <title>Problema</title></head> <body>
<?php
$conexion = mysqli_connect("localhost", "root", "", "base1") or
die("Problemas con la conexión");
mysqli_query($conexion, "insert into alumnos(nombre,mail,codigocurso)
values ('$_REQUEST[nombre]','$_REQUEST[mail]',$_REQUEST[codigocurso])") or
die("Problemas en el select" . mysqli_error($conexion));
mysqli_close($conexion);
echo "El alumno fue dado de alta.";
?> </body> </html>
pagina2.php

Dr. Leonardo Chancay García 4


Problema propuesto
Hacer el alta de la tabla alumnos empleando controles de tipo "radio" para la selección del curso.

pagina1.php

Dr. Leonardo Chancay García 5


Problema propuesto

pagina2.php

Dr. Leonardo Chancay García 6


Listado - INNER JOIN
• selección de registros de <html> <head> <title>Problema</title> </head> <body>

varias tablas - INNER JOIN <?php

$conexion = mysqli_connect("localhost", "root", "", "base1") or


• Como imprimir todos los die("Problemas con la conexión");
alumnos inscriptos a los
$registros = mysqli_query(
cursos junto al nombre del
$conexion, "select alu.codigo as codigo, nombre, mail, codigocurso, nombrecurso
curso donde está inscripto.
from alumnos as alu inner join cursos as cur on cur.codigo=alu.codigocurso") or
Los datos se encuentran en
die("Problemas en el select:" . mysqli_error($conexion));
las tablas "alumnos" y
while ($reg = mysqli_fetch_array($registros)) {
“cursos".
echo "Codigo:" . $reg['codigo'] . "<br>";

• Debemos enlazar el código echo "Nombre:" . $reg['nombre'] . "<br>";


d e c u rs o d e l a ta b l a echo "Mail:" . $reg['mail'] . "<br>";
"alumnos" con el código de echo "Curso:" . $reg['nombrecurso'] . "<br>";
la tabla “cursos". echo "<hr>";

mysqli_close($conexion);

?> </body> </html>


pagina1.php

Dr. Leonardo Chancay García 7


Listado - INNER JOIN
• Lo primero es como hacer el enlace con la tabla
cursos: • En este caso rescatamos el código del alumno (y
no el código de curso). Debemos crear un alias si
inner join cursos as cur on
dos tablas tienen el mismo nombre de campo
cur.codigo=alu.codigocurso
para evitar confusión; como ocurre aquí con el
• Crear un alias de una tabla mediante la palabra campo codigo de las tablas alumnos y cursos.
clave as. También creamos un alias para la tabla alumnos.
• Seguidamente de la palabra clave on, indicamos • Los datos mostrados en la página haciendo
los campos por los que apareamos las tablas, en referencia al alias del campo:
nuestro caso el codigo de la tabla cursos con el
codigocurso de la tabla alumnos. while ($reg = mysqli_fetch_array($registros)) {

• En el sele hay que indicar a que tabla pertenece echo "Codigo:" . $reg['codigo'] . "<br>";
en el caso que tengan el mismo nombre:
echo "Nombre:" . $reg['nombre'] . "<br>";
$registros = mysqli_query($conexion, "select
echo "Mail:" . $reg['mail'] . "<br>";
alu.codigo as codigo, nombre, mail, codigocurso,
nombrecurso echo "Curso:" . $reg['nombrecurso'] . "<br>";
from alumnos as alu inner join cursos as cur on
echo "<hr>";
cur.codigo=alu.codigocurso") or
die("Problemas en el select:" . }
mysqli_error($conexion));

Dr. Leonardo Chancay García 8


Problema propuesto
• Crear una pagina que permita ingresar el código de un alumno y nos muestre
su nombre, mail y nombre del curso en el cual está inscripto. Hacer un
formulario donde se ingrese el código de alumno y otra página donde se
muestren los datos respectivos. Mostrar un mensaje si no existe el código de
alumno ingresado.

Dr. Leonardo Chancay García 9


Función count de SQL
• Hay en MySQL funciones que nos permiten contar registros, calcular sumas, promedios,
obtener valores máximos y mínimos.
• Cuando necesitamos saber la cantidad de registros utilizamos la función count, por
ejemplo si deseamos conocer la cantidad de alumnos que hay en la tabla "alumnos"
debemos implementar el siguiente comando SQL:
select count(*) as cantidad from alumnos
<html> <head> <title>Problema</title> </head> <body>
<?php
$conexion = mysqli_connect("localhost", "root", "", "base1") or
die("Problemas con la conexión");
$registros = mysqli_query($conexion, "select count(*) as cantidad from alumnos") or
die("Problemas en el select:" . mysqli_error($conexion));
$reg = mysqli_fetch_array($registros);
echo "La cantidad de alumnos inscriptos son :" . $reg['cantidad'];
?>
</body> </html> pagina1.php

Dr. Leonardo Chancay García 10


Función count de SQL
• En la sentencia select en vez de indicar los campos de la tabla, colocamos la
llamada a la función count pasando como parámetro un asterisco y creando
un alias para su posterior recuperación e impresión del dato:
$registros = mysqli_query($conexion, "select count(*) as cantidad from alumnos") or
die("Problemas en el select:" . mysqli_error($conexion));
• El select no tiene cláusula where ya que debemos contar todos los alumnos y
no los de algún curso en particular.
• La llamada a la función mysqli_fetch_array se hace sin estructura condicional
o repetitiva ya que sabemos que nos retornará un único registro (en realidad,
un registro que tiene una sola columna llamada cantidad, en caso de estar
vacía la tabla alumnos, se almacena cero en el alias cantidad):
$reg = mysqli_fetch_array($registros);

Dr. Leonardo Chancay García 11


Problema propuesto
• Crear una pagina que muestre por pantalla los nombres de todos los cursos y
al final la cantidad total de cursos.

Dr. Leonardo Chancay García 12


UPDATE
• Modificación de un registro trabajando con dos tablas
• Ahora complicaremos un poco la modificación de un registro consultando dos
tablas.
• Es decir: supongamos que un alumno desea cambiarse de curso, es decir, se
inscribió en uno y quiere borrarse de ese e inscribirse en otro diferente.
Debemos mostrar en un "select" el curso actual en el que está inscripto y los
otros cursos disponibles en la tabla "cursos".
• Para resolver este problema tenemos que plantear tres páginas, una donde
ingresemos el mail del alumno, la segunda donde se pueda cambiar el curso y
por última una que permita modificar la tabla "alumnos" con el nuevo curso
seleccionado.

Dr. Leonardo Chancay García 13


Update <html>
<head>
<title>Problema</title>
</head>
<body>
<form action="pagina2.php" method="post">
Ingrese el mail del alumno:
<input type="text" name="mail"><br>
<input type="submit" value="buscar">
</form>
</body>
</html>

pagina1.html

Dr. Leonardo Chancay García 14


Update la más importante en cuanto a novedades
<html> <head> <title>Problema</title> </head> <body>

<?php

$conexion = mysqli_connect("localhost", "root", "", "base1") or die("Problemas con la conexión");

$registros = mysqli_query($conexion, "select * from alumnos where mail='$_REQUEST[mail]'") or


die("Problemas en el select:" . mysqli_error($conexion));

if ($regalu = mysqli_fetch_array($registros)) {

?>

<form action="pagina3.php" method="post">

<input type="hidden" name="mailviejo" value="<?php echo $regalu['mail'] ?>">

<select name="codigocurso">

<?php

$registros = mysqli_query($conexion, "select * from cursos") or die("Problemas en el select:" .


mysqli_error($conexion));
<br>
while ($reg = mysqli_fetch_array($registros)) {
<input type="submit" value="Modificar">
if ($regalu['codigocurso'] == $reg[‘codigo'])
</form>
echo "<option value=\"$reg[codigo]\" selected>$reg[nombrecurso]</option>";
<?php
else
} else
echo "<option value=\"$reg[codigo]\">$reg[nombrecurso]</option>";
echo "No existe alumno con dicho mail";
}
?>
?> </select>
pagina2.php </body> </html>

Dr. Leonardo Chancay García 15


Update
se procede a registrar el cambio en la tabla "alumnos"

<html> <head> <title>Problema</title> </head> <body>


<?php
$conexion = mysqli_connect("localhost", "root", "", "base1") or
die("Problemas con la conexión");
$registros = mysqli_query($conexion, "update alumnos
set codigocurso=$_REQUEST[codigocurso]
where mail='$_REQUEST[mailviejo]'") or
die("Problemas en el select:" . mysqli_error($conexion));
echo "El curso fue modificado con exito";
?>
</body> </html>

pagina3.php

Dr. Leonardo Chancay García 16


Problema propuesto
• Una pagina que permita la modificación del mail, nombre y curso de la tabla
"alumnos". Ingresar por teclado el código de alumno para su búsqueda.

pagina1.php

Dr. Leonardo Chancay García 17


Problema propuesto

pagina2.php

Dr. Leonardo Chancay García 18


Problema propuesto

pagina3.php

Dr. Leonardo Chancay García 19


Ejercicio
• Efectuar la modificación del nombre del curso de la tabla "cursos". Para la
búsqueda ingresar el código de curso

pagina1.php

Dr. Leonardo Chancay García 20


Ejercicio

pagina2.php

Dr. Leonardo Chancay García 21


Ejercicio

pagina3.php

Dr. Leonardo Chancay García 22


Cláusula Group By de SQL
• Entre las muchas posibilidades que nos brinda SQL, una es agrupar registros y
obtener información resumida de tablas.
• En nuestro problema, un listado interesante sería mostrar la cantidad de
alumnos inscriptos por curso. Para resolver de una manera sencilla esta
situación, SQL nos permite agrupar los registros de la tabla "alumnos" por la
columna "codigocurso" y contar la cantidad de registros que hay por cada
código de curso igual.

Dr. Leonardo Chancay García 23


Cláusula Group By de SQL
<html> <head> <title>Problema</title> </head> <body>
<?php
$conexion = mysqli_connect("localhost", "root", "", "base1") or die("Problemas con la conexión");
$registros = mysqli_query($conexion, "select count(alu.codigo) as cantidad, nombrecurso from
alumnos as alu
inner join cursos as cur on cur.codigo=alu.codigocurso
group by alu.codigocurso") or die("Problemas en el select:" . mysqli_error($conexion));
while ($reg = mysqli_fetch_array($registros)) {
echo "Nombre del curso:" . $reg['nombrecurso'] . "<br>";
echo "Cantidad de inscriptos:" . $reg['cantidad'] . "<br>";
echo "<hr>";
}
mysqli_close($conexion);
?>
</body>
</html>

pagina1.php

Dr. Leonardo Chancay García 24


Problema propuesto
• Confeccionar un programa que muestre el nombre del curso, la cantidad de
inscriptos y todos los inscriptos a dicho curso. Repetir esto con todos los
cursos.
• Es decir, en la página debe aparecer algo parecido a:

Nombre del curso:PHP


Cantidad de inscriptos:3
Nombres: Martinez Luis - Rodriguez Pablo - Gonzalez Ana

Nombre del curso:JSP


Cantidad de inscriptos:2
Nombres: Hernandez Hector - Roca Marta

Dr. Leonardo Chancay García 25


Problema propuesto

pagina1.php

Dr. Leonardo Chancay García 26

También podría gustarte