bacheca interazione tra utenti stile facebook ...

searedone

Utente Attivo
11 Giu 2010
508
0
0
Ciao a tutti.

Ho fatto un adnìmin dove gli amici utenti ecc possono interagire o vedere post tra loro solo se amici.

Funziona tutto ...

Ora il problema è questo:

in myprofile si vedono solo i miei post ecc ecc e così ok

io vorrei fare una bacheca dove solo chi è amico può' vedere i post di chi scrive.....

ho provato così ma mi da solo i miei post e non quelli degli utenti che sono amici ...

PHP:
<?php 
include 'dbc.php';
page_protect();


?>
<html>
<head>
<title>My Account</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

<link href="styles.css" rel="stylesheet" type="text/css">
</head>

<body>
<table width="100%" border="0" cellspacing="0" cellpadding="5" class="main">
  <tr> 
    <td colspan="3">&nbsp;</td>
  </tr>
  <tr> 
    <td width="160" valign="top">
<?php 
/*********************** MYACCOUNT MENU ****************************
This code shows my account menu only to logged in users. 
Copy this code till END and place it in a new html or php where
you want to show myaccount options. This is only visible to logged in users
*******************************************************************/
if (isset($_SESSION['user_id'])) {?>
<div class="myaccount">
  <p><strong>My Account</strong></p>
  <a href="myaccount.php">My Account</a><br>
  <a href="mysettings.php">Settings</a><br>
    <a href="logout.php">Logout </a>
	
  <p>You can add more links here for users</p></div>
<?php }
if (checkAdmin()) {
/*******************************END**************************/
?>
      <p> <a href="admin.php">Admin CP </a></p>
	  <?php } ?>
      <p>&nbsp;</p>
      <p>&nbsp;</p>
      <p>&nbsp;</p></td>
    <td width="732" valign="top"><p>&nbsp;</p>
      <h3 class="titlehdr">Welcome <?php echo $_SESSION['user_name'];?></h3>  
	  <?php	
      if (isset($_GET['msg'])) {
	  echo "<div class=\"error\">$_GET[msg]</div>";
	  }
	  	  
	  ?>
      <p>This is the my account page</p>
      

  
   <?php echo $_SESSION['user_id'];?>

<br />
<br />
<br />
<?php
$obj_id=$_GET['id'];

