PHP - select multiple[] solo me guarda un solo valor seleccionado

 
Vista:
Imágen de perfil de Eduardo
Val: 165
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

select multiple[] solo me guarda un solo valor seleccionado

Publicado por Eduardo (174 intervenciones) el 19/04/2020 10:07:44
Hola tengo un formulario con un campo select múltiple el cual le puse las llaves [] en su name para así crear el array y luego acceder a el y almacenar todos los elementos que se seleccionen en mi Base de datos

el select es dinámico pues toma los valores de una tabla

1
2
3
4
5
6
7
8
9
<select name="municipio[]"  style="font-size:20px;" class="campos" required="required" multiple>
  <option value="">Seleccione:</option>
  <?php
          $query2 = $mysqli -> query ("SELECT * FROM municipios WHERE estado_municipio='activo' ORDER BY municipio_nom ASC");
          while ($valores1 = mysqli_fetch_array($query2)) {
            echo '<option value="'.$valores1[municipio_nom].'">'.$valores1[municipio_nom].'</option>';
          }
        ?>
</select>

luego recojo los datos en un foreach (así lo vi en un tutorial) pero al darle guardar SOLO ME GRABA UN ELEMENTO SELECCIONADO del select múltiple, que hago mal


1
2
3
4
5
6
foreach( $_POST['municipio'] as $munic) {
$munic2= ''.$munic.',';
}
if(isset($_POST["submit"])){
$consulta= "INSERT INTO $tabla VALUES ('$id','$placa','$fecha','$horaentrada','$pesoentrada','$horasalida','$pesosalida','$conductor','$munic2','$estado','$codigo','$otro')";
$resultado=mysql_query($consulta,$connectid);


en cambio si pongo la linea en el foreach un echo, esta me muestra los valores seleccionados sin problema...

1
2
foreach( $_POST['municipio'] as $munic) {
echo ''.$munic.',';

pero no se graban todos solo uno

por favor ayuda...
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 Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

select multiple[] solo me guarda un solo valor seleccionado

Publicado por Julio (830 intervenciones) el 19/04/2020 10:25:11
Hola.

Primero, antes del foreach deberías hacer:

1
$munic2 = '';

Pero el problema, sobre todo, es que cada vez que estás recorriendo los municipios, estás sobreescribiendo $munic2, fíjate. Es decir, con esto:

1
$munic2= ''.$munic.',';

Sobreescribes $munic2 en cada iteración del bucle. Debes encadenar lo que hay en $munic2 con un punto delante del igual:

1
$munic2.= ''.$munic.',';

Que es una contracción de esto (mejor utilizar lo anterior, que es más corto):

1
$munic2= $munic2.''.$munic.',';

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
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 Eduardo
Val: 165
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

select multiple[] solo me guarda un solo valor seleccionado

Publicado por Eduardo (174 intervenciones) el 19/04/2020 20:36:39
Hola muchas gracias por responder.. hize lo que me digiste pero aun no me resulta

1
2
3
4
5
6
7
$munic2 = '';
foreach( $_POST['municipio'] as $munic) {
$munic2= $munic2.''.$munic.',';
}
if(isset($_POST["submit"])){
$consulta= "INSERT INTO $tabla VALUES ('$id','$placa','$fecha','$horaentrada','$pesoentrada','$horasalida','$pesosalida','$conductor','$munic2','$estado','$codigo','$otro')";
$resultado=mysql_query($consulta,$connectid);

me guarda en la Base de datos solo el ultimo Municipio que escoja del select multiple seguido de una ,

pero nada aun no me guarda el array..
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 Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

select multiple[] solo me guarda un solo valor seleccionado

Publicado por Julio (830 intervenciones) el 19/04/2020 20:47:27
Comprueba qué hay en $_POST['municipio'] a ver qué está cogiendo.

1
var_dump($_POST['municipio']); die;

Ponlo antes del foreach, por ejemplo.

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
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 Eduardo
Val: 165
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

select multiple[] solo me guarda un solo valor seleccionado

Publicado por Eduardo (174 intervenciones) el 19/04/2020 20:53:06
puse tu linea
hago el select multiple (selecione 2 municipios)
envio y me sale asi...

1
array(2) { [0] => string(6) "Municipio1" [1] =>  string(13) "Municipio2" }
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 Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

select multiple[] solo me guarda un solo valor seleccionado

Publicado por Julio (830 intervenciones) el 19/04/2020 20:58:15
Bien, parece que sí coge ambos. Ahora prueba:

1
2
3
4
5
6
$munic2 = '';
foreach( $_POST['municipio'] as $munic) {
    var_dump($munic); echo '<br>';
    $munic2= $munic2.''.$munic.',';
}
var_dump($munic2);

----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
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 Eduardo
Val: 165
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

select multiple[] solo me guarda un solo valor seleccionado

Publicado por Eduardo (174 intervenciones) el 19/04/2020 20:56:40
1
2
3
4
5
6
7
8
$munic2 = '';
//var_dump($_POST['municipio']); die;
foreach( $_POST['municipio'] as $munic) {
$munic2= $munic2.''.$munic.',';
}
if(isset($_POST["submit"])){
$consulta= "INSERT INTO $tabla VALUES ('$id','$placa','$fecha','$horaentrada','$pesoentrada','$horasalida','$pesosalida','$conductor','$munic2','$estado','$codigo','$otro')";
$resultado=mysql_query($consulta,$connectid);

acabe de verificar y si Funcionó
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 Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

select multiple[] solo me guarda un solo valor seleccionado

Publicado por Julio (830 intervenciones) el 19/04/2020 20:58:58
Ah genial, ¿y por qué antes no? ¿No habías seleccionado varios municipios?

----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
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 Eduardo
Val: 165
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

select multiple[] solo me guarda un solo valor seleccionado

Publicado por Eduardo (174 intervenciones) el 19/04/2020 21:01:45
habia puesto asi

1
2
3
4
5
6
7
$munic2 = '';
	foreach( $_POST['municipio'] as $munic) {
$munic3= $munic2.''.$munic.',';
}
if(isset($_POST["submit"])){
$consulta= "INSERT INTO $tabla VALUES ('$id','$placa','$fecha','$horaentrada','$pesoentrada','$horasalida','$pesosalida','$conductor','$munic3','$estado','$codigo','$otro')";
$resultado=mysql_query($consulta,$connectid);


y no percate de tu codigo Mil Gracias

me guarda ahora los Municipios en la BS asi Municipio1,Municipio2,

Funciona Mil gracias!! que me recomendarías... (por ejemplo que ese ultimo no le ponga coma)

para el espaciado separe mas la comilla del codigo pero la , al final...

1
2
3
4
5
6
7
8
$munic2 = '';
//var_dump($_POST['municipio']); die;
	foreach( $_POST['municipio'] as $munic) {
$munic2= $munic2.''.$munic.', ';
}
if(isset($_POST["submit"])){
$consulta= "INSERT INTO $tabla VALUES ('$id','$placa','$fecha','$horaentrada','$pesoentrada','$horasalida','$pesosalida','$conductor','$munic2','$estado','$codigo','$otro')";
$resultado=mysql_query($consulta,$connectid);
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 Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

select multiple[] solo me guarda un solo valor seleccionado

Publicado por Julio (830 intervenciones) el 19/04/2020 21:08:04
Hombre, por recomendarte, no te recomendaría guardarlos así. Te recomendaría hacer una tabla intermedia en la base de datos en la que guardaras el $id ese que estás guardando y una fila por cada municipio. Es decir:

TABLA PRINCIPAL

- id
- placa
- fecha
- horaentrada
- ETC.

TABLA INTERMEDIA

- id de la tabla PRINCIPAL
- municipio

Así, por ejemplo, si la tabla principal tiene filas con ID 1, 2, 3 y 4, tendrías en la tabla intermedia algo así:

FILA 1
- 1
- Madrid

FILA 2
- 1
- Barcelona

FILA 3
- 1
- Sevilla

FILA 4
- 2
- Zaragoza

FILA 5
- 2
- Valencia

FILA 6
- 3
- Gijón

FILA 7
- 4
- Valladolid

FILA 8
- 4
- Bilbao

Y luego, para recuperar los municipios, buscas todas las filas que contengan el ID que te interesa. Así es como se suele estructurar normalmente ese tipo de datos en la base de datos.

Otra forma es utilizando arrays json, aunque yo personalmente prefiero la anterior.

----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
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