Foros aprenderaprogramar.com
Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: Dimitar Stefanov en 16 de Mayo 2016, 17:39
-
Buenas tardes. Hago entrega de los ejercicios de la entrega CU00842B del curso básico de programador web: PHP desde cero.
EJERCICIO 1
Utilizando la tabla agenda que hemos empleado en los ejemplos y funciones para manejo de cadenas PHP, realiza una consulta a la base de datos para extraer todos los nombres y determina cuántos nombres en la base de datos empiezan por M.
Ejemplo de resultados a obtener: En la base de datos los nombres que empiezan por M son: 2
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Ejemplo aprenderaprogramar.com</title>
</head>
<body>
<?php
function buscarLetraIniciaNombre($fila){
$cadena = "M";
$contador = 0;
if(strncasecmp($fila['nombre'], $cadena, 1) == 0){
$contador = 1;
}
return $contador;
}
$link = mysqli_connect("localhost", "root");
mysqli_select_db($link, "mibasededatos");
$tildes = $link -> query("SET NAMES 'utf8'");
$result = mysqli_query($link, "SELECT * FROM agenda");
$coincidencia = 0;
while($fila = mysqli_fetch_array($result)){
buscarLetraIniciaNombre($fila);
$coincidencia = $coincidencia + buscarLetraIniciaNombre($fila);
}
echo "En la base de datos los nombre que empiezan por M son: ".$coincidencia;
mysqli_free_result($result);
mysqli_close($link);
?>
</body>
</html>
EJERCICIO 2
Utilizando la tabla <<ciudades>> que hemos utilizado para ejercicios de entregas anteriores del curso,
Crea un archivo php donde se realice una consulta a la base de datos para extraer todos los datos de la tabla y a continuación calcula la suma de habitantes de todos los países y cuántas de estas ciudades tienen metro. Muestra el resultado por pantalla.
Ejemplo de resultados a obtener:
La suma de habitantes de México D.F., Barcelona, Buenos Aires, Medellín, Lima, Caracas, Santiago, Antigua, Quito y La Habana es: 5663886 habitantes
De estas ciudades tienen metro: 5 ciudades.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Ejemplo aprenderaprogramar.com</title>
</head>
<body>
<?php
$link = mysqli_connect("localhost", "root");
mysqli_select_db($link, "prueba");
$tildes = $link -> query("SET NAMES 'utf8'");
$result = mysqli_query($link, "SELECT * FROM ciudades");
$habitantes = 0;
$metro = 0;
$msg = "La suma de habitanes de: ";
$pasadasDeWhile = 1;
while($fila = mysqli_fetch_array($result)){
disponibilidadMetro($fila);
if($pasadasDeWhile == 10){
$msg = $msg.$fila['ciudad'];
}else{
$msg = $msg.$fila['ciudad'].", ";
}
$habitantes = $habitantes + $fila['habitantes'];
$metro = $metro + disponibilidadMetro($fila);
$pasadasDeWhile++;
}
function disponibilidadMetro($fila){
$contador = 0;
if($fila['tieneMetro'] == 1){
$contador = 1;
}
return $contador;
}
echo $msg." es: ".$habitantes;
echo "<br><br>De estas ciudades tienen metro: ".$metro." ciudades.";
mysqli_free_result($result);
mysqli_close($link);
?>
</body>
</html>
Mi pregunta es: en la parte del código:
while($fila = mysqli_fetch_array($result)){
disponibilidadMetro($fila);
if($pasadasDeWhile == 10){
$msg = $msg.$fila['ciudad'];
}else{
$msg = $msg.$fila['ciudad'].", ";
}
$habitantes = $habitantes + $fila['habitantes'];
$metro = $metro + disponibilidadMetro($fila);
$pasadasDeWhile++;
}
Puede especificar el último registro de la tabla, porque sé que hay 10 registros. Pero como puede hacer esta condicional:
if($pasadasDeWhile == 10)
sin haber mirado la table en phpMyAdmin? No puedo hacer algo como:
if($pasadasDeWhile == count($result))
Evidentemente no me funciona, porque lo probé y el método "count($result)" me devuelve un valor de "12". Que por cierto, no sé de donde sale, porque los registros en la tabla "ciudades" son 10.
Me tiene intrigado. He mirado por internet y veo que hay unas instrucciones como:
Imaginemos que nuestra tabla "libros" contiene muchos registros. Para averiguar la cantidad sin necesidad de contarlos manualmente usamos la función "count()":
select count(*) from libros;
pero no consigo aplicarlo.
Gracias.
-
Misterio resuelto. Contestando a mi propia duda, se podrá conseguir con la instrucción "mysqli_num_rows($result);"
Es decir, el código quedará así:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Ejemplo aprenderaprogramar.com</title>
</head>
<body>
<?php
$link = mysqli_connect("localhost", "root");
mysqli_select_db($link, "prueba");
$tildes = $link -> query("SET NAMES 'utf8'");
$result = mysqli_query($link, "SELECT * FROM ciudades");
$numero = mysqli_num_rows($result);
$habitantes = 0;
$metro = 0;
$msg = "La suma de habitanes de: ";
$pasadasDeWhile = 1;
while($fila = mysqli_fetch_array($result)){
disponibilidadMetro($fila);
if($pasadasDeWhile == $numero){
$msg = $msg.$fila['ciudad'];
}else{
$msg = $msg.$fila['ciudad'].", ";
}
$habitantes = $habitantes + $fila['habitantes'];
$metro = $metro + disponibilidadMetro($fila);
$pasadasDeWhile++;
}
function disponibilidadMetro($fila){
$contador = 0;
if($fila['tieneMetro'] == 1){
$contador = 1;
}
return $contador;
}
echo $msg." es: ".$habitantes;
echo "<br><br>De estas ciudades tienen metro: ".$metro." ciudades.";
mysqli_free_result($result);
mysqli_close($link);
?>
</body>
</html>
Quizás me podriáis proponer otras maneras.
Gracias.
-
Hola! Supongo que hay múltiples maneras. Otra manera que se me ocurre es primero hacer la extracción de la información y contar el número de datos que extraes (por ejemplo usando un contador). Luego con ese contador ya conoces el número de datos. Sin embargo veo preferible algo como lo qué tú mismo has indicado.
Saludos!