Un Evento Unico. 5 Sale. 27 Interventi. SEO, SOCIAL, E-Commerce, Mobile, Turismo.
CLICCA QUI e SCOPRI DI PIù X Chiudi
 
Forum GT: Condividiamo idee e conoscenza Forum GT: Condividiamo idee e conoscenza


Condividi questo contenuto nei Social Network:
Ti stiamo aspettando: Registrati subito e gratis. Entra a far parte di una delle comunità più attive in Italia. Se hai dimenticato i tuoi dati li puoi recuperare subito.


Vai indietro   Forum per Webmaster: Condividiamo Idee e Conoscenza > Sviluppo e Gestione siti web > Php - Mysql
Benvenuto! Forum Regole FAQ Lista utenti Calendario Segna come letti


Rispondi
 
LinkBack Strumenti di discussione
Vecchio 16-03-10, 20:24   #1 (permalink)
User
 
L'avatar di Sovietiko
 
Data di registrazione: Jul 2005
Ubicazione: Vimodrone
Messaggi: 251
Smile 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:

Codice 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&nbsp;&nbsp;</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&nbsp;&nbsp;</td></tr></table></center><br>";
}

    }
    }


echo 
"$final<br><br>"
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.
__________________
Admin e Webmaster Del Sito WebEasyIT
Sovietiko non in linea   Rispondi citando
Vecchio 17-03-10, 00:38   #2 (permalink)
User
 
L'avatar di giovandres90
 
Data di registrazione: Dec 2008
Messaggi: 83
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!
__________________
Realizzo script php-Mysql- creazione siti web
giovandres90 non in linea   Rispondi citando
Vecchio 17-03-10, 12:23   #3 (permalink)
User
 
L'avatar di Sovietiko
 
Data di registrazione: Jul 2005
Ubicazione: Vimodrone
Messaggi: 251
Quote:
giovandres90 Visualizza il messaggio
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
Codice 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..

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.
__________________
Admin e Webmaster Del Sito WebEasyIT
Sovietiko non in linea   Rispondi citando
Vecchio 17-03-10, 17:50   #4 (permalink)
ModSenior
 
L'avatar di Thedarkita
 
Data di registrazione: Aug 2006
Ubicazione: Messina
Messaggi: 6,439
Invia un messaggio tramite Skype a Thedarkita
Ciao Sovietiko,

stai prendendo per l'appunto i messaggi dei tuoi amici con la query:
Codice PHP:
$db->sql_query("SELECT * FROM shout where user='$amici' order by date DESC"); 
Thedarkita ora è in linea   Rispondi citando
Vecchio 17-03-10, 18:38   #5 (permalink)
User
 
L'avatar di Sovietiko
 
Data di registrazione: Jul 2005
Ubicazione: Vimodrone
Messaggi: 251
Quote:
Thedarkita Visualizza il messaggio
Ciao Sovietiko,

stai prendendo per l'appunto i messaggi dei tuoi amici con la query:
Codice PHP:
$db->sql_query("SELECT * FROM shout where user='$amici' order by date DESC"); 
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
__________________
Admin e Webmaster Del Sito WebEasyIT
Sovietiko non in linea   Rispondi citando
Vecchio 17-03-10, 18:40   #6 (permalink)
ModSenior
 
L'avatar di Thedarkita
 
Data di registrazione: Aug 2006
Ubicazione: Messina
Messaggi: 6,439
Invia un messaggio tramite Skype a Thedarkita
Codice PHP:
$db->sql_query("SELECT * FROM shout where user='$amici' OR user = '$userok' OR global = 1 order by date DESC"); 
Thedarkita ora è in linea   Rispondi citando
Vecchio 17-03-10, 21:41   #7 (permalink)
User
 
L'avatar di Sovietiko
 
Data di registrazione: Jul 2005
Ubicazione: Vimodrone
Messaggi: 251
Quote:
Thedarkita Visualizza il messaggio
Codice PHP:
$db->sql_query("SELECT * FROM shout where user='$amici' OR user = '$userok' OR global = 1 order by date DESC"); 
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.
__________________
Admin e Webmaster Del Sito WebEasyIT
Sovietiko non in linea   Rispondi citando
Vecchio 17-03-10, 21:42   #8 (permalink)
ModSenior
 
