Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] varios combobox desde mysql

Estas en el tema de varios combobox desde mysql en el foro de PHP en Foros del Web. Buenas tardes, Ante todo comentar que soy nuevo no, lo siguiente con php ya que para este tipo de proyectos suelo utilizar servlets pero en ...
  #1 (permalink)  
Antiguo 19/05/2016, 10:36
 
Fecha de Ingreso: junio-2011
Mensajes: 151
Antigüedad: 12 años, 10 meses
Puntos: 2
varios combobox desde mysql

Buenas tardes,

Ante todo comentar que soy nuevo no, lo siguiente con php ya que para este tipo de proyectos suelo utilizar servlets pero en vistas de futuro voy a hacerlo en php.
Tengo una base de datos con las tablas de inmobiliaria, pueblo, zona y comarca.
He realizado esto:
Código PHP:
<?php
$server     
'localhost'//servidor
$username   'root'//usuario de la base de datos
$password   ''//password del usuario de la base de datos
$database   'plugin_dome'//nombre de la base de datos
 
$conexion = @new mysqli($server$username$password$database);
 
if (
$conexion->connect_error//verificamos si hubo un error al conectar, recuerden que pusimos el @ para evitarlo
{
    die(
'Error de conexión: ' $conexion->connect_error); //si hay un error termina la aplicación y mostramos el error
}
 
$sql1="SELECT * from inmobiliaria";
$sql2="SELECT * from pueblo";
$sql3="SELECT * from comarca";
$sql4="SELECT * from zona";

$result1 $conexion->query($sql1); //usamos la conexion para dar un resultado a la variable
$result2 $conexion->query($sql2);
$result3 $conexion->query($sql3);
$result4 $conexion->query($sql4);
 
if (
$result1->num_rows 0//si la variable tiene al menos 1 fila entonces seguimos con el codigo
{
    
$combobit1="";
    
$combobit2="";
    
$combobit3="";
    
$combobit4="";
    
    while (
$row $result1->fetch_array(MYSQLI_ASSOC)) 
    {
        
$combobit1 .=" <option value='".$row['idinmobiliaria']."'>".$row['nombreInmobiliaria']."</option>"//concatenamos el los options para luego ser insertado en el HTML
    
}
    
    while (
$row $result2->fetch_array(MYSQLI_ASSOC))
    {
        
$combobit2 .=" <option value='".$row['idpueblo']."'>".$row['nombrePueblo']."</option>"//concatenamos el los options para luego ser insertado en el HTML
    
}
    
    while (
$row $result3->fetch_array(MYSQLI_ASSOC))
    {
        
$combobit3 .=" <option value='".$row['idcomarca']."'>".$row['nombreComarca']."</option>"//concatenamos el los options para luego ser insertado en el HTML
    
}
    
    while (
$row $result4->fetch_array(MYSQLI_ASSOC))
    {
        
$combobit4 .=" <option value='".$row['idzona']."'>".$row['nombreZona']."</option>"//concatenamos el los options para luego ser insertado en el HTML
    
}
}
else
{
    echo 
"No hubo resultados";
}
$conexion->close(); //cerramos la conexión
?>

<html>
<head>
<title>INMOBILIARIA</title>
<link href="contactos.css" rel="stylesheet" type="text/css" />
</head>
<body>
   <select name="estado">
       <?php echo $combobit1?>
   </select>
   &nbsp
   <select name="estado">
       <?php echo $combobit2?>
   </select>
   &nbsp
   <select name="estado">
       <?php echo $combobit3?>
   </select>
   &nbsp
   <select name="estado">
       <?php echo $combobit4?>
   </select>
</body>
</html>
si yo hiciese esto con servlets cada select lo tendría en una clase diferente para estar todo más ordenado y luego en el jsp cargaría esa clase y llamaría a la función y ya, y me queda un código corto.
Aquí no sé si hay otra manera de hacer esto o se puede hacer algo como lo que comento.

Espero haberme explicado más o menos bien

Un saludo
  #2 (permalink)  
Antiguo 20/05/2016, 02:06
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: varios combobox desde mysql

Recuerda que php también permite la POO, bien puedes crear una clase con sus diferentes métodos, incluir la clase con un include en tu plantilla instanciarla y llamar a sus métodos como hacías antes.

Echale un ojo al manual: clases y objetos
__________________
Unset($vida['malRollo']);
  #3 (permalink)  
Antiguo 23/05/2016, 04:14
 
Fecha de Ingreso: junio-2011
Mensajes: 151
Antigüedad: 12 años, 10 meses
Puntos: 2
Respuesta: varios combobox desde mysql

Buenas de nuevo,
no sabía que se podían utilizar clases en php también. He estado leyendo y cogiendo información de diferentes sitios y he hecho esto:

ClaseComarca.php
Código PHP:
<?php
class comarca{
    private 
$idComarca;
    private 
$nombreComarca;
    private 
$idZona;
    
    private 
$conexion;
    
    
//CONSTRUCTOR
    
public function modelo_comarca() {
        
$this->conexion = new mysqli("localhost""root""""plugin_dome");
         
        if (
mysqli_connect_errno()) {
            echo 
"Error al establecer la conexión con la base de datos: " mysqli_connect_error();
            exit();
        }
    }
    
    
//GETERS AND SETTERS
    
public function getIdComarca() {
        return 
$this->idComarca;
    }
    public function 
setIdComarca($idComarca) {
        
$this->idComarca $idComarca;
        return 
$this;
    }
    public function 
getNombreComarca() {
        return 
$this->nombreComarca;
    }
    public function 
setNombreComarca($nombreComarca) {
        
$this->nombreComarca $nombreComarca;
        return 
$this;
    }
    public function 
getIdZona() {
        return 
$this->idZona;
    }
    public function 
setIdZona($idZona) {
        
$this->idZona $idZona;
        return 
$this;
    }
    public function 
getConexion() {
        return 
$this->conexion;
    }
    public function 
setConexion($conexion) {
        
$this->conexion $conexion;
        return 
$this;
    }
    
    
//FUNCIONES
    
public function listar_comarca(){
        
$consulta="SELECT * from comarca";
        
$resultado=mysqli_query($this->conexion$consulta);
    
        return 
$resultado;
    }
}
Por no poner todo y que quede algo grande, no voy a poner las otras 3 clases, pero de momento sería lo mismo, pero con pubelo, zona e inmobiliaria.

Luego con el tema de mvc, he creado otra clase que se llama
vista.php
Código PHP:
<?php

class Vista{
    
//Creamos los diferentes combobox
    
public function selectInmobiliaria($resultados) {
        echo 
"<form method='post' action=''>";
        
        
//Falta hacer un FOR para que coja todos los valores, porque así solo va  sacar un valor 
        
echo "<select name='seleccionarInmobiliaria' size='1'>"
                
."<option value='1'>inmobiliaaria1</option>"
              
."</select>";
    }
    
    public function 
selectComarca($resultados) {
        echo 
"<form method='post' action=''>";
    
        echo 
"<select name='seleccionarComarca' size='1'>"
                
."<option value='1'>comarca1</option>"
              
."</select>";
    }
    
    public function 
selectPueblo($resultados) {
        echo 
"<form method='post' action=''>";
    
        echo 
"<select name='seleccionarPueblo' size='1'>"
                
."<option value='1'>pueblo1</option>"
              
."</select>";
    }
    
    public function 
selectZona($resultados) {
        echo 
"<form method='post' action=''>";
    
        echo 
"<select name='seleccionarZona' size='1'>"
                
."<option value='1'>zona1</option>"
              
."</select>";
    }
}

?>
De momento, para ver que va funcionando, he metido las opciones del select a mano en vez de que coja las opciones desde la base de datos porque tengo que hacer un for que de momento no sé cómo hacerlo.

Finalmente tengo el controlador
controlador.php
Código PHP:
<html>
    <head>
        <meta charset="utf-8" />
        <meta http-equiv="x-ua-compatible" content="ie=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />

        <title></title>
        <link rel="stylesheet" href="css/*.css" />
        <title></title>
    </head>
    <body>

<?php

include_once 'Vista.php';
include_once 
'ClaseComarca.php';
include_once 
'ClaseInmobiliaria.php';
include_once 
'ClasePueblo.php';
include_once 
'ClaseZona.php';

session_start();

$vista=new Vista();

$inmobiliaria=new inmobiliaria();
$pueblo=new pueblo();
$comarca=new comarca();
$zona=new zona();

$vista->selectInmobiliaria($inmobiliaria->listar_inmobiliaria());
$vista->selectPueblo($pueblo->listar_pueblo());
$vista->selectComarca($comarca->listar_comarca());
$vista->selectZona($zona->listar_zona());

?>

    </body>
</html>
El problema es que al ejecutar me sale esto:
Código HTML:
Warning: mysqli_query() expects parameter 1 to be mysqli, null given in C:\xampp\htdocs\PruebaPHP\ClaseComarca.php on line 52
[I][B]Aquí sale bien el combobox[/B][/I]
Ese mismo mensaje con las 4 clases
  #4 (permalink)  
Antiguo 23/05/2016, 09:05
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: varios combobox desde mysql

Si no me equivoco tu problema viene de lo que tu llamas constructor, tal como lo defines no es un constructor válido en php, simplemente una función más y tampoco veo que hagas ninguna llamada a el y como ahí es donde inicializas la conexión al no hacerlo el atributo conexion esta vacío o equivale a null que es el error que te da.

Constructor php
__________________
Unset($vida['malRollo']);
  #5 (permalink)  
Antiguo 24/05/2016, 01:26
 
Fecha de Ingreso: junio-2011
Mensajes: 151
Antigüedad: 12 años, 10 meses
Puntos: 2
Respuesta: varios combobox desde mysql

Cita:
Iniciado por xerifandtomas Ver Mensaje
Si no me equivoco tu problema viene de lo que tu llamas constructor, tal como lo defines no es un constructor válido en php, simplemente una función más y tampoco veo que hagas ninguna llamada a el y como ahí es donde inicializas la conexión al no hacerlo el atributo conexion esta vacío o equivale a null que es el error que te da.

Constructor php
Es verdad, no había caído en eso. Como estuve cambiando nombres de las clases y así, no me había fijado que el constructor y la clase se llaman de diferente forma.
Ahora ya si hago esto en la clase inmobiliaria:
Código PHP:
class modelo_inmobiliaria{
    private 
$idInmobiliaria;
    private 
$nombreInmobiliaria;
    private 
$idPueblo;
    
    private 
$conexion;
    
    
//CONSTRUCTOR
    
function modelo_inmobiliaria() {
        
$this->conexion = new mysqli("localhost""root""""plugin_dome");
            
        if (
mysqli_connect_errno()) {
            echo 
"Error al establecer la conexión con la base de datos: " mysqli_connect_error();
            exit();
        }
    } 
Con hacer el new solamente en el constructor ya me carga todo OK.

Bufffff muchas gracias. Creo que tendré alguna pregunta más para hacer de este mismo proyecto pero en principio la duda principal ya está terminada por lo que doy el tema por solucionado

Muchas gracias de nuevo
  #6 (permalink)  
Antiguo 24/05/2016, 03:45
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: varios combobox desde mysql

Es mejor que utilices la palabra reservada __construct en lugar del nombre de la clase, ya que esta previsto que en futuras versiones de php ese método se elimine.

En el manual te advierte con esta nota
Cita:
Advertencia
Los constructores del estilo antiguo están OBSOLETOS en PHP 7.0, por lo que serán eliminados en una futura versión. Se debería utilizar siempre __construct() en código nuevo.
Un ejemplo del manual de uso de __construct
Código PHP:
Ver original
  1. class BaseClass {
  2.    function __construct() {
  3.        print "En el constructor BaseClass\n";
  4.    }
  5. }
__________________
Unset($vida['malRollo']);

Etiquetas: combobox, html, mysql, select, sql, tabla, variable
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 00:39.