PHP - llenar combo con PHP

   
Vista:

llenar combo con PHP

Publicado por oiyr (15 intervenciones) el 04/09/2014 02:20:23
Hola, estoy empezando con PHP y me han pedido que haga una pagina que cargue el contenido de una base de datos en unos listboxes usando php.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?php
	$server     = 'localhost';
	$username   = 'root';
	$password   = '---------';
	$database   = '------';
	$connection = @new mysqli($server, $username, $password, $database);
 
	if ($connection->connect_error)
	{
		die('Error de conexión: ' . $connection->connect_error);
	}
 
	$sql="SELECT measures from model_cc";
	$result = mysql_query($sql);
 
	if ($result->num_rows > 0)
	{
		$combom="";
 
		while ($row = fetch_array($result))
		{
			$combom .="<option value=".$row['measures']."</option>";
		}
	}
 
	else
	{
		echo "No hubo resultados";
	}
	$connection->close();
?>
 
<html>
	<head>
		<title>CW PHP</title>
			<link href="style.css" rel="stylesheet" type="text/css" />
		</head>
	<body>
	   <select name="measures">
		   <?php echo $combom; ?>
	   </select>
	</body>
</html>

Me baje un ejemplo que funcionaba bien pero que seleccionaba todo el contenido de la tabla, al modificarlo para que me muestre solo el contenido de una columna no consigo salir de 'No hay resultados' y no me carga nada en el listbox, alguna idea de que he hecho mal? Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve

llenar combo con PHP

Publicado por xve (5518 intervenciones) el 04/09/2014 10:30:23
Hola, tal y como estas utilizando la base de datos, esto creo que no funciona:
1
if ($result->num_rows)
prueba así:
1
if (mysql_num_rows($result))

Coméntanos, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

llenar combo con PHP

Publicado por Gonzalo (338 intervenciones) el 04/09/2014 20:45:51
cuando usas mysqli lo correcto es usar $result->num_rows, el problema parece ser la tabla de la base de datos, ademas, esta raro ese codigo, como que combina mysql con mysqli, mi recomendacion es que revises el codigo y uses ya sea un metodo (mysql) o el otro (mysqli), te paso un ejemplo con mysqli en unos minutos..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

llenar combo con PHP

Publicado por xve (5518 intervenciones) el 04/09/2014 21:22:23
Si, exacto, pero tu estas utilizando mysql_query!!!

Ahi creo que tienes el problema... la conexión es con mysqli y la query no... utiliza mysqli_query
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

llenar combo con PHP

Publicado por Gonzalo (338 intervenciones) el 04/09/2014 20:54:22
aun si pudieras leer los resultados esta orden esta mal.

$combom .="<option value=".$row['measures']."</option>";

ya que quedaria como <option value="Record1"</option> eso no es correcto, lo correcto seria

<option value="Record1">Record1</option>


no tube tiempo de verificar el codigo pero asi deberia funcionar.

$SqlCommand="SELECT measures from model_cc"; //no lo vas a ordenar?

$Query=$connection->query($SqlCommand);

$combom="";

if($Query->num_rows>0)
{
while($row=$Query->fetch_array(MYSQL_ASSOC))
{
$combom .="<option value=".$row['measures'].">".$row['measures']."</option>";
}
}else
{
$combom="<option>No Hubo Resultados</option>";
}

no combines mysql con mysqli.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

llenar combo con PHP

Publicado por oiyr (15 intervenciones) el 04/09/2014 23:27:22
Gonzalo: he copiado tu codigo y me da error Fatal error: Call to a member function query() on a non-object in C:\xampp\htdocs\_CW\new_cw.php on line 10 donde se define $Query, alguna idea? Gracias.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php
$server     = '-';
$username   = '-';
$password   = '-';
$database   = '-';
 
$connection=mysql_connect($server, $username, $password, $database);
$SqlCommand="SELECT measures from model_cc";
$Query=$connection->query($SqlCommand);
$combom="";
 
	if($Query->num_rows>0){
		while($row=$Query->fetch_array(MYSQL_ASSOC)){
			$combom .="<option value=".$row['measures'].">".$row['measures']."</option>";
		}
	}
	else{
		$combom="<option>No hubo resultados</option>";
	}
	$connection->close();
?>
 
<html>
	<head>
		<title>CW PHP</title>
			<link href="contactos.css" rel="stylesheet" type="text/css" />
		</head>
	<body>
	   <select name="combom">
		   <?php echo $combom; ?>
	   </select>
	</body>
</html>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

