Problemi estrazione username

searedone

Utente Attivo
11 Giu 2010
508
0
0
buonasera a tutti, spero che tra di voi qualcuno possa darmi una mano
perché non so più dove sbattere la testa ;(

Ho una classe che vi posto due script mi dovrebbero restituire il messaggio con la foto e ok, ma non mi restituisce l'username ma l'id e l'username non mi viene fuori...

Spero davvero che qualcuno mi illumini o mi dica cosa sbaglio .

Classe functions

PHP:
<?php

class Wall_Updates {


    
     // Updates   	
	  public function Updates($uid) 
	{
	
	
		 $query = mysql_query("SELECT M.msg_id, M.uid_fk, M.message, M.created FROM messages M  WHERE M.uid_fk='$uid' OR M.uid_fk IN  (SELECT u.username FROM users AS u WHERE u.uid = u.uid AND u.uid = u.username )  OR M.uid_fk IN (SELECT user_1 FROM relationship AS r WHERE r.user_2 = '$uid' AND r.amico = 'S')  OR M.uid_fk IN  (SELECT user_2 FROM relationship AS r WHERE r.user_1 = '$uid' AND r.amico = 'S') order by M.msg_id desc  ") or die(mysql_error());     
		 while($row=mysql_fetch_array($query))
		$data[]=$row;
	    return $data;
		
    }
	//Comments
	   public function Comments($msg_id) 
	{
	    $query = mysql_query("SELECT C.com_id, C.uid_fk, C.comment, C.created, U.username FROM comments C, users U WHERE C.uid_fk=U.uid and C.msg_id_fk='$msg_id' order by C.com_id asc ") or die(mysql_error());
	   while($row=mysql_fetch_array($query))
	    $data[]=$row;
        if(!empty($data))
		{
       return $data;
         }
	}
	
	//Avatar Image
	public function Gravatar($uid) 
	{
	    $query = mysql_query("SELECT nome_file_vero FROM `users` WHERE uid='$uid'") or die(mysql_error());
	   $row=mysql_fetch_array($query);
	   if(!empty($row))
	   {
	    $email=$row['email'];
	    $nome_file_vero=$row['nome_file_vero'];
        $lowercase = strtolower(nome_file_vero);
        $nome_file_vero = md5( $lowercase );
		$data="http://www.gravatar.com/avatar.php?gravatar_id=$imagecode";
		return $data;
         }
		 else
		 {
		 $data="default.jpg";
		return $data;
		 }
	}
	
	//Insert Update
	public function Insert_Update($uid, $update) 
	{
	$update=htmlentities($update);
	   $time=time();
	   $ip=$_SERVER['REMOTE_ADDR'];
        $query = mysql_query("SELECT msg_id,message FROM `messages` WHERE uid_fk='$uid' order by msg_id desc limit 1") or die(mysql_error());
        $result = mysql_fetch_array($query);
		
        if ($update!=$result['message']) {
            $query = mysql_query("INSERT INTO `messages` (message, uid_fk, ip,created) VALUES ('$update', '$uid', '$ip','$time')") or die(mysql_error());
            $newquery = mysql_query("SELECT M.msg_id, M.uid_fk, M.message, M.created, U.username FROM messages M, users U where M.uid_fk=U.uid and M.uid_fk='$uid' order by M.msg_id desc limit 1 ");
            $result = mysql_fetch_array($newquery);
			 return $result;
        } 
		else
		{
				 return false;
		}
		
       
    }
	
	//Delete update
		public function Delete_Update($uid, $msg_id) 
	{
	    $query = mysql_query("DELETE FROM `comments` WHERE msg_id_fk = '$msg_id' ") or die(mysql_error());
        $query = mysql_query("DELETE FROM `messages` WHERE msg_id = '$msg_id' and uid_fk='$uid'") or die(mysql_error());
        return true;
      	       
    }
	
	//Insert Comments
	public function Insert_Comment($uid,$msg_id,$comment) 
	{
	$comment=htmlentities($comment);
	   	    $time=time();
	   $ip=$_SERVER['REMOTE_ADDR'];
        $query = mysql_query("SELECT com_id,comment FROM `comments` WHERE uid_fk='$uid' and msg_id_fk='$msg_id' order by com_id desc limit 1 ") or die(mysql_error());
        $result = mysql_fetch_array($query);
    
		if ($comment!=$result['comment']) {
            $query = mysql_query("INSERT INTO `comments` (comment, uid_fk,msg_id_fk,ip,created) VALUES ('$comment', '$uid','$msg_id', '$ip','$time')") or die(mysql_error());
            $newquery = mysql_query("SELECT C.com_id, C.uid_fk, C.comment, C.msg_id_fk, C.created, U.username FROM comments C, users U where C.uid_fk=U.uid and C.uid_fk='$uid' and C.msg_id_fk='$msg_id' order by C.com_id desc limit 1 ");
            $result = mysql_fetch_array($newquery);
         
		   return $result;
        } 
		else
		{
		return false;
		}
       
    }
	
	//Delete Comments
		public function Delete_Comment($uid, $com_id) 
	{
	    $query = mysql_query("DELETE FROM `comments` WHERE uid_fk='$uid' and com_id='$com_id'") or die(mysql_error());
        return true;
      	       
    }

    

}

?>

La query incriminata

PHP:
     // Updates   	
	  public function Updates($uid) 
	{
	
	
		 $query = mysql_query("SELECT M.msg_id, M.uid_fk, M.message, M.created FROM messages M  WHERE M.uid_fk='$uid' OR M.uid_fk IN  (SELECT u.username FROM users AS u WHERE u.uid = u.uid AND u.uid = u.username )  OR M.uid_fk IN (SELECT user_1 FROM relationship AS r WHERE r.user_2 = '$uid' AND r.amico = 'S')  OR M.uid_fk IN  (SELECT user_2 FROM relationship AS r WHERE r.user_1 = '$uid' AND r.amico = 'S') order by M.msg_id desc  ") or die(mysql_error());     
		 while($row=mysql_fetch_array($query))
		$data[]=$row;
	    return $data;
		
    }

dove la recupero ..

Messages

PHP:
<?php

error_reporting(0);
include_once 'includes/db.php';

include_once 'includes/functions2.php';


include_once 'includes/tolink.php';
include_once 'includes/time_stamp.php';
include_once 'session.php';
$Wall = new Wall_Updates();
if(isSet($_POST['update']))
{
$update=$_POST['update'];
$data=$Wall->Insert_Update($uid,$update);

if($data)
{

$uid_fk=$_GET['uid'];
$uid_fk=$_GET['username'];
$msg_id=$data['msg_id'];
$message=tolink(htmlentities($data['message']));
$time=$data['created'];
$username=$data['uid_fk'];
$username=$data['username'];


$nome_file_vero=$data['nome_file_vero'];
$face=$Wall->Gravatar($uid);
//$commentsarray=$Wall->Comments($msg_id);
?>

<div class="stbody" id="stbody<?php echo $msg_id;?>">
<div class="stimg">
<img src="<?php echo $face;?>" class='big_face'/>

</div> 
<div class="sttext">
<a class="stdelete" href="#" id="<?php echo $msg_id;?>" title='Delete update'>X</a>
<b><?php echo $username ;?></b> <?php echo $message;?>


<div class="sttime"><?php time_stamp($time);?> | <a href='#' class='commentopen' id='<?php echo $msg_id;?>' title='Comment'>Comment </a></div> 
<div id="stexpandbox">
<div id="stexpand"></div>
</div>
<div class="commentcontainer" id="commentload<?php echo $msg_id;?>">
<?php// include('load_comments.php') ?>
</div>
<div class="commentupdate" style='display:none' id='commentbox<?php echo $msg_id;?>'>
<div class="stcommentimg">
<img src="<?php echo $face;?>" class='small_face'/>
</div> 
<div class="stcommenttext" >
<form method="post" action="">
<textarea name="comment" class="comment" maxlength="200"  id="ctextarea<?php echo $msg_id;?>"></textarea>
<br />
<input type="submit"  value=" Comment "  id="<?php echo $msg_id;?>" class="comment_button"/>
</form>
</div>
</div>
</div> 
</div>
<?php
}
}
?>

load_messages

PHP:
<?php

foreach($updatesarray as $data)
 {
 $msg_id=$data['msg_id'];
 $orimessage=$data['message'];
 $message=tolink(htmlentities($data['message']));
  $time=$data['created'];
   $username=$data['username'];
 $uid=$data['uid_fk'];
 $username=$data['uid_fk'];
 $face=$Wall->Gravatar($uid);
 $commentsarray=$Wall->Comments($msg_id);
?>

<script type="text/javascript"> 
$(document).ready(function(){$("#stexpand<?php echo $msg_id;?>").oembed("<?php echo  $orimessage; ?>",{maxWidth: 400, maxHeight: 300});});
</script>
<div class="stbody" id="stbody<?php echo $msg_id;?>">

<div class="stimg">
<img src="<?php echo $face;?>" class='big_face'/>
</div> 
<div class="sttext">
<a class="stdelete" href="#" id="<?php echo $msg_id;?>" title="Delete update">X</a>
<b><?php echo $username;?></b> <?php echo $message;?>
<div class="sttime"><?php time_stamp($time);?> | <a href='#' class='commentopen' id='<?php echo $msg_id;?>' title='Comment'>Comment </a></div> 

<div id="stexpandbox">
<div id="stexpand<?php echo $msg_id;?>"></div>
</div>

<div class="commentcontainer" id="commentload<?php echo $msg_id;?>">


<?php include('load_comments.php') ?>





</div>
<div class="commentupdate" style='display:none' id='commentbox<?php echo $msg_id;?>'>
<div class="stcommentimg">
<img src="<?php echo $face;?>" class='small_face'/>
</div> 
<div class="stcommenttext" >
<form method="post" action="">

<textarea name="comment" class="comment" maxlength="200"  id="ctextarea<?php echo $msg_id;?>"></textarea>
<br />
<input type="submit"  value=" Comment "  id="<?php echo $msg_id;?>" class="comment_button"/>
</form>


</div>
</div>


</div> 

</div>


<?php

  }
?>
 
Ultima modifica:
ciao
scusa ma non è semplice, almeno per me, verificare la query senza avere il db, però ad una prima occhiata ho notato una cosa che non mi quadra.
non nella query, ma nello scripi che tu hai chiamato messages.
nel punto che ho indicato con //******** attibuisci alla stessa variabile prima un valore e subito dopo un altro, sei sicuro che debba esser così?
cioè a che ti serve attribirle un primo valore per poi immediatamente cambiarlo?

PHP:
//.....
if($data)
{
$uid_fk=$_GET['uid'];
$uid_fk=$_GET['username'];
$msg_id=$data['msg_id'];
$message=tolink(htmlentities($data['message']));
$time=$data['created'];
$username=$data['uid_fk'];//*******
$username=$data['username'];//*******
//....
 
Lo stesso errore si presenta in precedenza per la variabile $uid_fk, secondo me è solo un problema di digitazione.
 
ciao eliox
quello non l'avevo notato, però più che di digitazione secondo me è un errore di copia/incolla:vampiro:
comunque se le due variabili servono, così come sono una delle due non serve a nulla
 
Ciao,
ti posto i db

Users

PHP:
CREATE TABLE IF NOT EXISTS `users` (
  `uid` bigint(20) NOT NULL AUTO_INCREMENT,
  `md5_id` varchar(200) COLLATE latin1_general_ci NOT NULL DEFAULT '',
  `full_name` tinytext COLLATE latin1_general_ci NOT NULL,
  `username` varchar(200) COLLATE latin1_general_ci NOT NULL DEFAULT '',
  `user_email` varchar(220) COLLATE latin1_general_ci NOT NULL DEFAULT '',
  `email` varchar(100) COLLATE latin1_general_ci NOT NULL,
  `user_level` tinyint(4) NOT NULL DEFAULT '1',
  `pwd` varchar(220) COLLATE latin1_general_ci NOT NULL DEFAULT '',
  `address` text COLLATE latin1_general_ci NOT NULL,
  `country` varchar(200) COLLATE latin1_general_ci NOT NULL DEFAULT '',
  `tel` varchar(200) COLLATE latin1_general_ci NOT NULL DEFAULT '',
  `fax` varchar(200) COLLATE latin1_general_ci NOT NULL DEFAULT '',
  `website` text COLLATE latin1_general_ci NOT NULL,
  `date` date NOT NULL DEFAULT '0000-00-00',
  `users_ip` varchar(200) COLLATE latin1_general_ci NOT NULL DEFAULT '',
  `approved` int(1) NOT NULL DEFAULT '0',
  `activation_code` int(10) NOT NULL DEFAULT '0',
  `banned` int(1) NOT NULL DEFAULT '0',
  `ckey` varchar(220) COLLATE latin1_general_ci NOT NULL DEFAULT '',
  `ctime` varchar(220) COLLATE latin1_general_ci NOT NULL DEFAULT '',
  `nome_file_vero` varchar(255) COLLATE latin1_general_ci NOT NULL,
  `tipo_file` varchar(255) COLLATE latin1_general_ci NOT NULL,
  `dati_file` longblob NOT NULL,
  PRIMARY KEY (`uid`),
  UNIQUE KEY `user_email` (`user_email`),
  FULLTEXT KEY `idx_search` (`full_name`,`address`,`user_email`,`username`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=66 ;

Messages

PHP:
CREATE TABLE IF NOT EXISTS `messages` (
  `msg_id` int(11) NOT NULL AUTO_INCREMENT,
  `message` varchar(200) DEFAULT NULL,
  `uid_fk` int(11) DEFAULT NULL,
  `ip` varchar(30) DEFAULT NULL,
  `created` int(11) DEFAULT '1269249260',
  PRIMARY KEY (`msg_id`),
  KEY `uid_fk` (`uid_fk`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=274 ;

Tabella relationship

PHP:
CREATE TABLE IF NOT EXISTS `relationship` (
`id` int(10) NOT NULL auto_increment,
`user_1` varchar(10) NOT NULL,
`user_2` varchar(10) NOT NULL,
`amico` enum('S','N') NOT NULL default 'N',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=76 ;

@ELLiox
@Borgo

Avete ragione per :
PHP:
$uid_fk=$_GET['uid']; 
$uid_fk=$_GET['username'];

scusate ma prova e riprova mi sono dimenticato di levare

PHP:
$uid_fk=$_GET['username'];

questa cosa mi sta rincoglionendo .. non riesco ad uscirne .. ;(
 
ciao
hai corretto anche
$username=$data['uid_fk'];
$username=$data['username'];
?
poi intendevo "non ho il db" che non ha i dati, comunque provo a darci un occhio poi spero ti saperti dire, intanto prova a dividere la query e mettere i soliti var_dump alla query incriminata
PHP:
//....
$query_str = "SELECT M.msg_id, M.uid_fk, M.message, M.created FROM messages M  WHERE M.uid_fk='$uid' OR M.uid_fk IN  (SELECT u.username FROM users AS u WHERE u.uid = u.uid AND u.uid = u.username )  OR M.uid_fk IN (SELECT user_1 FROM relationship AS r WHERE r.user_2 = '$uid' AND r.amico = 'S')  OR M.uid_fk IN  (SELECT user_2 FROM relationship AS r WHERE r.user_1 = '$uid' AND r.amico = 'S') order by M.msg_id desc  ";
var_dump($query_str );
$query=mysql:query( $query_str);
var_dump($query);
//...
e verifica i risultati
 
si siiiiii

corretto ma mi esce l'id dell'users ma non l'username :(

e cmq il problema sta qui .... infatti se qui modifico username in uid mi esce l'id dell'users, se metto username non viene fuori nulla :(

PHP:
<?php 

foreach($updatesarray as $data) 
 { 
 $msg_id=$data['msg_id']; 
 $orimessage=$data['message']; 
 $message=tolink(htmlentities($data['message'])); 
  $time=$data['created']; 
   $username=$data['username']; 
 $uid=$data['uid_fk']; 
 
 
 $face=$Wall->Gravatar($uid); 
 $commentsarray=$Wall->Comments($msg_id); 
?> 

<script type="text/javascript">  
$(document).ready(function(){$("#stexpand<?php echo $msg_id;?>").oembed("<?php echo  $orimessage; ?>",{maxWidth: 400, maxHeight: 300});}); 
</script> 
<div class="stbody" id="stbody<?php echo $msg_id;?>"> 

<div class="stimg"> 
<img src="<?php echo $face;?>" class='big_face'/> 
</div>  
<div class="sttext"> 
<a class="stdelete" href="#" id="<?php echo $msg_id;?>" title="Delete update">X</a> 
<b><?php echo $username;?></b> <?php echo $message;?> 
<div class="sttime"><?php time_stamp($time);?> | <a href='#' class='commentopen' id='<?php echo $msg_id;?>' title='Comment'>Comment </a></div>  

<div id="stexpandbox"> 
<div id="stexpand<?php echo $msg_id;?>"></div> 
</div> 

<div class="commentcontainer" id="commentload<?php echo $msg_id;?>"> 


<?php include('load_comments.php') ?> 





</div> 
<div class="commentupdate" style='display:none' id='commentbox<?php echo $msg_id;?>'> 
<div class="stcommentimg"> 
<img src="<?php echo $face;?>" class='small_face'/> 
</div>  
<div class="stcommenttext" > 
<form method="post" action=""> 

<textarea name="comment" class="comment" maxlength="200"  id="ctextarea<?php echo $msg_id;?>"></textarea> 
<br /> 
<input type="submit"  value=" Comment "  id="<?php echo $msg_id;?>" class="comment_button"/> 
</form> 


</div> 
</div> 


</div>  

</div> 


<?php 

  } 
?>
 
ciao
secondo me, ma può darsi che mi sbagli (probabile), mi sembra logico che non ti dia l'user, stai facendo un'interrogazione sulla tabella messaggi (con vari WHERE), ma in tabella messaggi non c'è l'user.
cioe non stai facendo una join ma una semplice select in cui una parte del where è funzione di quanto c'e nelle altre tabelle, ma non estrai il valore che ti interessa.
poi (anche se non amo le join e similiaria) mi sembra che manchi un AS
...M.created FROM messages AS M...
intanto prova a mettere quell'AS
 
Provato così ma niente ...

PHP:
// Updates       
      public function Updates($uid) 
    {
    
    
         $query = mysql_query("SELECT M.msg_id, M.uid_fk, M.message, M.created FROM messages M  WHERE M.uid_fk='$uid' OR M.uid_fk IN  (SELECT u.username FROM users AS u WHERE u.uid = u.uid AND u.uid = u.username )  OR M.uid_fk IN (SELECT user_1 FROM relationship AS r WHERE r.user_2 = '$uid' AND r.amico = 'S')  OR M.uid_fk IN  (SELECT user_2 FROM relationship AS r WHERE r.user_1 = '$uid' AND r.amico = 'S') order by M.msg_id desc  ") or die(mysql_error());     
         while($row=mysql_fetch_array($query))
        $data[]=$row;
        return $data;
        
    }  
		
    }


secondo me, ma può darsi che mi sbagli (probabile), mi sembra logico che non ti dia l'user, stai facendo un'interrogazione sulla tabella messaggi (con vari WHERE), ma in tabella messaggi non c'è l'user.
cioe non stai facendo una join ma una semplice select in cui una parte del where è funzione di quanto c'e nelle altre tabelle, ma non estrai il valore che ti interessa.

In origine era questa la query : con U.username nel SELECT , users U nel from , e M.uid_fk=U.uid nel WHERE , ma se la lascio così e funziona mi ripete lo stesso messaggio postato per tutti
gli users registrati nella tabella users al posto di darmi solo quello della persona che l'ha postato ...

PHP:
// Updates   	
	  public function Updates($uid) 
	{
			 $query = mysql_query("SELECT M.msg_id, M.uid_fk, M.message, M.created, U.username FROM messages M, users U WHERE M.uid_fk=U.uid AND  M.uid_fk='$uid' OR M.uid_fk IN (SELECT user_1 FROM relationship AS r WHERE r.user_2 = '$uid' AND r.amico = 'S') OR M.uid_fk IN (SELECT user_2 FROM relationship AS r WHERE r.user_1 = '$uid' AND r.amico = 'S') order by M.msg_id desc  ") or die(mysql_error());     

	
		 while($row=mysql_fetch_array($query))
		$data[]=$row;
	    return $data;
		
    }


HO provato a mettere AS ma nada :( se faccio la seguente query mi da' il seguente errore

Qquery

PHP:
    // Updates   	
	  public function Updates($uid) 
	{
			 $query = mysql_query("SELECT M.msg_id, M.uid_fk, M.message, M.created, U.username FROM messages M AS users U WHERE M.uid_fk=U.uid AND  M.uid_fk='$uid' OR M.uid_fk IN (SELECT user_1 FROM relationship AS r WHERE r.user_2 = '$uid' AND r.amico = 'S') OR M.uid_fk IN (SELECT user_2 FROM relationship AS r WHERE r.user_1 = '$uid' AND r.amico = 'S') order by M.msg_id desc  ") or die(mysql_error());     

	
		 while($row=mysql_fetch_array($query))
		$data[]=$row;
	    return $data;
		
    }


errore

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 'AS users U WHERE M.uid_fk=U.uid AND M.uid_fk='54' OR M.uid_fk IN (SELECT user_1' at line 1
 
SCUSAAAA

Ho corretto così funziona ma se posto pizza con admin trovo al refresh

admin pizza
300 pizza
paparino pizza

ecco la query

PHP:
 // Updates   	
	  public function Updates($uid) 
	{
	
	
		 $query = mysql_query("SELECT M.msg_id, M.uid_fk, M.message, M.created, U.username FROM messages AS M, users AS U WHERE M.uid_fk=U.uid and  M.uid_fk='$uid' and M.uid_fk IN (SELECT user_1 FROM relationship AS r WHERE r.user_2 = '$uid' AND r.amico = 'S') OR M.uid_fk IN (SELECT user_2 FROM relationship AS r WHERE r.user_1 = '$uid' AND r.amico = 'S') order by M.msg_id desc  ") or die(mysql_error());     
		 while($row=mysql_fetch_array($query))
		$data[]=$row;
	    return $data;
		
    }
 
ciao
scusa una cosa,
while($row=mysql_fetch_array($query))
$data[]=$row;
return $data;

non vedo l'aperura e la chiusura delle parentesi graffe del while che tra l'altro dovendoti dare un unico record non servirebbe nemmeno.
ad es. se faccio una query con WHERE id=1 non serve fare il while il record è unico, il while mi serve quando es. WHERE nome='pinco' in quanto posso avere pià recordo che hanno pinco nel campo nome.
poi, secondo me, gli as ci vogliono su tutti i nomi delle tabelle su cui fai la join, se non fai user AS U certo che non trova U.username, es
SELECT * FROM pinco AS a, pallino AS b....
 
ciao
scusa una cosa, ma nella select fai
...(SELECT u.username FROM users AS u WHERE u.uid = u.uid AND u.uid = u.username )...
intanto u.uid = u.uid ?? sarebbe giusto (FORSE) se fosse u.uid = M.uid
poi
AND u.uid = u.username ??
quando nella tabella user
`uid` bigint(20) NOT NULL AUTO_INCREMENT, quindi un numero intero e
`username` varchar(200) COLLATE latin1_general_ci NOT NULL DEFAULT '', una stringa di caratteri
cioè confronti uid della tabella user con username sempre della tabella user (mi sembra un po' difficile che possano essere uguali)
secondo me ti conviene cancellare il tutto e ripartire (anche con un eventuale nuovo post perchè diventa difficile seguire il tutto), eventualmente con uno script a parte che poi (quando funzia) metterai in una classe
 
Ho corretto così ma niente

PHP:
class Wall_Updates {


    
     // Updates   	
	  public function Updates($uid) 
	{
	
	
		 $query = mysql_query("SELECT M.msg_id, M.uid_fk, M.message, M.created, U.username FROM messages AS M, users AS U WHERE U.uid=M.uid and  M.uid_fk='$uid' and M.uid_fk IN (SELECT user_1 FROM relationship AS r WHERE r.user_2 = '$uid' AND r.amico = 'S') OR M.uid_fk IN (SELECT user_2 FROM relationship AS r WHERE r.user_1 = '$uid' AND r.amico = 'S') order by M.msg_id desc  ") or die(mysql_error());     
		 while($row=mysql_fetch_array($query))
		$data[]=$row;
	    return $data;
		
    }

Cmq la query che funzionava correttamente era questa e andava ,,,

PHP:
class Wall_Updates {


    
     // Updates   	
	  public function Updates($uid) 
	{
	    $query = mysql_query("SELECT M.msg_id, M.uid_fk, M.message, M.created, U.username FROM messages M, users U  WHERE M.uid_fk=U.uid and M.uid_fk='$uid' order by M.msg_id desc ") or die(mysql_error());
         while($row=mysql_fetch_array($query))
		$data[]=$row;
	    return $data;
		
    }

io ho solo aggiunto:

PHP:
(SELECT user_1 FROM relationship AS r WHERE r.user_2 = '$uid' AND r.amico = 'S') OR M.uid_fk IN (SELECT user_2 FROM relationship AS r WHERE r.user_1 = '$uid' AND r.amico = 'S')

Per avere i posto solo degli amici di :(
 
ciao
sto andando un po' per tentativi e un po' con logica
non ti metto la querry dentro i tag php perchè così ti evidenzio le modifiche che proverei a portare alla query

"SELECT M.msg_id, M.uid_fk, M.message, M.created, U.username FROM messages AS M, users AS U WHERE U.uid=M.uid AND M.uid_fk='$uid'
AND (M.uid_fk IN (SELECT r.user_1 FROM relationship AS r WHERE r.user_2 = '$uid' AND r.amico = 'S')
OR M.uid_fk IN (SELECT s.user_2 FROM relationship AS s WHERE s.user_1 = '$uid' AND s.amico = 'S')) ORDER BY M.msg_id desc ";

prova, ttentativo più o tentativo meno, al massimo non funzia
 
Ciao,
così modificato leggermente il tuo funziona...

Ma pero' non mi prende più la distinzione degli amici di, quindi elimina la tabella relatioship ma è un inizio ..

PHP:
class Wall_Updates {


    
     // Updates   	
	  public function Updates($uid) 
	{
	
	
		 $query = mysql_query("SELECT M.msg_id, M.uid_fk, M.message, M.created, U.username FROM messages AS M, users AS U WHERE U.uid=M.uid_fk AND M.uid_fk='$uid'
AND (M.uid_fk IN (SELECT r.user_1 FROM relationship AS r WHERE r.user_2 = '$uid' AND r.amico = 'S') 
OR M.uid_fk IN (SELECT s.user_2 FROM relationship AS s WHERE s.user_1 = '$uid' AND s.amico = 'S')) ORDER BY M.msg_id desc ") or die(mysql_error());     
		 while($row=mysql_fetch_array($query))
		$data[]=$row;
	    return $data;
		
    }
 
Così invece funziona ma ripete i mex come nella foto che allego ....

PHP:
class Wall_Updates {


    
     // Updates   	
	  public function Updates($uid) 
	{
	
	
		 $query = mysql_query("SELECT M.msg_id, M.uid_fk, M.message, M.created, U.username FROM messages AS M, users AS U WHERE M.uid_fk = U.uid AND M.uid_fk='$uid'
OR (M.uid_fk IN (SELECT r.user_1 FROM relationship AS r WHERE r.user_2 = '$uid' AND r.amico = 'S') 
OR M.uid_fk IN (SELECT s.user_2 FROM relationship AS s WHERE s.user_1 = '$uid' AND s.amico = 'S'))  ORDER BY M.msg_id desc ") or die(mysql_error());     
		 while($row=mysql_fetch_array($query))
		$data[]=$row;
	    return $data;
		
    }

ishot-206.jpg
 
UFFAAAAAAAA NESSUNO RIESCE AD AIUTARMIIIIIIIIIIIIIIIII ......

Chiedo ad uno dei geni di questo sito di aiutarmi a risolvere il problema perché sto sclerosando da settimane ......

allora se la query la faccio così ottengo lo stesso risultato per tutti gli users come da immagine e non va bene ....

PHP:
<?php

class Wall_Updates {


    
     // Updates   	
	  public function Updates($uid) 
	{
	
	
		 $query = mysql_query("SELECT M.msg_id, M.uid_fk, M.message, M.created, U.username FROM messages AS M, users AS U WHERE M.uid_fk = U.uid AND M.uid_fk = M.created 
OR (M.uid_fk IN (SELECT r.user_1 FROM relationship AS r WHERE r.user_2 = '$uid' AND r.amico = 'S') 
OR M.uid_fk IN (SELECT s.user_2 FROM relationship AS s WHERE s.user_1 = '$uid' AND s.amico = 'S')) ORDER BY M.msg_id DESC ") or die(mysql_error());     
		 while($row=mysql_fetch_array($query))
		$data[]=$row;
	    return $data;
		
    }
	//Comments
	   public function Comments($msg_id) 
	{
	    $query = mysql_query("SELECT C.com_id, C.uid_fk, C.comment, C.created, U.username FROM comments C, users U WHERE C.uid_fk=U.uid and C.msg_id_fk='$msg_id' order by C.com_id asc ") or die(mysql_error());
	   while($row=mysql_fetch_array($query))
	    $data[]=$row;
        if(!empty($data))
		{
       return $data;
         }
	}
	
	//Avatar Image
	public function Gravatar($uid) 
	{
	    $query = mysql_query("SELECT nome_file_vero FROM `users` WHERE uid='$uid'") or die(mysql_error());
	   $row=mysql_fetch_array($query);
	   if(!empty($row))
	   {
	    $email=$row['email'];
	    $nome_file_vero=$row['nome_file_vero'];
        $lowercase = strtolower(nome_file_vero);
        $nome_file_vero = md5( $lowercase );
		$data="http://www.gravatar.com/avatar.php?gravatar_id=$imagecode";
		return $data;
         }
		 else
		 {
		 $data="default.jpg";
		return $data;
		 }
	}
	
	//Insert Update
	public function Insert_Update($uid, $update) 
	{
	$update=htmlentities($update);
	   $time=time();
	   $ip=$_SERVER['REMOTE_ADDR'];
        $query = mysql_query("SELECT msg_id,message FROM `messages` WHERE uid_fk='$uid' order by msg_id desc limit 1") or die(mysql_error());
        $result = mysql_fetch_array($query);
		
        if ($update!=$result['message']) {
            $query = mysql_query("INSERT INTO `messages` (message, uid_fk, ip,created) VALUES ('$update', '$uid', '$ip','$time')") or die(mysql_error());
            $newquery = mysql_query("SELECT M.msg_id, M.uid_fk, M.message, M.created, U.username FROM messages M, users U where M.uid_fk=U.uid and M.uid_fk='$uid' order by M.msg_id desc limit 1 ");
            $result = mysql_fetch_array($newquery);
			 return $result;
        } 
		else
		{
				 return false;
		}
		
       
    }
	
	//Delete update
		public function Delete_Update($uid, $msg_id) 
	{
	    $query = mysql_query("DELETE FROM `comments` WHERE msg_id_fk = '$msg_id' ") or die(mysql_error());
        $query = mysql_query("DELETE FROM `messages` WHERE msg_id = '$msg_id' and uid_fk='$uid'") or die(mysql_error());
        return true;
      	       
    }
	
	//Insert Comments
	public function Insert_Comment($uid,$msg_id,$comment) 
	{
	$comment=htmlentities($comment);
	   	    $time=time();
	   $ip=$_SERVER['REMOTE_ADDR'];
        $query = mysql_query("SELECT com_id,comment FROM `comments` WHERE uid_fk='$uid' and msg_id_fk='$msg_id' order by com_id desc limit 1 ") or die(mysql_error());
        $result = mysql_fetch_array($query);
    
		if ($comment!=$result['comment']) {
            $query = mysql_query("INSERT INTO `comments` (comment, uid_fk,msg_id_fk,ip,created) VALUES ('$comment', '$uid','$msg_id', '$ip','$time')") or die(mysql_error());
            $newquery = mysql_query("SELECT C.com_id, C.uid_fk, C.comment, C.msg_id_fk, C.created, U.username FROM comments C, users U where C.uid_fk=U.uid and C.uid_fk='$uid' and C.msg_id_fk='$msg_id' order by C.com_id desc limit 1 ");
            $result = mysql_fetch_array($newquery);
         
		   return $result;
        } 
		else
		{
		return false;
		}
       
    }
	
	//Delete Comments
		public function Delete_Comment($uid, $com_id) 
	{
	    $query = mysql_query("DELETE FROM `comments` WHERE uid_fk='$uid' and com_id='$com_id'") or die(mysql_error());
        return true;
      	       
    }

    

}

?>

ishot-206.jpg

se la faccio così funziona tutto perfettamente ma non riesco a recuperare $username dalla tabella users .....

PHP:
<?php

class Wall_Updates {


    
     // Updates   	
	  public function Updates($uid) 
	{
	
	
		 $query = mysql_query("SELECT M.msg_id, M.uid_fk, M.message, M.created FROM messages M WHERE   M.uid_fk='$uid' OR M.uid_fk IN (SELECT user_1 FROM relationship AS r WHERE r.user_2 = '$uid' AND r.amico = 'S') OR M.uid_fk IN (SELECT user_2 FROM relationship AS r WHERE r.user_1 = '$uid' AND r.amico = 'S') order by M.msg_id desc  ") or die(mysql_error());     
		 while($row=mysql_fetch_array($query))
		$data[]=$row;
	    return $data;
		
    }
	//Comments
	   public function Comments($msg_id) 
	{
	    $query = mysql_query("SELECT C.com_id, C.uid_fk, C.comment, C.created, U.username FROM comments C, users U WHERE C.uid_fk=U.uid and C.msg_id_fk='$msg_id' order by C.com_id asc ") or die(mysql_error());
	   while($row=mysql_fetch_array($query))
	    $data[]=$row;
        if(!empty($data))
		{
       return $data;
         }
	}
	
	//Avatar Image
	public function Gravatar($uid) 
	{
	    $query = mysql_query("SELECT nome_file_vero FROM `users` WHERE uid='$uid'") or die(mysql_error());
	   $row=mysql_fetch_array($query);
	   if(!empty($row))
	   {
	    $email=$row['email'];
	    $nome_file_vero=$row['nome_file_vero'];
        $lowercase = strtolower(nome_file_vero);
        $nome_file_vero = md5( $lowercase );
		$data="http://www.gravatar.com/avatar.php?gravatar_id=$imagecode";
		return $data;
         }
		 else
		 {
		 $data="default.jpg";
		return $data;
		 }
	}
	
	//Insert Update
	public function Insert_Update($uid, $update) 
	{
	$update=htmlentities($update);
	   $time=time();
	   $ip=$_SERVER['REMOTE_ADDR'];
        $query = mysql_query("SELECT msg_id,message FROM `messages` WHERE uid_fk='$uid' order by msg_id desc limit 1") or die(mysql_error());
        $result = mysql_fetch_array($query);
		
        if ($update!=$result['message']) {
            $query = mysql_query("INSERT INTO `messages` (message, uid_fk, ip,created) VALUES ('$update', '$uid', '$ip','$time')") or die(mysql_error());
            $newquery = mysql_query("SELECT M.msg_id, M.uid_fk, M.message, M.created, U.username FROM messages M, users U where M.uid_fk=U.uid and M.uid_fk='$uid' order by M.msg_id desc limit 1 ");
            $result = mysql_fetch_array($newquery);
			 return $result;
        } 
		else
		{
				 return false;
		}
		
       
    }
	
	//Delete update
		public function Delete_Update($uid, $msg_id) 
	{
	    $query = mysql_query("DELETE FROM `comments` WHERE msg_id_fk = '$msg_id' ") or die(mysql_error());
        $query = mysql_query("DELETE FROM `messages` WHERE msg_id = '$msg_id' and uid_fk='$uid'") or die(mysql_error());
        return true;
      	       
    }
	
	//Insert Comments
	public function Insert_Comment($uid,$msg_id,$comment) 
	{
	$comment=htmlentities($comment);
	   	    $time=time();
	   $ip=$_SERVER['REMOTE_ADDR'];
        $query = mysql_query("SELECT com_id,comment FROM `comments` WHERE uid_fk='$uid' and msg_id_fk='$msg_id' order by com_id desc limit 1 ") or die(mysql_error());
        $result = mysql_fetch_array($query);
    
		if ($comment!=$result['comment']) {
            $query = mysql_query("INSERT INTO `comments` (comment, uid_fk,msg_id_fk,ip,created) VALUES ('$comment', '$uid','$msg_id', '$ip','$time')") or die(mysql_error());
            $newquery = mysql_query("SELECT C.com_id, C.uid_fk, C.comment, C.msg_id_fk, C.created, U.username FROM comments C, users U where C.uid_fk=U.uid and C.uid_fk='$uid' and C.msg_id_fk='$msg_id' order by C.com_id desc limit 1 ");
            $result = mysql_fetch_array($newquery);
         
		   return $result;
        } 
		else
		{
		return false;
		}
       
    }
	
	//Delete Comments
		public function Delete_Comment($uid, $com_id) 
	{
	    $query = mysql_query("DELETE FROM `comments` WHERE uid_fk='$uid' and com_id='$com_id'") or die(mysql_error());
        return true;
      	       
    }

    

}

?>

ishot-207.jpg

e non va bene perché non si capisce chi ha scritto ....

aiutoooooooooooooo


PS il problema è tutto secondo me nella query ..


senza U.username e users .. funzia ma non c'è il nome
PHP:
class Wall_Updates {


    
     // Updates   	
	  public function Updates($uid) 
	{
	
	
		 $query = mysql_query("SELECT M.msg_id, M.uid_fk, M.message, M.created FROM messages M WHERE   M.uid_fk='$uid' OR M.uid_fk IN (SELECT user_1 FROM relationship AS r WHERE r.user_2 = '$uid' AND r.amico = 'S') OR M.uid_fk IN (SELECT user_2 FROM relationship AS r WHERE r.user_1 = '$uid' AND r.amico = 'S') order by M.msg_id desc  ") or die(mysql_error());     
		 while($row=mysql_fetch_array($query))
		$data[]=$row;
	    return $data;
		
    }

query perfetta ma mi mette lo stesso post per tutti gli users amici ... :(

PHP:
class Wall_Updates {


    
     // Updates   	
	  public function Updates($uid) 
	{
	
	
		 $query = mysql_query("SELECT M.msg_id, M.uid_fk, M.message, M.created, U.username FROM messages AS M, users AS U WHERE M.uid_fk = U.uid AND M.uid_fk = M.created 
OR (M.uid_fk IN (SELECT r.user_1 FROM relationship AS r WHERE r.user_2 = '$uid' AND r.amico = 'S') 
OR M.uid_fk IN (SELECT s.user_2 FROM relationship AS s WHERE s.user_1 = '$uid' AND s.amico = 'S')) ORDER BY M.msg_id DESC ") or die(mysql_error());     
		 while($row=mysql_fetch_array($query))
		$data[]=$row;
	    return $data;
		
    }
 
Ultima modifica:
ciao
UFFAAAAAAAA NESSUNO RIESCE AD AIUTARMIIIIIIIIIIIIIIIII ......
secondo me conviene ripartire da zero perchè è evidente mi sembra che solo con la join (o almeno con la join fatta così) non riesci ad ottenere quello che vuoi.
ricapitolando il tutto:
l'utente username pinco id 37 deve vedere i suoi messaggi e quelli dei suoi amici
ogni messaggio deve essere accompagnato dall'username di chi l'ha scritto
un'idea potrebbe essere questa:
PHP:
<?php
//....
//1) dalla tabella relationship estrai tutti gli user amici
$q=mysql_query("SELECT user_1, user_2 FROM relationship WHERE user_1=$uid OR user_2=$uid AND amici_'S'");
while($am=mysql_fetch_array($q)){
	$amici_grezzi[]=$am['user_1'];
	$amici_grezzi[]=$am['user_2'];
}
//ripulisci l'array dei valori duplicati
$amici=array_unique($amici_grezzi);
//quindi nell'array amici trovi tutti gli idi degli amici di $uid + $uid
//se vuoi puoi ordinare l'array con sort($amici);
//2) a questo punto fai una join tra messaggi e user ciclando l'array $amici
foreach($amici AS $valore){
//estraggo tutti i messaggi di $uid e dei suoi amici
	$q=mysql_query("SELECT M.msg_id, M.uid_fk, M.message, M.created, U.username FROM messages AS M, users AS U WHERE M.uid_fk=$valore");
	$row=mysql_fetch_array($q);
	$data[]=$row;
}
return $data;
//...
?>
prova a vedere se l'idea funzia
 
Ciao ...

nada ho provato anche a sistemarla così ma niente, mi crea la finestrella mi scrive il post ma al refresh la pagina è vuota e non mi restituisce niente .....


PHP:
  // Updates   	
	  public function Updates($uid) 
	{
	
	
	    
	    $query=mysql_query("SELECT user_1, user_2 FROM relationship WHERE user_1=$uid OR user_2=$uid AND amici_'S'"); 
while($am=mysql_fetch_array($query)){ 
    $amici_grezzi[]=$am['user_1']; 
    $amici_grezzi[]=$am['user_2']; 
} 
//ripulisci l'array dei valori duplicati 
$amici=array_unique($amici_grezzi); 
//quindi nell'array amici trovi tutti gli idi degli amici di $uid + $uid 
//se vuoi puoi ordinare l'array con sort($amici); 
//2) a questo punto fai una join tra messaggi e user ciclando l'array $amici 
foreach($amici AS $uid){ 
//estraggo tutti i messaggi di $uid e dei suoi amici 
    $query=mysql_query("SELECT M.msg_id, M.uid_fk, M.message, M.created, U.username FROM messages M, users U  WHERE M.uid_fk=U.uid and M.uid_fk='$uid' order by M.msg_id desc"); 
    $row=mysql_fetch_array($query); 
    $data[]=$row; 
   return $data; 
		
    }
    }
 
Ciao ...

secondo voi una cosa simile non può' andare al caso mio ??????????

Ho provato ma l'username non mi viene fuori, non vorrei che ho fatto qualche errore:

PHP:
class Wall_Updates {


    
     // Updates   	
	  public function Updates($uid) 
	{
	
	$query=mysql_query("SELECT username FROM users WHERE uid = $uid"); 
while($amici=mysql_fetch_array($query)){

$username = $amici['username']; 

} 
$row=array_unique($amici);

foreach($row AS $valore){ 
	
		 $query = mysql_query("SELECT M.msg_id, M.uid_fk, M.message, M.created FROM messages M WHERE   M.uid_fk='$valore' OR M.uid_fk IN (SELECT user_1 FROM relationship AS r WHERE r.user_2 = '$uid' AND r.amico = 'S') OR M.uid_fk IN (SELECT user_2 FROM relationship AS r WHERE r.user_1 = '$uid' AND r.amico = 'S') order by M.msg_id desc  ") or die(mysql_error());     
		 while($row=mysql_fetch_array($query))
		$data[]=$row;
		
	    return $data;
		}
 
Ultima modifica:

Discussioni simili