Jump to content
Fábio Peixeiro

Como verificar quais as checkbox que estão selecionadas

Recommended Posts

Fábio Peixeiro

Bom dia, pretendo construir um painel onde o administrador consegue dar permissões a outros tipos de utilizadores.

O painel é o seguinte:

9ap6j1F1Q0KYujRnP8KalQ.png

Tenho um botao que é o Guardar que quando pressionado recebe o array das checkbox, o meu problema é que so consigo verificar quais as que estão selecionadas e nao as que nao estao selecionadas.

O código é o seguinte:

-Como mostro a tabela:

Spoiler

<form id="pForm" class="form-horizontal form-label-left" action="tipo_utilizadores_permissoes/js/ins_permissao.php">
                <div style=" overflow: auto">
                    <table class="table border="0">
                        <thead>
                        <th>Permissao</th>
                        <th width="10px">Estado</th>
                        </thead>
                        <?php
                            require ("C:/xampp/htdocs/connect.php");
                            $tp_uti = $_REQUEST['tp'];
                            $query = "SELECT permissao, estado FROM permissoes, tipo_utilizadores_permissoes WHERE tipo_utilizadores_permissoes.cd_perm = permissoes.cd_perm AND tipo_utilizadores_permissoes.cd_tp_uti = $tp_uti ORDER BY permissoes.cd_perm";
                            $result = mysqli_query($connect, $query);
                            while($row = mysqli_fetch_array($result)){
                            echo '
                            <tr>
                                <td>
                                    <div class="checkbox">
                                        <label>';
                                echo $row["permissao"];
                                echo '</label>
                                    </div>
                                </td>
                                <td>
                                    <div class="checkbox">
                                        <label>
                                            <input type="checkbox" name="perm[]" id="perm" class="flat"';
                                if($row["estado"] == 1){
                                    echo ' checked="checked"';
                                }
                            echo '>
                                        </label>
                                    </div>
                                </td>
                            </tr>';
                            }
                        ?>
                    </table>
                </div>
                <div class="ln_solid"></div>
                <div class="form-group">
                    <div class="col-md-12 col-sm-12 col-xs-12" style="text-align: center">
                        <button id="bSubmit" type="submit" class="btn btn-success">Guardar</button>
                    </div>
                </div>
                </form>

 

-Como recebo os valores:

Spoiler

<?php
$p = $_GET["perm"];
$t = 0;
    foreach($p as $c ) {
        $t++;
            echo $t,' - Sim<br>';
    }

 

O que eu introduzo é isto:

BHR6n_k2T0eMQaPMSOuu3w.png

E recebo isto:

rIAseR6cQ1_l1GlVdwz-mw.png

O que eu pretendia era receber:

1 - Sim

2 - Não

3 - Sim

 

Algumas sugestões?

Share this post


Link to post
Share on other sites
Virneto

Viva,

$p = $_GET["perm"];
$t = 0;
    foreach($p as $c ) {
        $t++;
            echo $c,' - Sim<br>';
    }

Se imprimes o $t estás a imprimir o contador. Por isso recebes 1- Sim; 2- Sim;

Depois de estares a receber isto:

1- Sim

3- Sim

 

Não é igual a isto?

3 minutos atrás, Fábio Peixeiro disse:

O que eu pretendia era receber:

1 - Sim

2 - Não

3 - Sim

 

Se não recebeste o 2 é porque está unchecked, logo 2- não.

 

Have fun! :thumbsup:


"Que inquieto desejo vos tortura, Seres elementares, força obscura? Em volta de que ideia gravitais?" >> Anthero de Quental

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Linuxando.com | ...

Share this post


Link to post
Share on other sites
Fábio Peixeiro
2 minutos atrás, Virneto disse:

 


$p = $_GET["perm"];
$t = 0;
    foreach($p as $c ) {
        $t++;
            echo $c,' - Sim<br>';
    }

Se imprimes o $t estás a imprimir o contador. Por isso recebes 1- Sim; 2- Sim;