L'avatar di Thedarkita
 
Data di registrazione: Aug 2006
Ubicazione: Messina
Messaggi: 6,439
Invia un messaggio tramite Skype a Thedarkita
Figurati.

Thedarkita ora è in linea   Rispondi citando
Vecchio 17-03-10, 22:35   #9 (permalink)
User
 
L'avatar di Sovietiko
 
Data di registrazione: Jul 2005
Ubicazione: Vimodrone
Messaggi: 251
Quote:
Thedarkita Visualizza il messaggio
Figurati.

Ho scritto troppo presto mi sà.

Codice Completo

Codice 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&nbsp;&nbsp;</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>"
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.
__________________
Admin e Webmaster Del Sito WebEasyIT
Sovietiko non in linea   Rispondi citando
Vecchio 17-03-10, 23:07   #10 (permalink)
User
 
L'avatar di giovandres90
 
Data di registrazione: Dec 2008
Messaggi: 83
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.
__________________
Realizzo script php-Mysql- creazione siti web
giovandres90 non in linea   Rispondi citando
Vecchio 18-03-10, 08:03   #11 (permalink)
User
 
L'avatar di Sovietiko
 
Data di registrazione: Jul 2005
Ubicazione: Vimodrone
Messaggi: 251
Quote:
giovandres90 Visualizza il messaggio
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.
__________________
Admin e Webmaster Del Sito WebEasyIT

Ultima modifica di Sovietiko : 18-03-10 08:22.
Sovietiko non in linea   Rispondi citando
Vecchio 18-03-10, 14:43   #12 (permalink)
User
 
L'avatar di giovandres90
 
Data di registrazione: Dec 2008
Messaggi: 83
Ciao Sovietico prova cosi e dimmi cosa ti stampa:

Codice 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>"
__________________
Realizzo script php-Mysql- creazione siti web

Ultima modifica di giovandres90 : 18-03-10 14:45.
giovandres90 non in linea   Rispondi citando
Vecchio 18-03-10, 14:50   #13 (permalink)
User
 
L'avatar di Sovietiko
 
Data di registrazione: Jul 2005
Ubicazione: Vimodrone
Messaggi: 251
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!
__________________
Admin e Webmaster Del Sito WebEasyIT
Sovietiko non in linea   Rispondi citando
Vecchio 18-03-10, 14:57   #14 (permalink)
ModSenior
 
L'avatar di Thedarkita
 
Data di registrazione: Aug 2006
Ubicazione: Messina
Messaggi: 6,439
Invia un messaggio tramite Skype a Thedarkita
Devi fare una cosa ti questo tipo:
Codice 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&nbsp;&nbsp;</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>";
Thedarkita ora è in linea   Rispondi citando
Vecchio 18-03-10, 15:09   #15 (permalink)
User
 
L'avatar di Sovietiko
 
Data di registrazione: Jul 2005
Ubicazione: Vimodrone
Messaggi: 251
Ciao Thedarkita,

Non trova risultati.

stampa: Non ci sono messaggi da parte dei tuoi amici!
__________________
Admin e Webmaster Del Sito WebEasyIT
Sovietiko non in linea   Rispondi citando
Rispondi


Strumenti di discussione

Regole di scrittura
Non puoi postare nuove discussioni
Non puoi rispondere alle discussioni
Non puoi allegare file
Non puoi editare i tuoi post

BB code is Attivo
smilies è Attivo
[IMG] il codice è Attivo
Il codice HTML è Disattivato
Trackbacks are Attivo
Pingbacks are Attivo
Refbacks are Disattivato
Vai al forum



Tutti gli orari sono GMT +3. Attualmente sono le 15:26.




Forum GT - © 2004-2009 GT idea S.r.l P.iva 02418200800 - Privacy/Disclaimer

SEO by vBSEO 3.2.0 ©2008, Crawlability, Inc.