$jokelist = @mysql_query( 

    'SELECT * 
    FROM annunci, users, relationship WHERE user_id='.$_SESSION['user_id'].'  AND relationship.amico="S" AND user_id=users.id  '); 
if (!$jokelist) { 
  exit('<p>Error performing query: ' . mysql_error() . '</p>'); 
} 

while ($joke = mysql_fetch_array($jokelist)) { 


$user_id = $joke['user_id'];    
$user_name = $joke['user_name'];
$commento = $joke['commento'];


echo "$user_name<br /><br />"; 

 echo "$commento<br /><br />"; 
 
 } 




?>


      </td>
    <td width="196" valign="top">&nbsp;</td>
  </tr>
  <tr> 
    <td colspan="3">&nbsp;</td>
  </tr>
</table>

</body>
</html>

la tabella relationship contiene tre campi ( uno user_! uno user_2 e il campo amico è un campo enum con N di default mentre se divento amico il campo e S ...

Ho provato con varie join ma mi da sempre e solo i miei post e non quelli di tutti i miei amici :(
 
Prova così:
Codice:
SELECT * FROM posts WHERE author_id = 'id_utente' OR author_id IN (SELECT user_1 FROM relationships WHERE user_2 = 'id_utente') OR author_id IN (SELECT user_2 FROM relationships WHERE user_1 = 'id_utente')
Dovrebbe funzionare, però non so quanto sia performante.
 
Ultima modifica:
Ciao ,
mi da questo errore

Error performing query: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

ti posto tutto il codice ho modificato dei campi perché : id_utente è user_id author_id penso sia sempre user_id nella mia tabella

tra l'altro nella tabella relationship c'è il campo amico ( enum di default N se accetti amicizia S )

Noto che nella select non c'è ....
PHP:
<?php 
include 'dbc.php';
page_protect();


?>
<html>
<head>
<title>My Account</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

<link href="styles.css" rel="stylesheet" type="text/css">
</head>

<body>
<table width="100%" border="0" cellspacing="0" cellpadding="5" class="main">
  <tr> 
    <td colspan="3">&nbsp;</td>
  </tr>
  <tr> 
    <td width="160" valign="top">
<?php 
/*********************** MYACCOUNT MENU ****************************
This code shows my account menu only to logged in users. 
Copy this code till END and place it in a new html or php where
you want to show myaccount options. This is only visible to logged in users
*******************************************************************/
if (isset($_SESSION['user_id'])) {?>
<div class="myaccount">
  <p><strong>My Account</strong></p>
  <a href="myaccount.php">My Account</a><br>
  <a href="mysettings.php">Settings</a><br>
    <a href="logout.php">Logout </a>
	
  <p>You can add more links here for users</p></div>
<?php }
if (checkAdmin()) {
/*******************************END**************************/
?>
      <p> <a href="admin.php">Admin CP </a></p>
	  <?php } ?>
      <p>&nbsp;</p>
      <p>&nbsp;</p>
      <p>&nbsp;</p></td>
    <td width="732" valign="top"><p>&nbsp;</p>
      <h3 class="titlehdr">Welcome <?php echo $_SESSION['user_name'];?></h3>  
	  <?php	
      if (isset($_GET['msg'])) {
	  echo "<div class=\"error\">$_GET[msg]</div>";
	  }
	  	  
	  ?>
      <p>This is the my account page</p>
      

  
   <?php echo $_SESSION['user_id'];?>

<br />
<br />
<br />
<?php
$obj_id=$_GET['id'];

$jokelist = @mysql_query( 

    "SELECT * FROM annunci WHERE id = 'user_id' OR id IN (SELECT user_1 FROM relationships WHERE user_2 = 'user_id') OR user_id IN (SELECT user_2 FROM relationships WHERE user_1 = 'user_id' "); 
if (!$jokelist) { 
  exit('<p>Error performing query: ' . mysql_error() . '</p>'); 
} 

while ($joke = mysql_fetch_array($jokelist)) { 


$user_id = $joke['user_id'];    
$user_name = $joke['user_name'];
$commento = $joke['commento'];


echo "$user_name<br /><br />"; 

 echo "$commento<br /><br />"; 
 
 } 




?>


      </td>
    <td width="196" valign="top">&nbsp;</td>
  </tr>
  <tr> 
    <td colspan="3">&nbsp;</td>
  </tr>
</table>

</body>
</html>
 
ciao
prova
1. a togliere quella @
2. separa la query e metti un var dump

mi sembra che tu abbia interpretato male quello che ti ha detto alex
PHP:
//...
$query =  "SELECT * FROM annunci WHERE id = 'user_id' OR id IN (SELECT user_1 FROM relationships WHERE user_2 = 'user_id') OR user_id IN (SELECT user_2 FROM relationships WHERE user_1 = 'user_id' )";
var_dump($query); 
$jokelist =mysql_query($query);
//...
e prova a vedere cosa ti da il var dump

dimenticavo nella query che hai scritto tu
$jokelist =@mysql_query(ecc.....
prova a contare le parentesi aperte e chiuse
 
Ultima modifica:
In che senso ho frainteso ?? :(

cmq mi restituisce questo ..


string(184) "SELECT * FROM annunci WHERE id = 'user_id' OR id IN (SELECT user_1 FROM relationship WHERE user_2 = 'user_id') OR user_id IN (SELECT user_2 FROM relationship WHERE user_1 = 'user_id' )
 
ciao
a meno che mi sbagli, per caso nella tua tabella hai (es.) un campo user_2 che ha come valore 'user_id'? oppure (l'id generalmente) è un valore numerico intero? cioè non dovrebbe essere user_2 = 3333? e questo anche per gli altri id?
la tua select sta cercano dei record contenenti 'user_id'.
probabilnmente hai frainteso in quanto alex voleva dire che dovevi mettere il valore da cercare, che, sempre non vada errato, dovrebbe essere
il valore di $_SESSION['user_id'];
 
Ciao @ Borgo @alex

Intanto grazie mille per la pazienza :)

vi posto il codice ( magari puo' aiutarci a capire come funziona user_1 e user_2 amico S )

PHP:
<?php   
 require ('db_connect.php');   



//GRAZIE MILLEEEEEEEE 

 $query="SELECT * FROM relationship WHERE user_2 =".$_SESSION['user_id']." AND amico='N'";    
    $ris=mysql_query($query);    
    $richieste=mysql_num_rows($ris);// verifiche che ci siano richieste    
    if($richieste==0){    
        echo "non hai richieste di amicizia";    
    }else{    
           
        while($riga=mysql_fetch_array($ris)){    
            $rich=$riga['user_1'];  
            $query_ut=mysql_query("SELECT * FROM users WHERE id=$rich");//non so come si chiama esattamente il campo id in user  
            //verifica e correggi eventualmente  
            $riga_ut=mysql_fetch_array($query_ut);  
            echo "hai $richieste richieste dai seguenti utenti:<br>";    
            echo " ".$riga_ut['full_name']." accetti? ";    
            echo "<a href=\"accettazione.php?user_1=$rich&acc=S\">SI</a>";    
            echo " <a href=\"accettazione.php?user_1=$rich&acc=N\">NO</a><br>";    
        }    
    }    
//ecc..  
?>

Questa è la pagina accetta.php, poi ovvio il tutto viene rimandato alla pagina accettazione che mi trasforma l'amicizia da N a S n caso di accettazione dell'amicizia.

Prima ancora di accetta.php c'è chiedi_amicizia.php che passa l'user_id di chi chiede l'amicizia, e l'id dell'user a cui chiedo l'amicizia.....

Se vi serve in serata vi posto tutto lo script completo....

borgo italia
ciao
a meno che mi sbagli, per caso nella tua tabella hai (es.) un campo user_2 che ha come valore 'user_id'? oppure (l'id generalmente) è un valore numerico intero? cioè non dovrebbe essere user_2 = 3333? e questo anche per gli altri id?
la tua select sta cercano dei record contenenti 'user_id'.
probabilnmente hai frainteso in quanto alex voleva dire che dovevi mettere il valore da cercare, che, sempre non vada errato, dovrebbe essere
il valore di $_SESSION['user_id'];

Come potete notare in user_1 passo l'id dell'utente a cui chiedo la richiesta, mentre in user_2 mi serve per passare il mio user_id ....

Ora infatti non capisco come devo fare a far si che la bacheca si popoli dei post degli utenti, ma sopratutto che nella bacheca possano vedere i post solo gli utenti che sono amici di paperino ecc ecc ....
 
Ultima modifica:
ciao
devi selezionare i commenti che risultano (in annunci) col tuo id oppure tutti quelli per cui in relationship sei inserito o in user_1 o in user_2 e che abbiano in campo 'amico' il valore S
devi mettere anche 'amico' perchè in relationship puoi trovare il tuo id, ma con l'amicizia che non è ancora stata ancora accettata

il tuo id è dato da
$_SESSION['user_id']
quindi la query diventa (trasformo la sessione in variabile per comodità di scrittura della query) e modifico un po' la query di alex

PHP:
//....
$id_u=$_SESSION['user_id'];
//qui farei una select leggermente diversa, se sbaglio alex è bene che corregga
$query="SELECT * FROM posts WHERE id_utente = '$id_u' OR id_utente IN (SELECT * FROM relationships WHERE (user_2 = '$id_u' OR user_1 = '$id_u') AND amico='S')";
//...
prova, come al solito: al massimo non funzia
 
Ciao Borgo,
infatti come puoi notare nel mio tentativo di select c'era il campo amico="S"

PHP:
$jokelist = @mysql_query(  

    "SELECT * FROM annunci WHERE id = 'user_id' OR id IN (SELECT user_1 FROM relationships WHERE user_2 = 'user_id') OR user_id IN (SELECT user_2 FROM relationships WHERE user_1 = 'user_id' ");

Questa sera provo con la tua SELECT che sicuramente funziona e ti so dire..

Grazie mille
 
L'unico problema (che è il motivo per cui ho creato due query) è che MySQL non sa quale campo usare di quelli recuperati dalla tabella nella condizione IN.
Codice:
SELECT * FROM posts AS p WHERE p.author_id = 'id_utente' OR p.author_id IN (SELECT user_1 FROM relationships AS r WHERE r.user_2 = 'id_utente' AND r.amico = 'S') OR p.author_id IN (SELECT user_2 FROM relationships AS r WHERE r.user_1 = 'id_utente' AND r.amico = 'S')
Ovviamente devi sostituire id_utente con la variabile che contiene l'ID dell'utente loggato.
 
Ok appena arrivo a casa da lavoro provo ...

solo due curiosità ...


PHP:
SELECT * FROM posts AS p WHERE p.author_id = 'id_utente' OR p.author_id IN (SELECT user_1 FROM relationships AS r WHERE r.user_2 = 'id_utente' AND r.amico = 'S') OR p.author_id IN (SELECT user_2 FROM relationships AS r WHERE r.user_1 = 'id_utente' AND r.amico = 'S')

Allora sostituisco id_utente con user_id, posts con annunci ma fammi capire p.authot_id con cosa lo sostituisco ??? io non ho author_id ???? o meglio devo sempre sostituire questo campo con user_id e vale in poche parole sia per user_1 e user_2 ??

Scusa Alex ma sono ancora un provetto :(
 
Ragazzi nada non mi da' risultati :( uffaaaaa

Posto il codice magari ho fatto qualche errore...

PHP:
  <?php echo $_SESSION['user_id'];?>

<br />
<br />
<br />
<?php


$jokelist = @mysql_query(" SELECT * FROM annunci AS p WHERE p.author_id = 'user_id' OR p.author_id IN (SELECT user_1 FROM relationship AS r WHERE r.user_2 = 'user_id' AND r.amico = 'S') OR p.author_id IN (SELECT user_2 FROM relationship AS r WHERE r.user_1 = 'user_id' AND r.amico = 'S')" ) ; 




while ($joke = mysql_fetch_array($jokelist)) { 


$user_id = $joke['user_id'];    
$user_name = $joke['user_name'];
$commento = $joke['commento'];


echo "$user_name<br /><br />"; 

 echo "$commento<br /><br />"; 
 
 } 




?>
 
ciao
PHP:
//....
$id_u=$_SESSION['user_id']; //come detto per scrivere con comodo
$query="SELECT * FROM annunci AS p WHERE p.id_utente = '$id_u' OR p.id_utente IN (SELECT user_1 FROM relationships AS r WHERE r.user_2 = '$id_u' AND r.amico = 'S') OR p.id_utente IN (SELECT user_2 FROM relationships AS r WHERE r.user_1 = '$id_u' AND r.amico = 'S')";
//....
come aveva detto alex
Ovviamente devi sostituire 'id_utente' con la variabile che contiene l'ID dell'utente loggato.
 
ciao
scusa non ho capito esattamente cosa intendi.
ho messo
$id_u=$_SESSION['user_id'];
per non dover stare a scrivere
$query="SELECT * FROM annunci AS p WHERE p.id_utente = '".$_SESSION['user_id']."' ecc...
 
searedone, user_id è una stringa. Quindi la query cercherà gli annunci dell'utente con ID user_id e dei suoi amici. $id_u è una variabile, quindi la query cercherà gli annunci dell'utente con ID pari al valore di $id_u (quindi l'ID dell'utente corrente) e dei suoi amici.
 
Ragazzzi scusamente ma non c sto a capi più nulla.....

Ovviamente devi sostituire 'id_utente' con la variabile che contiene l'ID dell'utente loggato.
Tutti e due mi scrivete questo ....

e io stupidamente o non so ho modificato tutti i campi dove voi scrivete id_utente .....

PHP:
$id_u=$_SESSION['user_id']; //come detto per scrivere con comodo 
$query="SELECT * FROM annunci AS p WHERE p.user_id = '$id_u' OR p.user_id IN (SELECT user_1 FROM relationships AS r WHERE r.user_2 = '$id_u' AND r.amico = 'S') OR p.id_utente IN (SELECT user_2 FROM relationships AS r WHERE r.user_1 = '$id_u' AND r.amico = 'S')";

Post originale

$id_u=$_SESSION['user_id']; //come detto per scrivere con comodo
$query="SELECT * FROM annunci AS p WHERE p.id_utente = '$id_u' OR p.id_utente IN (SELECT user_1 FROM relationships AS r WHERE r.user_2 = '$id_u' AND r.amico = 'S') OR p.id_utente IN (SELECT user_2 FROM relationships AS r WHERE r.user_1 = '$id_u' AND r.amico = 'S')";

Ok capito che id_u passa la variabile user_id , ma poi con la menzione del QUOTE ho pensato che dovevo modificare ....

e cmq non funziona ne così ne coli ... uffa :(
 

Discussioni simili