Obrigado pela resposta, fiz o que sugeriste e recebo o seguinte:

9J0Kkw9lQYWAlnUDCpvP2g.png

Assim o que recebo é "on" o que pretendia era o numero (id) da permissao que pretendia alterar.

Share this post


Link to post
Share on other sites
Virneto

Os dados das checkboxes estão a passar corretamente.

Vê lá a tua query...

O que estás a colocar em perm[] não é o id.

 


"Que inquieto desejo vos tortura, Seres elementares, força obscura? Em volta de que ideia gravitais?" >> Anthero de Quental

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Linuxando.com | ...

Share this post


Link to post
Share on other sites
HappyHippyHippo

corre o teste anterior com esta alteração para perceberes o que fizeste:

p = $_GET["perm"];
$t = 0;
    foreach($p as $k => $c ) {
        $t++;
            echo $k . '[' . $c . '],' - Sim<br>';
    }

 


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
Fábio Peixeiro

Y8gDHhmzQiuqwiJXA2c6Qg.png

Este é o resultado da query.

9 minutos atrás, HappyHippyHippo disse:

corre o teste anterior com esta alteração para perceberes o que fizeste:


p = $_GET["perm"];
$t = 0;
    foreach($p as $k => $c ) {
        $t++;
            echo $k . '[' . $c . '],' - Sim<br>';
    }

 

Fiz o que me pedis-te, so tive que corrigir um erro ou outro xD
 

$p = $_GET["perm"];
$t = 0;
foreach($p as $k => $c ){
    $t++;
    echo $k . '[' . $c . '] - Sim<br>';
    }

E dame este erro:

cLrKYji7TNq4etXzp4Bmdw.png

Share this post


Link to post
Share on other sites
HappyHippyHippo
9 minutes ago, Fábio Peixeiro said:

Y8gDHhmzQiuqwiJXA2c6Qg.png

Este é o resultado da query.

Fiz o que me pedis-te, so tive que corrigir um erro ou outro xD
 


$p = $_GET["perm"];
$t = 0;
foreach($p as $k => $c ){
    $t++;
    echo $k . '[' . $c . '] - Sim<br>';
    }

E dame este erro:

cLrKYji7TNq4etXzp4Bmdw.png

era suposto fazeres o mesmo teste descrito pelo @Virneto, se este dá esse erro é porque ou fieste mal o teste, ou alteraste o código desde então


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
Fábio Peixeiro

Repeti o teste e fiz o seguinte:

$p = $_GET["perm"];
$t = 0;
echo 'Inicio codigo Virneto<br>';
//Inicio codigo Virneto
foreach($p as $c ) {
    $t++;
    echo $c,' - Sim<br>';
}
//Fim código Virneto
echo 'Fim código Virneto <br><br>Inicio código Happy<br>';
$t = 0;
//Inicio código Happy
foreach($p as $k => $c ) {
    $t++;
    echo $k . '[' . $c . '] - Sim<br>';
    }
//Fim código Happy
echo 'Fim código Happy';

O output foi este:

kTEywhBhTQ2hMejxyRixdw.png

O que pretendia era por exemplo:

1 - Sim

2 - Não

3 - Sim

Edited by Fábio Peixeiro

Share this post


Link to post
Share on other sites
HappyHippyHippo

prontos ... agora como podes ver, as keys do teu array não tem informação interessante. vamos mudar isso:

// ...

$query = "SELECT permissoes.cd_perm, permissao, estado FROM permissoes, tipo_utilizadores_permissoes WHERE tipo_utilizadores_permissoes.cd_perm = permissoes.cd_perm AND tipo_utilizadores_permissoes.cd_tp_uti = $tp_uti ORDER BY permissoes.cd_perm";

// ...

echo '<input type="checkbox" name="perm[' . $row["cd_perm"] . ']" id="perm" class="flat"';
if ($row["estado"] == 1){
    echo ' checked="checked"';
}
echo ' />';

