• User Attivo

    Messaggi Visibili Solo A Determinate Utenze

    Ciao a tutti,

    è da diversi giorni che cerco di venire a capo..

    Allora ho creato un ShoutBox e uno script che mi ritrova tutti i dati:

    [PHP]
    //riconosco utente
    $cookie[0] = intval($cookie[0]);
    $usrinfo = $db->sql_fetchrow($db->sql_query("select * from ".$prefix."_users WHERE user_id='$cookie[0]'"));
    $userok = $usrinfo['username'];

    $resultshout = $db->sql_query("SELECT * FROM shout order by date DESC");
    $totshout = $db->sql_numrows($db->sql_query("SELECT * FROM shout"));
    if($totshout == 0) {$final = "<center><b>Non ci sono messaggi!</b></center>";}
    else {
    while ($row = $db->sql_fetchrow($resultshout)) {

    $user = $row['user'];
    $globale = $row['global'];
    $text = $row['text'];
    $data = $row['date'];
    

    if($globale ==0) {
    $final .= "<center><table border="0" width="80%" cellpadding="1" cellspacing="1"><tr><td width="1%">$foto </td><td><font color="#$coloreuser2"><b>$user</a></b></font>: $text</a></td><td align="right">$data  </td></tr></table></center><br>";
    }
    if($globale != 0) {
    $final .= "<center><table border="0" width="80%" cellpadding="1" cellspacing="1"><tr><td width="1%"><img src="images/danger/warning.gif" title="Attenzione: Messaggio Globale"></td><td><font color="red"><b>Messaggio Globale</a></b></font>: $text</a></td><td align="right">$data  </td></tr></table></center><br>";
    }

    }
    }
    

    echo "$final<br><br>";
    [/PHP]

    Funziona tutto correttamente. Ora quello che cerco di fare è fare in modo che i messaggi vengono visti solo dagli amici.

    Ho la tabella amici nel DB strutturata in questo modo:

    Richiede ---- Amico ---- Data

    come posso fare in modo che controllo l'autore del messaggio e venga mostrato solo ai propri amici?

    Naturalmente nella tabella amici si avrà qualcosa tipo:

    Test --- Test2 --- 2010-2-11
    Test3 --- Test2 --- 2010-3-10
    Test3 --- Test --- 2010-1-13

    Grazie infinite in anticipo a chi riuscirà a darmi una soluzione.. Sono piu di 3 gg che continuo a provare con cicli for ecc..

    *alcune variabili non sono presenti altrimenti il codice sarebbe stato troppo lungo da postare.


  • User

    ciao Sovietiko se fai una query e controlli se sono amici o no la persona che visualizza la pagina non fai prima?. Non ho capito quale è il problema che ti trovi!


  • User Attivo

    @giovandres90 said:

    ciao Sovietiko se fai una query e controlli se sono amici o no la persona che visualizza la pagina non fai prima?. Non ho capito quale è il problema che ti trovi!
    Ciao grazie per la risposta,

    tu dici prima di verificare gli utenti amici e poi di andare a ricercare i messaggi vero?
    Ho provato solo che poi mi vengono stampati i messaggi degli amici e non quelli in prima persona.

    Avevo fatto tipo una cosa simile
    [php]
    $result = $db->sql_query("SELECT * FROM amici where richiede='$userok' or amico='$userok'");
    while ($row = $db->sql_fetchrow($result)) {
    $amico = $row['amico'];
    $richiede = $row['richiede'];
    if($amico == $userok) { $amici = $richiede; }
    else if($amico != $userok) { $amici = $amico;}

    $resultshout = $db->sql_query("SELECT * FROM shout where user='$amici' order by date DESC");

    stampo i dati..
    }
    [/php]

    Solo che il problema è che non si visualizzano i messaggi in prima persona e se non ricordo male neanche i messaggi Globali settati dalla variabile Global...

    Spero di essere stato chiaro.. Grazie ancora, Saluti.


  • ModSenior

    Ciao Sovietiko,

    stai prendendo per l'appunto i messaggi dei tuoi amici con la query:
    [php]
    $db->sql_query("SELECT * FROM shout where user='$amici' order by date DESC");
    [/php]


  • User Attivo

    @Thedarkita said:

    Ciao Sovietiko,

    stai prendendo per l'appunto i messaggi dei tuoi amici con la query:
    [php]
    $db->sql_query("SELECT * FROM shout where user='$amici' order by date DESC");
    [/php]
    Ciao Thedarkita,

    sì esatto, ma io vorrei mostrare i messaggi degli amici + i propri messaggi, e naturalmente il messaggio globale quando la variabile global sarà = 1.

    Avete qualche soluzione su come fare?

    Non riesco a trovare una soluzione che funzioni regolarmente 😞


  • ModSenior

    [php]
    $db->sql_query("SELECT * FROM shout where user='$amici' OR user = '$userok' OR global = 1 order by date DESC");
    [/php]


  • User Attivo

    @Thedarkita said:

    [php]
    $db->sql_query("SELECT * FROM shout where user='$amici' OR user = '$userok' OR global = 1 order by date DESC");
    [/php]

    Come al solito era un errore mio, avevo già provato la tua soluzione ma saltavo delle modifiche prima dell'estrazione dati shout e non funzionava.

    Ora con calma ho rivisto l'intero codice, modificandolo in gran parte e funziona egregiamente.

    Grazie per il supporto. 🙂


  • ModSenior

    Figurati.

    :ciauz:


  • User Attivo

    @Thedarkita said:

    Figurati.

    :ciauz:

    Ho scritto troppo presto mi sà.

    Codice Completo

    [php]
    //riconosco utente
    $cookie[0] = intval($cookie[0]);
    $usrinfo = $db->sql_fetchrow($db->sql_query("select * from ".$prefix."_users WHERE user_id='$cookie[0]'"));
    $userok = $usrinfo['username'];
    //controllo le liste amici
    $result = $db->sql_query("SELECT * FROM amici where richiede='$userok' AND active='1' OR amico='$userok' AND active='1' order by amico");
    $amicichehai = $db->sql_numrows($db->sql_query("SELECT * FROM amici where richiede='$userok' AND active='1' OR amico='$userok' AND active='1'"));
    if($amicichehai == '0') {
    $final = "<center><b> Al momento non hai amici!</b></center>";
    }
    else {
    while ($row = $db->sql_fetchrow($result)) {
    $amicis = $row['amico'];
    $richiede = $row['richiede'];
    if($amicis == $userok) { $amici = $richiede; }
    else if($amicis != $userok) { $amici = $amicis; }
    //CONTROLLO I MESSAGGI NELLA SHOUT
    $resultshout = $db->sql_query("SELECT * FROM shout WHERE user = '$amici' or user='$userok' or global='1' order by date DESC");
    $totshout = $db->sql_numrows($db->sql_query("SELECT * FROM shout WHERE user = '$amici' or user='$userok' or global='1'"));
    if($totshout == 0) {$final = "<center><b>Non ci sono messaggi da parte dei tuoi amici!</b></center>";}
    else {
    while ($rows = $db->sql_fetchrow($resultshout)) {

    $id = $rows['id'];
    $user = $rows['user'];
    $globale = $rows['global'];
    $text = $rows['text'];
    

    if($globale ==0) {
    $final .= "<center><table border="0" width="80%" cellpadding="2" cellspacing="2"><tr><td width="1%">$foto</td><p><td valign="top"><font color="#$coloreuser2"><b>$user</a></b></font>: $text</a></p></td><td align="right">$data  </td></tr></table><hr></center>";
    }
    if($globale != 0) {
    $final .= "<center><table border="0" width="80%" cellpadding="2" cellspacing="2"><tr><td width="1%"><img src="images/danger/warning.gif" title="Attenzione: Messaggio Globale" align="left"></td><td valign="top"><font color="red"><b>Messaggio Globale</a></b></font>: $text</a></td><td align="right"><img src="images/alert.gif" title="Messaggio Globale $id"></td></tr></table><hr></center>";
    }
    }
    }
    }
    }

    echo "$final<br><br>";[/php]

    Purtroppo mi vengono ristampati i messaggi N° volte per quanti amici vengono trovati e in ogni stamp mette i messaggi dei nuovi amici, come i risultati ottenuti nel 1° While.

    Avete qualche idea per ottimizzare lo script e far visualizzare i messaggi in modo corretto?

    Grazie e scusate la risposta affrettata, Saluti.


  • User

    Ti stai complicando troppo, tu quel che devi fare è fare una query e prellevare 10 amici, ti recuperi i dati di quei 10 amici e da li x ogni amico del user ti fai stampare un tot di messaggi.

    Ti dico di prelevare 10 amici per volta perche nel momento in cui il user abbia piu di 300 400 amici mi sa sarebbe troppo pensate da gestire, ti fai una impaginazione di maniera tale di vedere solo 10 messaggi per volta.


  • User Attivo

    @giovandres90 said:

    Ti stai complicando troppo, tu quel che devi fare è fare una query e prellevare 10 amici, ti recuperi i dati di quei 10 amici e da li x ogni amico del user ti fai stampare un tot di messaggi.

    Ti dico di prelevare 10 amici per volta perche nel momento in cui il user abbia piu di 300 400 amici mi sa sarebbe troppo pensate da gestire, ti fai una impaginazione di maniera tale di vedere solo 10 messaggi per volta.

    Ciao giovandres90,

    potresti farmi un esempio pratico di ciò che intendi?

    Per mostrare N° risultati ad ogni pagina ok, ma per il resto non saprei..

    Grazie in anticipo, Saluti.


  • User

    Ciao Sovietico prova cosi e dimmi cosa ti stampa:

    [php]
    //riconosco utente
    $cookie[0] = intval($cookie[0]);

    $usrinfo = $db->sql_fetchrow($db->sql_query("select * from ".$prefix."_users WHERE user_id='$cookie[0]'"));

    $userok = $usrinfo['username'];

    //controllo le liste amici
    $result = $db->sql_query("SELECT * FROM amici where richiede='$userok' AND active='1' OR amico='$userok' AND active='1' order by amico LIMIT 10");

    $amicichehai = $db->sql_numrows($db->sql_query("SELECT * FROM amici where richiede='$userok' AND active='1' OR amico='$userok' AND active='1'"));

    if($amicichehai == '0')
    {
    $final = "<center><b> Al momento non hai amici!</b></center>";
    }
    else
    {
    while ($row = $db->sql_fetchrow($result))
    {
    $amicis = $row['amico'];
    $richiede = $row['richiede'];

              //CONTROLLO I MESSAGGI NELLA SHOUT
              $resultshout = $db->sql_query("SELECT * FROM shout WHERE user = '$amicis' or user='$richiede' or global='1' order by date DESC");
              
              $totshout = $db->sql_numrows($db->sql_query("SELECT * FROM shout WHERE user = '$amici' or user='$userok' or global='1'"));
              
              if($totshout == 0) 
                {
                  $final = "<center><b>Non ci sono messaggi da parte dei tuoi amici!</b></center>";
                }
                else 
                {
                   while ($rows = $db->sql_fetchrow($resultshout)) 
                         {
    
                          $id = $rows['id'];
                          $user = $rows['user'];
                          $globale = $rows['global'];
                          $text = $rows['text'];
    
                          if($globale ==0) 
                            {
                              $final .= "<center>
                                          <table border=\"0\" width=\"80%\" cellpadding=\"2\" cellspacing=\"2\">
                                           <tr>
                                           <td width=\"1%\">$foto</td>
                                           <p><td valign=\"top\"><font color=\"#$coloreuser2\"><b>$user</a></b></font>: $text</a></p></td>
                                           <td align=\"right\">$data&nbsp;&nbsp;</td></tr>
                                          </table><hr>
                                         </center>";
                            }
                            elseif($globale != 0) 
                            {
                              $final .= "<center>
                                          <table border=\"0\" width=\"80%\" cellpadding=\"2\" cellspacing=\"2\"><tr>
                                           <td width=\"1%\"><img src=\"images/danger/warning.gif\" title=\"Attenzione: Messaggio Globale\" align=\"left\"></td>
                                           <td valign=\"top\"><font color=\"red\"><b>Messaggio Globale</a></b></font>: $text</a></td>
                                           <td align=\"right\"><img src=\"images/alert.gif\" title=\"Messaggio Globale $id\"></td></tr>
                                          </table><hr>
                                         </center>";
                            }
                            
                          }//while
                 }//else
                 
           }//while
    

    }//else

    echo "$final<br><br>";
    [/php]


  • User Attivo

    Ciao giovandres90,

    stessa e identica cosa di prima 😞

    Praticamente vengono stampati i mex del primo amico + quelli in prima persona, poi vengono stampati i mex del secondo amico + quelli in prima persona e così via..

    Bisognerebbe eliminare il While del controllo amici, ma non sò che soluzione adottare.

    Grazie infinite per l'interessamento!


  • ModSenior

    Devi fare una cosa ti questo tipo:
    [php]
    <?php
    //riconosco utente
    $cookie[0] = intval($cookie[0]);
    $usrinfo = $db->sql_fetchrow($db->sql_query("select * from ".$prefix."_users WHERE user_id='$cookie[0]'"));
    $userok = $usrinfo['username'];
    //controllo le liste amici
    $result = $db->sql_query("SELECT * FROM amici where richiede='$userok' AND active='1' OR amico='$userok' AND active='1' order by amico");
    $amicichehai = $db->sql_numrows($db->sql_query("SELECT * FROM amici where richiede='$userok' AND active='1' OR amico='$userok' AND active='1'"));
    if($amicichehai == '0') {
    $final = "<center><b> Al momento non hai amici!</b></center>";
    }
    else {
    $where = '';
    while ($row = $db->sql_fetchrow($result)) {
    $amicis = $row['amico'];
    $richiede = $row['richiede'];
    if($amicis == $userok) { $amici = $richiede; }
    else if($amicis != $userok) { $amici = $amicis; }

    $where.= ' OR user = '.$amici;
    }
    
     //CONTROLLO I MESSAGGI NELLA SHOUT
    $resultshout = $db->sql_query("SELECT * FROM shout WHERE user='$userok' or global=1 $where order by date DESC");
    $totshout = $db->sql_numrows($resultshout);
    if($totshout == 0) {$final = "<center><b>Non ci sono messaggi da parte dei tuoi amici!</b></center>";}
    else {
    while ($rows = $db->sql_fetchrow($resultshout)) {
    
    $id = $rows['id'];
    $user = $rows['user'];
    $globale = $rows['global'];
    $text = $rows['text'];
    

    if($globale ==0) {
    $final .= "<center><table border="0" width="80%" cellpadding="2" cellspacing="2"><tr><td width="1%">$foto</td><p><td valign="top"><font color="#$coloreuser2"><b>$user</a></b></font>: $text</a></p></td><td align="right">$data  </td></tr></table><hr></center>";
    }
    if($globale != 0) {
    $final .= "<center><table border="0" width="80%" cellpadding="2" cellspacing="2"><tr><td width="1%"><img src="images/danger/warning.gif" title="Attenzione: Messaggio Globale" align="left"></td><td valign="top"><font color="red"><b>Messaggio Globale</a></b></font>: $text</a></td><td align="right"><img src="images/alert.gif" title="Messaggio Globale $id"></td></tr></table><hr></center>";
    }
    }

    }
    }

    echo "$final<br><br>";
    [/php]


  • User Attivo

    Ciao Thedarkita,

    Non trova risultati.

    stampa: Non ci sono messaggi da parte dei tuoi amici!


  • ModSenior

    Sotto:
    [php]
    $resultshout = $db->sql_query("SELECT * FROM shout WHERE user='$userok' or global=1 $where order by date DESC");
    [/php]
    Metti:
    [php]
    echo "SELECT * FROM shout WHERE user='$userok' or global=1 $where order by date DESC";
    [/php]
    E incolla qui la query che ti mostra.


  • User Attivo

    Forse perchè mancano gli apici?

    
    SELECT * FROM shout WHERE user='Dangerous' or global=1 OR user = Test OR user = Prova order by date DESC
    
    Non ci sono messaggi da parte dei tuoi amici!
    
    

  • ModSenior

    Ah ecco, tu conservi i nick e non gli id, per cui:
    [php]
    <?php
    //riconosco utente
    $cookie[0] = intval($cookie[0]);
    $usrinfo = $db->sql_fetchrow($db->sql_query("select * from ".$prefix."_users WHERE user_id='$cookie[0]'"));
    $userok = $usrinfo['username'];
    //controllo le liste amici
    $result = $db->sql_query("SELECT * FROM amici where richiede='$userok' AND active='1' OR amico='$userok' AND active='1' order by amico");
    $amicichehai = $db->sql_numrows($db->sql_query("SELECT * FROM amici where richiede='$userok' AND active='1' OR amico='$userok' AND active='1'"));
    if($amicichehai == '0') {
    $final = "<center><b> Al momento non hai amici!</b></center>";
    }
    else {
    $where = '';
    while ($row = $db->sql_fetchrow($result)) {
    $amicis = $row['amico'];
    $richiede = $row['richiede'];
    if($amicis == $userok) { $amici = $richiede; }
    else if($amicis != $userok) { $amici = $amicis; }

    $where.= ' OR user = \''.$amici.'\'';
    }
    
     //CONTROLLO I MESSAGGI NELLA SHOUT
    $resultshout = $db->sql_query("SELECT * FROM shout WHERE user='$userok' or global=1 $where order by date DESC");
    $totshout = $db->sql_numrows($resultshout);
    if($totshout == 0) {$final = "<center><b>Non ci sono messaggi da parte dei tuoi amici!</b></center>";}
    else {
    while ($rows = $db->sql_fetchrow($resultshout)) {
    
    $id = $rows['id'];
    $user = $rows['user'];
    $globale = $rows['global'];
    $text = $rows['text'];
    

    if($globale ==0) {
    $final .= "<center><table border="0" width="80%" cellpadding="2" cellspacing="2"><tr><td width="1%">$foto</td><p><td valign="top"><font color="#$coloreuser2"><b>$user</a></b></font>: $text</a></p></td><td align="right">$data  </td></tr></table><hr></center>";
    }
    if($globale != 0) {
    $final .= "<center><table border="0" width="80%" cellpadding="2" cellspacing="2"><tr><td width="1%"><img src="images/danger/warning.gif" title="Attenzione: Messaggio Globale" align="left"></td><td valign="top"><font color="red"><b>Messaggio Globale</a></b></font>: $text</a></td><td align="right"><img src="images/alert.gif" title="Messaggio Globale $id"></td></tr></table><hr></center>";
    }
    }

    }
    }

    echo "$final<br><br>"; [/php]


  • User Attivo

    Cosa dire.. Grazie mille a tutti, sembra funzionare regolarmente! 🙂


  • User

    Ma in teoria tu cosa vuoi stampare? dici come hai strutturato la tabella del db? se non avevo capito male tu volevi stampare tutti i messagi dei amici del user + i suoi giusto ?