Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Como hacer que en un select aparezcan datos según criterios

Estas en el tema de Como hacer que en un select aparezcan datos según criterios en el foro de PHP en Foros del Web. Hola buenas estoy haciendo un trabajo para clase y estoy atascado en una parte. Os explico el trabajo va sobre una página web de Pokémon ...
  #1 (permalink)  
Antiguo 08/01/2018, 06:25
 
Fecha de Ingreso: abril-2016
Mensajes: 18
Antigüedad: 2 años, 8 meses
Puntos: 1
Como hacer que en un select aparezcan datos según criterios

Hola buenas estoy haciendo un trabajo para clase y estoy atascado en una parte.

Os explico el trabajo va sobre una página web de Pokémon (Si, mis profesores son muy originales xD). En la web tengo que dar de alta a entrenadores y pokemons. Cuando se da de alta a un pokemon se le tiene que asignar un entrenado, asta ahí lo he conseguido. Pero un entrenador solo puede tener 6 pokemons. Lo que intento hacer es que en el select de entrenadores solo aparezcan aquellos que tienen menos de 6.

Por lo que he mirado creo que tengo que usar msqli_num_rows y count() pero no lo consigo...

Código PHP:
Ver original
  1. <html>
  2.     <head>
  3.         <meta charset="UTF-8">
  4.         <title>Pokémon</title>
  5.     </head>
  6.     <body>
  7.         <form method="post">
  8.             <h1>Alta Pokémon</h1>
  9.             Nombre Pokémon: <input type="text" name="nombre_pokemon" required><br>
  10.             Tipo:<select name="tipo_pokemon">
  11.                 <option value="agua" selected>Agua</option>
  12.                 <option value="fuego">Fuego</option>
  13.                 <option value="planta">Planta</option>
  14.                 <option value="Electrico">Electrico</option>
  15.                 <option value="dragon">Dragón</option>
  16.                 <option value="roca">Roca</option>
  17.             </select><br>
  18.             Habilidad:<input type="text" name="habilidad_pokemon" required><br>
  19.             Nivel de ataque:<input type="number" name="nivel_ataque" required><br>
  20.             Nivel de defensa:<input type="number" name="nivel_defensa" required><br>
  21.             Velocidad:<input type="number" name="velocidad" required><br>
  22.             Vida:<input type="number" name="vida_pokemon" required><br>
  23.             <p>Entrenador:
  24.                 <select name="entrenador">
  25.                     <?php
  26.                     require_once 'bbdd_stukemon.php';
  27.                     $codigos = selectEntrenador();
  28.                     while ($fila = mysqli_fetch_array($codigos)) {
  29.                         echo "<option>";
  30.                         echo $fila["name"];
  31.                         echo "</option>";
  32.                     }
  33.                     ?>
  34.                 </select>
  35.             </p>
  36.             <input type="submit" value="Enviar" name="send">
  37.         </form>
  38.         <a href="Menu_Stukemon.php">Volver al menú</a>
  39.         <?php
  40.         require_once 'bbdd_stukemon.php';
  41.         if (isset($_POST['send'])) {
  42.             $nombre = $_POST['nombre_pokemon'];
  43.             $tipo = $_POST['tipo_pokemon'];
  44.             $habilidad = $_POST['habilidad_pokemon'];
  45.             $nivel_ataque = $_POST['nivel_ataque'];
  46.             $nivel_defensa = $_POST['nivel_defensa'];
  47.             $velocidad = $_POST['velocidad'];
  48.             $vida = $_POST['vida_pokemon'];
  49.             $nivel = 0;
  50.             $entrenador=$_POST['entrenador'];
  51.             $resultado = insertarPokemon($nombre, $tipo, $habilidad, $nivel_ataque, $nivel_defensa, $velocidad, $vida, $nivel, $entrenador);
  52.             if ($resultado == "ok") {
  53.                 echo "Pokémon dado de alta";
  54.             } else {
  55.                 echo "ERROR: $resultado";
  56.             }
  57.         }
  58.         ?>
  59.     </body>
  60. </html>