// ...

agora corre o teste novamente


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
Fábio Peixeiro

Entretanto já consgui resolver o problema, acho xD

Spoiler

require("C:/xampp/htdocs/connect.php");
$query = '';
$p = $_GET["perm"];
$tp_uti = $_REQUEST["tp_uti"];
$tam = $_REQUEST["tamanho"];
$t = 1;
//echo "tamanho total: ", $tam, "<br>"; output de teste
if (is_array($p)) {
    foreach ($p as $j) {
        if ($t <= $tam) {
            while ($t <= $j) {
                if ($j == $t) {
                    //echo $t, " - Sim<br>";
                    $query .= 'UPDATE tipo_utilizadores_permissoes SET estado = 1 WHERE cd_perm = '. $t .' AND cd_tp_uti = '. $tp_uti .';';
                } else {
                    //echo $t, " - Não<br>";
                    $query .= 'UPDATE tipo_utilizadores_permissoes SET estado = 0 WHERE cd_perm = '. $t .' AND cd_tp_uti = '. $tp_uti .';';
                }
                $t++;
            }
        }
    }

    if ($t <= $tam) {
        while ($t <= $tam) {
            //echo $t, " - Não<br>";
            $query .= 'UPDATE tipo_utilizadores_permissoes SET estado = 0 WHERE cd_perm = '. $t .' AND cd_tp_uti = '. $tp_uti .';';
            $t++;
        }
    }
    //echo "t: $t e tam $tam<br>"; output de teste
    echo "Permissoes atualizadas.";
} else echo "Permissoes atualizadas.<br>Foram retiradas todas as permissoes.";
mysqli_multi_query($connect, $query);
echo '<meta http-equiv="refresh" content="0; url=http://localhost/index.php?cmd=lis-tp-uti">';

 

Spoiler

<form id="pForm" class="form-horizontal form-label-left" action="tipo_utilizadores_permissoes/js/ins_permissao.php">
    <div style=" overflow: auto">
        <table class="table border="0">
            <thead>
                <th>Permissao</th>
                <th width="10px">Estado</th>
            </thead>
            <?php
            require("C:/xampp/htdocs/connect.php");
            mysqli_query($connect, "set character_set_client='utf8'");
            mysqli_query($connect, "set character_set_results='utf8'");
            mysqli_query($connect, "set collation_connection='utf8_general_ci'");
            $tp_uti = $_REQUEST['tp'];
            $query = "SELECT permissao, estado FROM permissoes, tipo_utilizadores_permissoes WHERE tipo_utilizadores_permissoes.cd_perm = permissoes.cd_perm AND tipo_utilizadores_permissoes.cd_tp_uti = $tp_uti ORDER BY permissoes.cd_perm";
            $result = mysqli_query($connect, $query);
            $t = 0;
            while ($row = mysqli_fetch_array($result)) {
            	$t++;
                echo '
                	<tr>
                    	<td>
                        	<div class="checkbox">
                            	<label>' . $row["permissao"] . '</label>
                            </div>
                        </td>
                        <td>
                            <div class="checkbox">
                            	<label>
                                	<input value="' . $t . '" type="checkbox" name="perm[]" id="perm" class="flat"';
                               		if ($row["estado"] == 1) {
                                    	echo ' checked="checked"';
                                  	}
                                  	echo '>
                              	</label>
                           	</div>
                       	</td>
                    </tr>';
                    }?>
		</table>
        	<input type="hidden" name="tamanho" value="<?php echo $t; ?>">
    </div>
    <div class="ln_solid"></div>
    <div class="form-group">
    	<div class="col-md-12 col-sm-12 col-xs-12" style="text-align: center">
           	<button id="bSubmit" type="submit" class="btn btn-success">Guardar</button>
        </div>
	</div>
</form>

 

vArgrbBZRbC8A7Mt0wjobQ.png

h8bQ-5cuQ-_IBhd3DYV45A.png

Edited by Fábio Peixeiro

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.