llenar combo con PHP

Publicado por Gonzalo (338 intervenciones) el 05/09/2014 00:51:03
estas combinando MySql con MySqli (con i al final), son metodologias diferentes.

usa esa orden

$connection = @new mysqli($server, $username, $password, $database);

en lugar de

$connection=mysql_connect($server, $username, $password, $database);

usar una base de datos con MySql no es lo mismo que con MySqli (con i al final).

de hecho te recomiendo mas que uses mysqli.

salu2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

llenar combo con PHP

Publicado por oiyr (15 intervenciones) el 05/09/2014 01:45:53
Gracias, funciona perfecto! Una ultima duda, meti los valores en un campo ENUM y me devuelve que no hay resultados, cambiando el campo a texto si me lo carga correctamente, alguna forma de que te muestre los valores en ENUM? Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

llenar combo con PHP

Publicado por Gonzalo (338 intervenciones) el 05/09/2014 03:45:05
fetch_array(MYSQL_ASSOC) hace referencia a los campos por su nombre, fetch_array(MYSQL_ENUM) hace referencia a los campos por indice, para llamar un campo por enum debes hacerlo con numero i.e. $Rs[0], $Rs[1], este orden depende de como la consulta va a regresar la lista de campos, te recomiendo mejor usa ASSOC, solo cuida de escribir el nombre del campo exactamente como esta en la tabla respetando mayusculas y minusculas.
suerte
salu2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

llenar combo con PHP

Publicado por Gonzalo (338 intervenciones) el 05/09/2014 06:51:41
tal vez seria mejor que aprendieras a desarrollar tu programacion programacion orientada a objetos, te lo recomiendo, de hecho MySqli esta basado en POO, no es complicado, solo necesitas practica.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

llenar combo con PHP

Publicado por oiyr (15 intervenciones) el 05/09/2014 10:39:50
Ya se algo de POO, es la sintaxis de php que me da algunos problemas porque es un lenguaje nuevo para mi, gracias a todos por vuestras aportaciones.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

llenar combo con PHP

Publicado por oiyr (15 intervenciones) el 10/09/2014 00:02:27
Buenas, vuelvo a la carga otra vez, en vez de abrir nuevo hilo sigo con este para tenerlo todo mas ordenado. Al final me he decantado por meter los valores en un varchar, el problema es que cada campo tiene un numero diferente de registros y al hacer la consulta se me llenan los listbox de valores en blanco:

1
2
3
4
5
6
7
8
9
10
$SqlCommand="SELECT * from model_cc";
	$Query=$connection->query($SqlCommand);
 
         if($Query->num_rows>0){
		 while($row=$Query->fetch_array(MYSQL_ASSOC)){
			$combo_color .="<option value=".$row['color'].">".$row['color']."</option>";
			$combo_shelf .="<option value=".$row['shelf'].">".$row['shelf']."</option>";
			$combo_measures .="<option value=".$row['measures'].">".$row['measures']."</option>";
	         }
	}

Por ejemplo si color tiene 8 registros y shelf solo 2 se me llena el combo de shelf con 6 campos en blanco ademas de los valores normales, alguna forma de evitarlo? He probado con intentar meter el valor de $row en otra variable y hacer un strlen pero me salta un error 'strlen() expects parameter 1 to be string array', tambien he probado con un if($row==NULL) pero me sigue llenando los listboxes de valores en blanco. He pensado que la razon era por meterlo todo en la misma consulta, pero haciendolas por separado y seleccionando los campos de forma individual


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
$SqlCommand="SELECT shelf from model_cc";
	$Query=$connection->query($SqlCommand);
 
	if($Query->num_rows>0){
		while($row=$Query->fetch_array(MYSQL_ASSOC)){
			$combo_shelf .="<option value=".$row['shelf'].">".$row['shelf']."</option>";
		}
	}
 
	$SqlCommand="SELECT color from model_cc";
	$Query=$connection->query($SqlCommand);
 
	if($Query->num_rows>0){
		while($row=$Query->fetch_array(MYSQL_ASSOC)){
			$combo_color .="<option value=".$row['color'].">".$row['color']."</option>";
		}
	}
 
	$SqlCommand="SELECT measures from model_cc";
	$Query=$connection->query($SqlCommand);
 
	if($Query->num_rows>0){
		while($row=$Query->fetch_array(MYSQL_ASSOC)){
			$combo_measures .="<option value=".$row['measures'].">".$row['measures']."</option>";
		}
	}

Me sigue haciendo lo mismo, alguna idea? Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar