0

Resumen

Necesito mandar datos por medio de un checkbox(Seleccion multiple) a mi base de datos Msql.

HTML

<input type="checkbox" name="arreglo[]"   value="3"/>3
<input type="checkbox" name="arreglo[]"   value="2"/>2
<input type="checkbox" name="arreglo[]"   value="1"/>1

PHP

$arreglo= $_POST['arreglo'];

foreach ($arreglo as $llave => $valor) {
$ficha2="INSERT INTO usuario (nombres, apellidos,email,medioComunicacion,
tipoOrganizacion, cargo, tipoInfo, interes,
 formPreferido) VALUES ('NOMBRE','APPELLIDO','EMAIL','MEDIOCOMUNI','$valor','cargo','tipoInfo','interes','formPreferido')";

$result= mysqli_query($conexion,$ficha2);

PROBLEMA

cuando ejecuto el codigo, no tengo errores, pero en la base de datos se registran registros no deseados,es decir; en el checkbox se selecciono 2 opciones, lo que quiero es que en la base de datos se Registre

|Otras Columnas ||Arreglo|

|otros registros || 1,2 |

Pero en realidad se registro

|Otras Columnas ||Arreglo|

|otros registros || 1 |

|otros registros || 2 |

Como puedo solucionar mi problema ?

2 Answers2

1

Si en $_POST['arreglo'] hay un array y quieres esos valores separados por coma, puedes lograrlo de una forma muy simple usando implode() el cual:

Une elementos de un array en un string

Código de ejemplo

if (is_array($_POST['arreglo'])) {
    $valor=implode(",",$_POST['arreglo']); # Con una sola línea, resuelto ...
    $ficha2="INSERT INTO usuario (nombres, apellidos,email,medioComunicacion,
tipoOrganizacion, cargo, tipoInfo, interes,
 formPreferido) VALUES ('NOMBRE','APPELLIDO','EMAIL','MEDIOCOMUNI','$valor','cargo','tipoInfo','interes','formPreferido')";
    $result= mysqli_query($conexion,$ficha2);
}

Advertencia sobre la seguridad

Tu código es altamente vulnerable a ataques de inyección SQL, mediante la cual un usuario mal intencionado podría tomar el control de tu servidor, modificar, eliminar o alterar datos en la base de datos, obtener accesos bloqueados, etc, es decir, causar verdaderos estragos en tu entorno. Considera corregir ese agujero de seguridad usando consultas preparadas.

A. Cedano
  • 86,578
  • 19
  • 122
  • 221
0

SOLUCION

la solucion es bastante sencilla, solo toca crear una variable que me genere la union del arreglo.

y eso se hace asi:


if (is_array($_POST['arreglo'])) {
    $selected = '';
    $num_pat = count($_POST['arreglo']);
    $current = 0;
    foreach ($_POST['arreglo'] as $key => $value) {
        if ($current != $num_pat-1)
            $selected .= $value.', ';
        else
            $selected .= $value.'';

        $current++;

    }
}

else{
    $selected = '';

}

ese selected lo ponemos en la Query ya.

  • 2
    No hace falta toooodo eso. Si en `$_POST['arreglo']` hay un array y quieres esos valores separados por coma, puedes lograrlo de una forma muy simple usando **[`implode()`](https://www.php.net/manual/es/function.implode.php)**. Por ejemplo: **`$selected=implode(",",$_POST['arreglo']);`** ¿Y ya? Sí, y ya, con una sola línea, problema resuelto. – A. Cedano Mar 03 '22 at 22:46