Jump to content
Sir Pereira

[RESOLVIDO] Conseguir checkar convidados

Recommended Posts

Sir Pereira

Boas,

estou a fazer uma página de edição, e numa parte posso editar os convidados com checkboxes, e supostamente, os que já estão convidados, apareceriam logo checkados, mas... não está a funcionar.

                                $sql_list_users = mysql_query("SELECT id,nome FROM scie_users");
                                
                                $sql_list_convidados = mysql_query("
                                    SELECT user_id,evento_id
                                    FROM scie_reunioes_convidados
                                    WHERE evento_id = '$_GET[id]'");

                                    <tr>
                                        <td class="definicao">Convidados:</td>
                                        <td class="valor">
                                    <?php
                                    if ($sql_list_convidados) {
                                        while ($convidado = mysql_fetch_assoc($sql_list_convidados)) {
                                            if ($sql_list_users) {
                                                while ($utilizador = mysql_fetch_assoc($sql_list_users)) {
                                    ?>


                                            <span class="convidado">
                                                <input type="checkbox" value="<?php echo $utilizador['id']; ?>" <?php if ($convidado['user_id'] == $utilizador['id']) { echo "checked"; } ?> /> <?php echo $utilizador['nome']; ?>
                                            </span>

                                    <?php
                                                  
                                                }
                                            }
                                                  }
                                            } else {
                                                    echo mysql_error();
                                            }
                                    ?>

A tabela scie_users lista os utilizadores, e a tabela scie_reunioes_convidados, com base no id que vem do GET, listaria os convidados para aquele id de evento. Depois era suposto quando criasse cada checkbox verificar se são iguais ou não.

Está a faltar-me algo no raciocínio, mas não estou a ver o quê...

Share this post


Link to post
Share on other sites
socopo

Penso que o problema será de $sql_list_users dár a volta no primeiro ciclo e depois não retorna mais nenhum utilizador. A ver se explico melhor.

// ciclo retornando os convidados do evento
while ($convidado = mysql_fetch_assoc($sql_list_convidados)) {
         if ($sql_list_users) {
                 // ciclo retornando os utilizadores todos
                 while ($utilizador = mysql_fetch_assoc($sql_list_users))

Logo percorreres a lista dos utilizadores todos para comparar com o primeiro convidado, assim quando o ciclo mudar para o segundo convidado a tua lista de utilizadores está no fim.

Solução:

1 - Em cada iteração do ciclo recomeças a lista de utilizadores  👎

2 - Fazes uma query para ter os convidados desse evento  :)

Share this post


Link to post
Share on other sites
Sir Pereira

Quero todos, no entanto desses todos, na tabela scie_reunioes_convidados, tenho os campos event_id e user_id, que correspondentemente ao evento que estou a editar, informa-me os utilizadores que "estão confirmados", como tal na página de edição ao listar TODOS OS USERS DA BD, queria que OS QUE JÁ ESTÃO CONFIRMADOS aparecessem como checkados.

Share this post


Link to post
Share on other sites
Sir Pereira

Repara no código que tenho em cima.

Repara o que estou a fazer. Eu quero mostrar a lista de utilizadores, mas sem os repetir, quero que verifique se o utilizador actual (da lista de utilizadores toda) está confirmado ou não. O problema é que ele não me está a fazer isso. Ele está a interromper-me o ciclo dos utilizadores todos.

Share this post


Link to post
Share on other sites
yoda

Se ambas as tabelas têm ID's em comum, consegues saber a lista toda numa só query. É bem melhor que criar ciclos dentro de ciclos, até porque a maneira como o fizeste vai pesar mais no site por repetir o mesmo processo tantas vezes quantos users tiveres na primeira tabela. Se tiveres 1000 users, vai fazer o ciclo 1 milhão de vezes, o que é contra-produtivo.

Share this post


Link to post
Share on other sites
Sir Pereira

O que não percebes?

Existe uma tabela scie_users que contém todos os utilizadores da plataforma.

Um utilizador pode criar uma reunião, que fica armazenada na tabela scie_reunioes. Na altura de criação dessa reunião, com várias checkboxes lista todos os utilizadores da plataforma.

Os utilizadores marcados vão ser inseridos no scie_reunioes_convidados (dado que foram os seleccionados para serem convidados).

E eu, agora numa página de edição de reunião, quero listar todos os utilizadores da plataforma, e quero que os já convidados apareçam marcados.

Share this post


Link to post
Share on other sites
socopo

Esta solução não é muito boa pelo que faz querys desnecessariamente mas pelo menos resulta  se não me engano ;)

O que te aconselho é pores os IDs dos convidados numa lista e depois ver ao listar os utilizadores se o seu ID está nessa lista. Não sei se em PHP há listas mas também deve ser possível com um hashmap

  <?php
if ($sql_list_users) {
	while ($utilizador = mysql_fetch_assoc($sql_list_users)) {

		$sql_user_convidado = mysql_query("
                                    SELECT user_id,evento_id
                                    FROM scie_reunioes_convidados
                                    WHERE evento_id = '$_GET[id]' AND user_id = $utilizador[id]");
		?>
		<span class="convidado">
			<input type="checkbox" value="<?php echo $utilizador['id']; ?>" <?php if (mysql_num_rows($sql_user_convidado)) { echo "checked"; } ?> /> <?php echo $utilizador['nome']; ?>
		</span>
		<?php                               

	}
} else {
	echo mysql_error();
}
?>

Share this post


Link to post
Share on other sites
socopo

Pois, se tiveres uns 500 utilizadores, são 501 querys à BD cada vez que chamas essa página.

Tenta fazer o que te disse, de por os IDs dos convidados numa lista.

Outra coisa que pode funcionar é fazer um join entre as tabelas mas n sei se resulta

Share this post


Link to post
Share on other sites
Sir Pereira

Pois, se tiveres uns 500 utilizadores, são 501 querys à BD cada vez que chamas essa página.

Tenta fazer o que te disse, de por os IDs dos convidados numa lista.

Outra coisa que pode funcionar é fazer um join entre as tabelas mas n sei se resulta

O que queres dizer quando dizes lista?

Andava a tentar fazer um JOIN mas não me está a sair nada de jeito.

$sql_list_users = mysql_query("
                                    SELECT scie_reunioes_convidados.evento_id,scie_reunioes_convidados.user_id AS conv_id,scie_users.nome,scie_users.id AS user_id
                                    FROM scie_users,scie_reunioes_convidados
                                    WHERE (scie_reunioes_convidados.evento_id = '$_GET[id]' AND scie_reunioes_convidados.user_id = scie_users.id) OR (scie_reunioes_convidados.evento_id = '$_GET[id]')
                                    ");

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.