Código PHP:
Ver original
  1. <?php
  2.  
  3. function conectar() {
  4.     $conexion = mysqli_connect("localhost", "root", "", "stukemon");
  5.     if (!$conexion) {
  6.         die("No se ha podido establecer la conexión");
  7.     }
  8.     return $conexion;
  9. }
  10.  
  11. function desconectar($conexion) {
  12.     mysqli_close($conexion);
  13. }
  14.  
  15. function insertar_entrenador($nombre_entrenador, $pokeballs, $pociones, $puntos) {
  16.     $c = conectar();
  17.     $insert = "insert into trainer values('$nombre_entrenador', '$pokeballs', '$pociones', '$puntos')";
  18.     if (mysqli_query($c, $insert)) {
  19.         $resultado = "ok";
  20.     } else {
  21.         $resultado = mysqli_error($c);
  22.     }
  23.     desconectar($c);
  24.     return $resultado;
  25. }
  26.  
  27. function selectEntrenador() {
  28.     $c = conectar();
  29.     $select = "select name from trainer";
  30.     $resultado = mysqli_query($c, $select);
  31.     desconectar($c);
  32.     return $resultado;
  33. }
  34.  
  35. function insertarPokemon($nombre, $tipo, $habilidad, $nivel_ataque, $nivel_defensa, $velocidad, $vida, $nivel, $entrenador) {
  36.     $c = conectar();
  37.     $insert = "insert into pokemon values('$nombre','$tipo','$habilidad','$nivel_ataque','$nivel_defensa','$velocidad','$vida','$nivel','$entrenador')";
  38.     if (mysqli_query($c, $insert)) {
  39.         $resultado = "ok";
  40.     } else {
  41.         $resultado = mysqli_error($c);
  42.     }
  43.     desconectar($c);
  44.     return $resultado;
  45. }
  46. ?>
  #2 (permalink)  
Antiguo 08/01/2018, 10:28
Avatar de Alexis88
Objetivista
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.427
Antigüedad: 7 años, 1 mes
Puntos: 928
Respuesta: Como hacer que en un select aparezcan datos según criterios

Necesitas hacer una consulta extra en la tabla "pokemon" en la cual, mediante una instrucción [inline]JOIN[inline], buscarás a los registros de la tabla "trainer" asociados con los registros de la tabla "pokemon" cuya cantidad total de apariciones en dicha tabla sea menor a seis.

Código MySQL:
Ver original
  1.     a.nombre_entrenador AS entrenador,
  2.     COUNT(b.id_entrenador) AS total
  3. FROM trainer a
  4. LEFT JOIN pokemon b
  5. ON a.id_entrenador = b.fk_id_entrenador
  6. GROUP BY b.fk_id_entrenador
  7. HAVING COUNT(b.fk_id_entrenador ) < 6

En las dos últimas líneas es en donde está lo principal. Primero, se agrupan a los registros de la tabla "pokemon" por el valor del campo "fk_id_entrenador"; es decir, se reúne a los registros de la tabla "pokemon" asociados al mismo registro de la tabla "trainer". Finalmente, ya que la sentencia condicional WHERE no permite usar funciones de agrupación (como COUNT), opto por la cláusula HAVING que sí lo permite.

En este ejemplo, estoy asumiendo que la tabla "trainer" tiene un campo "id_entrenador" como llave primaria, que es el código único de cada registro de dicha tabla; además, en la tabla "pokemon" debe haber un campo como llave foránea que sea el que asocie a ambas tablas. De no ser así, tendrás que modificar tus tablas.

__________________
«Laissez faire et laissez passer, le monde va de lui même»
  #3 (permalink)  
Antiguo 31/01/2018, 05:20
 
Fecha de Ingreso: abril-2016
Mensajes: 18
Antigüedad: 2 años, 8 meses
Puntos: 1
Respuesta: Como hacer que en un select aparezcan datos según criterios

Muchas gracias, finalmente me funciono!!

Etiquetas: mysql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:12.