PHP - Error al cargar un SELECT con información de una base de datos

 
Vista:
sin imagen de perfil
Val: 396
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Error al cargar un SELECT con información de una base de datos

Publicado por Robokick (156 intervenciones) el 25/12/2022 01:46:53
Hola Amigos, necesito de su ayuda por favor
tengo una tabla paises con unicamente 3 paises y lo que quiero es que en un elemento select de HTML cargue de forma dinámica los paises conforme los voy agregando, este es mi select de MYSQL

//Cargando los paises
$paises = $conexion->query("select * from paises");
$paises = $paises->fetchAll();

si ejecuto un print_r($paises) me muestra en pantalla los paises de la tabla paises

lo que hago es en el codigo HTML agregar codigo PHP porque uso codigo puro y he realizado dos tipos de codificacion

PRIMERA

<select name="pais" class="pais">
<?php foreach($paises as $country): ?>
<option value="<?php echo $country['valor']; ?>" ><?php echo $country['pais']; ?></option>
<?php endforeach; ?>

</select>



SEGUNDA

<select name="pais" class="pais">
<?php if(is_array($paises) || is_object($paises)): ?>
<?php foreach($paises as $country): ?>
<option value="<?php echo $country['valor']; ?>" ><?php echo $country['pais']; ?></option>

<?php endforeach; ?>
<?php endif; ?>

</select>

el mensaje que obtengo es el siguiente:
<b>Warning</b>: foreach() argument must be of type array|object, string given in <b>C:\xampp\htdocs\php\sitioWeb\vistas\registrate.vista.php</b> on line <b>37</b><br />

la linea 37 hace referencia al foreach pero solo cuando uso la PRIMERA si uso la SEGUNDA forma no obtengo mensaje de error pero tampoco carga los paises

espero me puedan ayudar por favor porque he estado averiguando y no obtengo solución
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 Ivan

Error al cargar un SELECT con información de una base de datos

Publicado por Ivan (118 intervenciones) el 25/12/2022 11:57:18
Hola,

Creo que la forma correcta de acceder al array sería:

1
2
3
foreach($paises as $key => $value) {
$key[$value]
}

Si no lo solucionas, sería bueno que pusieras el print_r($paises) para ver los datos que devuelve la consulta.

Un saludo!
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
sin imagen de perfil
Val: 396
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Error al cargar un SELECT con información de una base de datos

Publicado por Robokick (156 intervenciones) el 25/12/2022 14:40:49
Hola Ivan, aqui pongo lo que me devuelve el print_r($paises)

Array
(
[0] => Array
(
[id] => 1
[0] => 1
[valor] => peru
[1] => peru
[pais] => Perú
[2] => Perú
)

[1] => Array
(
[id] => 2
[0] => 2
[valor] => mexico
[1] => mexico
[pais] => México
[2] => México
)

[2] => Array
(
[id] => 3
[0] => 3
[valor] => colombia
[1] => colombia
[pais] => Colombia
[2] => Colombia
)

)

id, valor, pais son los campos de mi tabla paises aun persiste el problema espero me puedas ayudar 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

Error al cargar un SELECT con información de una base de datos

Publicado por Yamil Bracho (22 intervenciones) el 25/12/2022 16:03:40
El cierre del foreache s el que creo esta mal deberia ser

foreach( $paises as $country ){
//print_r($pais);
echo $country['valor'];
echo $country['pais'];
}
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
sin imagen de perfil
Val: 396
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Error al cargar un SELECT con información de una base de datos

Publicado por Robokick (156 intervenciones) el 25/12/2022 16:28:29
Amigo yamil,

el ciclo foreach debo pasarlo dentro del SELECT en HTML

<select name="pais" class="pais">
<?php foreach($paises as $country): ?>
<option value="<?php echo $country['valor']; ?>" ><?php echo $country['pais']; ?></option>
<?php endforeach; ?>

</select>

yo puedo mostrar otros registros digamos dentro de un parrafo pero en el elemento SELECT es el problema y uso la versión 8 de PHP
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

Error al cargar un SELECT con información de una base de datos

Publicado por Yamil Bracho (22 intervenciones) el 25/12/2022 19:35:05
Si entendi lo que quieres hacer. Puedes hacer algo como

<?php
foreach($paises as $country) {
echo "<option value='{$country['valor']'>{$country['pais']}></option>"
}
?>
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 Ivan

Error al cargar un SELECT con información de una base de datos

Publicado por Ivan (118 intervenciones) el 26/12/2022 11:55:56
Hola,

viendo la salida y transformándolo en un Array para probar en mi PC este código funciona:

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
<?php
$paises = [
  [
  'id' => 1,
  '0' => 1,
  'valor' => 'peru',
  '1' => 'peru',
  'pais' => 'Perú',
  '2' => 'Perú',
  ],
 
  [
  'id' => 2,
  '0' => 2,
  'valor' => 'mexico',
  '1' => 'mexico',
  'pais' => 'México',
  '2' => 'México',
  ],
 
  [
  'id' => 3,
  '0' => 3,
  'valor' => 'colombia',
  '1' => 'colombia',
  'pais' => 'Colombia',
  '2' => 'Colombia',
  ]
];
?>
<select name="pais" class="pais">
<?php foreach($paises as $country) { ?>
  <option value="<?php echo $country['valor']?>"><?php echo $country['pais']?></option>
<?php } ?>
</select>

Un saludo!
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
sin imagen de perfil
Val: 396
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Error al cargar un SELECT con información de una base de datos

Publicado por Robokick (156 intervenciones) el 26/12/2022 15:35:57
Iván pero los países debo de cargarlos desde la base de datos conforme vaya agregando más paises
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 Ivan

Error al cargar un SELECT con información de una base de datos

Publicado por Ivan (118 intervenciones) el 26/12/2022 23:29:32
Hola,

exacto!

La respuesta de la DB la puedes obtener o mediante un objeto de datos o mediante un array de datos.
El print_r($paises) que has puesto corresponde a un Array de datos que es el que he utilizado para hacer el ejemplo. En teoría el bucle te debería funcionar con la respuesta que obtienes en tu variable $paises.

El problema es que veo que usas PDO y mirando su documentación devuelve los datos de forma diferente si haces query a si haces execute.

En tu caso haces query y el bucle para obtener los datos sería algo así:

1
2
3
4
5
6
7
    
$sql = 'SELECT name, color, calories FROM fruit ORDER BY name';
foreach ($conn->query($sql) as $row) {
  print $row['name'] . "\t";
  print $row['color'] . "\t";
  print $row['calories'] . "\n";
}

Tal i como especifican en la documentación oficial https://www.php.net/manual/es/pdo.query.php

Espero que te sirva.

Un saludo!
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