Return checkbox checked PHP

1

I have this code:

<?php
    $pdo = db_connect();
    $sql = "SELECT * FROM cor_fundo";
    $query = $pdo->prepare($sql);
    $query->execute();
    $option = "";
    $result = $query->fetchAll(PDO::FETCH_ASSOC);
        foreach ($result as $row) {
          $id = $row['cor_fundo_id'];
          $nome = $row['cor_fundo_nome'];
          $option.='<label class="checkbox-inline"><input type="checkbox" name="cor_fundo[]" value="'.$id.'">'.$nome.'</label>';
        }
    echo $option;
?>

It lists the checkbox's of the database, but needs to return it checked as the client selected.

Obs. It is stored in array in the database.

Example: 3,4,5

    
asked by anonymous 13.07.2017 / 21:11

3 answers

0

If checked checkboxes are in a column in the bank you will have to use the explode.

  

Example

<?php
    $pdo = db_connect();
    $sql = "SELECT * FROM cor_fundo";
    $query = $pdo->prepare($sql);
    $query->execute();
    $option = "";

    //aqui vc recupera do db o que ele selecionou... (exemplo)
    $usu = $pdo->prepare('SELECT cores_fundo FROM usuario WHERE id=:id_usuario');
    $usu->execute([':id_usuario' => $_SESSION['id_usuario']);
    $usuCor = $usu->fetch();
    $usuCor = explode(",", $usuCor);

    $result = $query->fetchAll(PDO::FETCH_ASSOC);
        foreach ($result as $row) {
          $id = $row['cor_fundo_id'];
          $nome = $row['cor_fundo_nome'];

          //Verificando se esse ID tá marcado pelo usuario
          $marcado = '';
          if(in_array($id, $usuCor))
                $marcado = 'checked';    

          $option.='<label class="checkbox-inline"><input type="checkbox" name="cor_fundo[]" value="'.$id.'" '.$marcado.'>'.$nome.'</label>';
        }
    echo $option;
?>
  

NOTE: The selects in the user table are to retrieve the saved colors, I did as an example because I did not have this information in the question. But it's only fitting that it will work.

    
15.07.2017 / 13:56
0

My code looks like this, but it is not checking correctly. You are checking the last 2 only, being q has 4 colors

<?php
    $sql = "SELECT * FROM cor_fundo";
    $query = $pdo->prepare($sql);
    $query->execute();
    $result = $query->fetchAll(PDO::FETCH_ASSOC);

        //quantidade de cores na tabela cor_fundo
        $quant = count($result);

        //declaração das variáveis
        for ($k = 0; $k <= $quant; $k++) {
            $item = "z".$k;
            $$item = "";
        }
        $option = "";                                                   

        //consulta das cores/produto selecionado                                                    
        $sql = ("SELECT produto_cor_fundo FROM produto WHERE produto_id = '".$cod."'");          
        $query = $pdo->prepare($sql);
        $query->execute();   
        $result2 = $query->fetchAll(PDO::FETCH_ASSOC);

        foreach ($result2 as $row) {
            $produto_cor_fundo = $row['produto_cor_fundo'];                                                     
        }
        $cores = explode(",", $produto_cor_fundo);
        $contad = count($cores);

       //criação das variaveis dinamicas com o atributo checked para os checkbox do produto
        for ($k = 0; $k < $contad; $k++) {
            $item = "z".$cores[$k];
            $$item = " checked";
        }

        $i=1;
        foreach ($result as $row) {
            $id = $row['cor_fundo_id'];
            $nome = $row['cor_fundo_nome'];
            if (isset($produto_cor_fundo)) {
                $item = "z".$i;
                $option.='<label class="checkbox-inline"><input type="checkbox" name="cor_fundo[]" value="'.$id.'" '.$$item.'>'.$nome.'</label>';
            } else {
                $option.='<label class="checkbox-inline"><input type="checkbox" name="cor_fundo[]" value="'.$id.'">'.$nome.'</label>';
            }
        $i=$i+1;
        }

        echo $option;
        ?>
    
18.07.2017 / 04:15
0

The example tables

Table cor_fundo

Tableproduto

Thecodeiscommentedout.

$pdo=db_connect();$sql="SELECT * FROM cor_fundo";
$query = $pdo->prepare($sql);
$query->execute();
$result = $query->fetchAll(PDO::FETCH_ASSOC);

//quantidade de cores na tabela cor_fundo
$quant = count($result);

//declaração das variáveis
for ($k = 0; $k <= $quant; $k++) {
    $item = "z".$k;
    $$item = "";
}
$option = "";
$id="";
$produto_cor_fundo="";
$produto_cor_fundo_novo="";
$userSelecionado="";
$userID="";
$usuarioSel="";
$selec="";

// verificação da possibilidade de update
if ((isset($_POST["cor_fundo"]))&&($_POST["userID"]==$_POST["userID_Old"])) {
    //array das cores selecionadas
    $optionArray = $_POST["cor_fundo"];

    for ($i = 0; $i < count($optionArray); $i++) {
       $produto_cor_fundo_novo=$produto_cor_fundo_novo.$optionArray[$i].",";
    }

    $produto_cor_fundo_novo = substr($produto_cor_fundo_novo,0,-1);

    //condição para que haja update
    if ($produto_cor_fundo_novo!=$_POST["produto_cor_fundoOld"]){
        $id=$_POST["userID"];
        $sql = "UPDATE produto SET produto_cor_fundo='$produto_cor_fundo_novo' WHERE id='$id'";
        $query = $pdo->prepare($sql);
        $query->execute();
    }
}

//consulta das cores/usuario selecionado
if (isset($_POST["userID"])) {
    $id=$_POST["userID"];
    $sql = ("SELECT produto_cor_fundo,usuario FROM produto WHERE id = '".$id."'");          

    $query = $pdo->prepare($sql);
    $query->execute();   
    $result2 = $query->fetchAll(PDO::FETCH_ASSOC);

    foreach ($result2 as $row) {
        $produto_cor_fundo = $row['produto_cor_fundo'];
        $usuarioSel = $row['usuario'];
    }

    $cores = explode(",", $produto_cor_fundo);
    $contad = count($cores);
    $userSelecionado = "Usuario selecionado: ".$usuarioSel;

    //criação das variaveis dinamicas com o atributo checked para os checkbox do usuario
    for ($k = 0; $k < $contad; $k++) {
        $item = "z".$cores[$k];
        $$item = " checked";
    }
}               

$i=1;
foreach ($result as $row) {
    $id = $row['cor_fundo_id'];
    $nome = $row['cor_fundo_nome'];
    if (isset($usuarioSel)) {
        $item = "z".$i;
        $option.='<label class="checkbox-inline"><input type="checkbox" name="cor_fundo[]" value="'.$id.'" '.$$item.'>'.$nome.'</label>';
    }else{
        $option.='<label class="checkbox-inline"><input type="checkbox" name="cor_fundo[]" value="'.$id.'">'.$nome.'</label>';
    }
 $i=$i+1;
 }

//construção do select
$sql = ("SELECT id,usuario FROM produto");
$query = $pdo->prepare($sql);
$query->execute();   
$result3 = $query->fetchAll(PDO::FETCH_ASSOC);

foreach ($result3 as $row) {
    $id = $row['id'];
    $usuario = $row['usuario'];

    if ($usuarioSel==$usuario){
        $selec.="<option value=\"".$id."\" selected>".$usuario."</option>";
    }else{
            $selec.="<option value=\"".$id."\">".$usuario."</option>";
    }
}

echo $userSelecionado;
echo '<br>'; 
echo '<form method="post" action="">'; 
if (isset($_POST["userID"])){
    echo '<input type="hidden" name="userID_Old" value="'.$_POST["userID"].'">'; 
    echo '<input type="hidden" name="produto_cor_fundoOld" value="'.$produto_cor_fundo.'">';
} 
echo "\n"; 
echo $option;
echo "\n";
echo '<br>';
echo '<select name="userID" size="4">';
echo $selec;
echo '</select>';
echo "\n";
echo '<br><button type="submit">Enviar</button>';
echo "\n";
echo '</form>'; 
  

This solution is based on creating dynamic variables also known as variable variables or variables created during execution in PHP. In the for ($k = 0; $k < $contad; $k++) { loop through the $item variables we create the $$item dynamic variables for each substring contained in the $cores array, which will serve to print the checked attribute on the selected options.

    
14.07.2017 / 13:58