Aggiungi amico
Aggiungi amico postato il 21/02/2015 13:16:15 nel forum programmazione, open source e hosting
Salve a tutti,
ho appena implementato una funzione filo-social, nel senso che ogni PG potrà avere una lista di amici che aggiunge personalmente, i quali avranno dei privilegi particolari nel visualizzare determinate sue caratteristiche (background personale, etc.)
Ho fatto in modo che il pulsante 'aggiungi amico' venisse visto solamente SE non sei tra gli amici di chi sta visualizzando e SE non è la tua scheda, attraverso questo codice:
<?php
$query3="SELECT clgpersonaggioamici.personaggio, clgpersonaggioamici.amico FROM clgpersonaggioamici WHERE clgpersonaggioamici.personaggio = '".$_SESSION['login']."'";
$result3=gdrcd_query($query3, 'result');
$record3=gdrcd_query($result3, 'fetch');
if(($_SESSION['login']==$_REQUEST['pg'])||($_REQUEST['pg']== $record3['amico'])) {} else { ?>
<form action="popup.php?page=scheda" method="post">
<input type="hidden" value="aggiungi"
name="op" />
<input type="hidden" value="<?php echo $record['amico']; ?>"
name="amico" />
<input type="submit" value="Aggiungi come amico"/>
<input type="hidden"
value="<?php echo $_REQUEST['pg']; ?>"
name="pg" />
</form>
<?php } ?>
Il problema è che, probabilmente per ragioni ovvie a chi conosce bene il PHP, il primo controllo (sul fatto che sia già o meno amico del PG di cui si sta visualizzando la scheda) lo fa solo per il primo risultato. Per esempio, se ho 6 amici, il bottone non comparirà solamente per il primo amico che ho aggiunto, mentre continuerà a comparire per gli altri, anche se li ho già aggiunti.
Qualcuno può consigliarmi una maniera efficente per risolvere?
Pagine → 1
21/02/2015 15:22:48
Se hai una tabella clgpersonaggioamici
con il campo personaggio contenente il nome del personaggio che ha gli amici
e amico con il nome dell'amico non potresti fare una query del tipo:
<?php
$query3 = "SELECT clgpersonaggioamici.personaggio, clgpersonaggioamici.amico";
$query3 .= " FROM clgpersonaggioamici";
$query3 .= " WHERE clgpersonaggioamici.personaggio = '".gdrcd_filter('in',$_SESSION['login'])."' AND clgpersonaggioamici.amico = '".gdrcd_filter('get',$_REQUEST['pg'])."'";
$query3 .= " LIMIT 0,1";
$result3 = gdrcd_query($query3, 'result');
$record3 = gdrcd_query($result3, 'num_rows');
if(gdrcd_filter('in',$_SESSION['login']) != gdrcd_filter('get',$_REQUEST['pg']) && $record3 != 1)
{
?>
<form action="popup.php?page=scheda" method="post">
<?php
}
?>
La nuova query ti cerca se il pg loggato $_SESSION['login'] ha come amico il pg richiesto tramite $_REQUEST['pg'].
$record3 dovrebbe ritornare 0 se il pg non lo ha gia tra gli amici e 1 se llo ha gia tra gli amici
A quel punto se la scheda visualizzata è diversa da quella del pg loggato (ho usato su entrambe la funzione di filter perchè in caso la land permetta nomi con ' potrebbero non risultare uguali) e il pg non sia tra la lista degli amici visualizza il pulsante.
Non ho potuto testare ovviamente tutto il codice quindi non mi assumo responsabilità di errori di sintassi, però il metodo dovrebbe essere valido
21/02/2015 16:45:31
Ho fatto la stessa cosa, con la differenza che alla fine ho utilizzato un mysql_num_rows per contare i risultati, ma poco conta.
Comunque sì, funziona c:
21/02/2015 18:13:13
Altro problema:
$query="SELECT clgpersonaggioamici.personaggio, clgpersonaggioamici.amico, clgpersonaggioamici.commento, personaggio.nome, personaggio.url_img_chat FROM clgpersonaggioamici LEFT JOIN personaggio ON clgpersonaggioamici.personaggio=personaggio.nome WHERE personaggio.nome = '".gdrcd_filter('in',$_REQUEST['pg'])."' ORDER BY clgpersonaggioamici.personaggio DESC";
$result=gdrcd_query($query, 'result');
while ($record=gdrcd_query($result, 'fetch'))
{
Sto usando questo per stampare la lista degli amici.
Il punto è che quando vado a stampare l'immagine degli amici del personaggio, mi stampa l'immagine del personaggio ad ognuno perchè ovviamente nella query io faccio riferimento a $pg e non ad 'amico'.
Non posso però far riferimento a due cose insieme.
Come risolvere il problema?
22/02/2015 09:41:01
Hai più possibilità per farlo. Quella più semplice è fare una seconda query dentro il ciclo while: select immagine amico da personaggi bla bla
22/02/2015 10:00:38 e modificato da mr_jakhal il 22/02/2015 12:13:56
Bene, mi si presenta un problema simile nel momento in cui vado a fare la verifica 'amicizia'; quando un PG deve visualizzare il BG di un altro, si fa appunto questo controllo per vedere se è autorizzato a guardarlo, quindi se è 'amico'.
Per farlo ho inserito questo prima del BG
$query2="SELECT clgpersonaggioamici.personaggio, clgpersonaggioamici.amico FROM clgpersonaggioamici WHERE clgpersonaggioamici.personaggio = '".$_SESSION['login']."'";
$result2=gdrcd_query($query2, 'result');
$record2=gdrcd_query($result2, 'fetch');
while ($record2=gdrcd_query($result2, 'fetch'))
{
if((gdrcd_filter('out',$record2['amico'])==gdrcd_filter('out',$_REQUEST['pg'])) || ($_REQUEST['pg']==$_SESSION['login'])) {
Funziona in linea di massima, tranne che con l'ultimo amico che aggiungo. Se aggiungo X come amico non posso vedere il suo BG, ma del resto dei miei amici sì. Se poi aggiungo Y, potrò vedere quello di X ma non vedrò quello di Y perchè è l'ultimo che ho aggiunto.
Chi mi spiega il motivo di questa stranezza?
Discussione seguita da
Pagine → 1
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
Seconda Era ↗
Exclusive Villa GdR ↗
War Thunder ↗
Neverness to Everness ↗
CRSED: F.O.A.D. ↗
Fallen Gods ↗