Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Guilherme Oderdenge

Contagem de usuários

Recommended Posts

Olá!

 

Tenho o seguinte script que faz a verificação de amigos de um determinado profile:

                echo '<div class="separador"></div>';
               echo '' . $usuario_perfil['nome'] . ' tem (xxx) amigos';
               echo '<div id="amigos">';
               echo '<ul>';
               if ($_GET['uid'] == $_SESSION['id']) {
                   $query_amigos = $SQL->query("select * from `" . TBL_AMIGOS . "` where `nome` = '" . $usuario_perfil['nome'] . "'");

                   while ($amigo = $query_amigos->fetch_assoc()) {
                       $pf_amigo = $SQL->query("select * from `" . TBL_USUARIOS . "` where `nome` = '" . $amigo['ref'] . "'");
                       while ($amg = $pf_amigo->fetch_assoc()) {

 

E como vocês podem ver, tenho um echo mostrando o nome do usuário e o "tem (xxx) amigos". Gostaria de saber como faço para substituir esses XXX de amigos pelo valor total de amigos que o usuário tem.

 

Eu faria isso por um COUNT na Query, disso eu sei, mas me falta detalhes para fazer isso. Poderiam me ajudar?

 

Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi!

 

Antes de mais nada, substitua:

 

if ($_GET['uid'] == $_SESSION['id']) {

 

Por:

 

if (isset($_GET['uid']) && isset($_SESSION['id']) && $_GET['uid'] == $_SESSION['id']) {

 

Isto evita erros E_NOTICE se $_GET['uid'] ou $_SESSION['id'] nao tiver sido passado/definido.

 

Quanto a questao:

 

Se for so pra contar os amigos do usuario logado voce pode usar mysql_num_rows() pra retornar o total de amigos de [$_GET['uid']] ao invés de fazer outro while com mysql_fetch_assoc().

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, InterPlanet!

Obrigado pela sugestão da substituição, já fora feita!

 

Quanto a sua resposta: não entendi o que eu devo fazer. Poderia exemplificar isso no script?

 

Desde já, grato.

Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok, tendo em vista que voce esta usando uma classe para o MySQL, pode ser necessario fazer adaptacoes ai.

Posto ja um exemplo.

 

Exemplo:

 

<?php
If (isset($_GET['uid']) && isset($_SESSION['id']) && $_GET['uid'] == $_SESSION['id'])
  {
    // IDENTIFICA O USUARIO
    $SQL                    = 'SELECT * FROM '.TBL_AMIGOS.' WHERE id = '.$_GET['uid'].' OR nome = "'.$usuario_perfil['nome'].'"'; // Use a variavel de comparacao que achar melhor, mas creio que so id seja melhor e mais seguro: WHERE id = '.$_GET['uid'].'!
    $Usuario_Consulta       = mysql_query($SQL) OR Die ('Erro '.mysql_errno().' -> '.mysql_error());
    $Amigos                 = 0; // Variavel que vai armazenar o numero de amigos do usuario

    // Se o usuario existe, CONTA OS AMIGOS DELE
    If (mysql_num_rows($Usuario_Consulta))
       { $Usuario           = mysql_fetch_array($Usuario_Consulta); // Dados do Usuario

         /*
            Olha a clausula WHERE desta query:
            - Usei o campo ref como sendo o campo que armazena a relacao entre o usuario e seu amigo
            - e comparei com $Usuario['ref'] que imageino seja o codigo de referencia do usuario
         */

         $SQL               = 'SELECT id FROM '.TBL_AMIGOS.' WHERE ref = "'.$Usuario['ref'];
         $Amigos_Consulta   = mysql_query($SQL) OR Die ('Erro '.mysql_errno().' -> '.mysql_error());
         $Amigos            = mysql_num_rows($Amigos_Consulta);
       }

    // ECHO
    Echo '<div class="separador"></div>';
    Echo '<div id="amigos">'.$usuario_perfil['nome'] . ' tem ('.$Amigos.') amigos</div>';
  }
?>

 

Se tiver problemas com os campos, poste a estrutura dessa tabela "amigos" pra facilitar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Inter, eu comparei os dois scripts e tentei adaptar ao meu, mas sem êxito.

Gostaria de saber, com as minhas classes, com todas as informações que eu te passei no script no 1º post, é possível adaptar a contagem de usuários?

 

Em curtas palavras: não consegui adaptar também... sempre alega um ou outro erro.

 

Uma dúvida que eu também tenho é: onde que eu devo colocar as verificações de usuário existente e etc?

 

Estou MUITO perdido.

 

Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aha! Entendo.

 

O pro ai é que nao conheco essa sua classe. Voce pode nao usa-la neste script?

 

Faz assim, poste a estrutura sql da sua tabela "amigos". Posso tentar adaptar o meu script a sua base de dados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Posso lhe dar todas informações necessárias, Inter.

 

Cá a estrutura:

--
-- Estrutura da tabela `ct_amigos`
--

CREATE TABLE IF NOT EXISTS `ct_amigos` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `ref` varchar(255) NOT NULL,
 `nome` varchar(255) NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=12 ;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entao:

 

ID é o codigo do amigo.

 

REF é o nome (texto) ou o codido (numero) do amigo que indicou este?

 

NOME é o nome do amigo.

 

É o nome.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok. Voce tem registros na tabela ai? Inclusive com relacoes?

 

Ex:

 

forum_amigos1.png

 

Olhe o código da minha pagina.php de exemplo:

 

<?php
$Usuario_ID                  = isset($_GET['uid']) && !empty($_GET['uid']) && is_numeric($_GET['uid']) ? $_GET['uid'] : 0;

// SE O USUARIO FOI PASSADO POR GET
// Removi a comparacao com o valor da $_SESSION pra testarmos o script
If (!empty($Usuario_ID))
  {
    // IDENTIFICA O USUARIO
    $SQL                    = 'SELECT * FROM '.TBL_AMIGOS.' WHERE id = '.$Usuario_ID; // Use a variavel de comparacao que achar melhor, mas creio que so id seja melhor e mais seguro: WHERE id = '.$_GET['uid'].'!
    $Usuario_Consulta       = mysql_query($SQL) OR Die ('Erro '.mysql_errno().' -> '.mysql_error());
    $Amigos                 = 0; // Variavel que vai armazenar o numero de amigos do usuario

    // Se o usuario existe, CONTA OS AMIGOS (as relacoes) DELE
    If (mysql_num_rows($Usuario_Consulta))
       { $Usuario           = mysql_fetch_array($Usuario_Consulta); // Dados do Usuario

         $SQL               = 'SELECT id FROM '.TBL_AMIGOS.' WHERE ref = "'.$Usuario['nome'].'"'; // Quando o valor de ref = ao nome do usuario da consulta ($_GET['uid'])
         $Amigos_Consulta   = mysql_query($SQL) OR Die ('Erro '.mysql_errno().' -> '.mysql_error());
         $Amigos            = mysql_num_rows($Amigos_Consulta);
       }

    // ECHO
    Echo '<div class="separador"></div>';
    Echo '<div id="amigos">'.$Usuario['nome'] . ' tem ('.$Amigos.') amigos</div>';

  }
// SE O USUARIO NAO FOI PASSADO
Else { Echo 'Informe o usuário na url, ex: http://dominio.com/pagina.php?uid=2'; }
?>

 

As minhas chamadas a pagina.php resultaram:

 

Chamando: http://localhost/pagina.php?uid=1

 

Imprimiu:

 

Fernando tem (1) amigos

 

Chamando: http://localhost/pagina.php?uid=2

 

Imprimiu:

 

Maria tem (0) amigos

 

Vale lembrar que eu tenho os registros exibidos na imagem aqui no meu db, defini TBL_AMIGOS como ct_amigos e que o script esta conectado ao mysql com mysql_conect(), claro, rs;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, InterPlanet.

 

Como você pode ver no meu script postado no primeiro post, eu já estou fazendo a verificação na tabela do usuário/amigo, e então eu gostaria de saber só como adaptar o mysql_num_rows ao meu script. Porque, ao meu entender, tudo já está feito, ele apenas AINDA não está contando quantos amigos o usuário em questão tem.

 

E a minha tabela é:

30wnps7.jpg

 

Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

A partir do seu script, tente:

 

<?php
             if ($_GET['uid'] == $_SESSION['id']) {
                   $query_amigos = $SQL->query("select * from `" . TBL_AMIGOS . "` where `nome` = '" . $usuario_perfil['nome'] . "'");

                   // IMAGINANDO QUE $query_amigos seja um resource
                   $amigo = mysql_fetch_array($query_amigos);

                   $pf_amigo = $SQL->query("select id from `" . TBL_USUARIOS . "` where ref = '" . $amigo['nome'] . "'");
                   $numero_de_amigos = mysql_num_rows($pf_amigo); // Aqui esta o numero de amigos!
             }
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

É, pelo visto não funcionou.

 

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in -- on line 86

 

Sabes o que posso fazer?

 

Desde já, grato.

Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Voce esta acessando o link d apagina com o uid no GET nao esta?

 

Exemplo: seusite.com/script.php?uid=5

 

Se esta tudo certo, o problema é essa classe mesmo, procure nela como contar o numero de registros! E o que resta tentar.

 

No mais, so se voce nao usar ela no codigo e seguir o script que te passei que nao ha usa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, Inter.

Sim, estou acessando a página pelo uid, mas não está funcionando.

 

Eu pensei que poderia fazer a contagem de registros usando um Count(*). Não poderia?

 

Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, Inter.

Sim, estou acessando a página pelo uid, mas não está funcionando.

 

Eu pensei que poderia fazer a contagem de registros usando um Count(*). Não poderia?

 

Abraço!

 

Pode! Ou pode criar um contador dentro do while e ir incrementando, tipo [ $i++ ].

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.