Jump to content

Recommended Posts

Since I am still new to php I am probably doing this the hardway.

 

I'm coding a LIKE SYSTEM (Similar To Facebooks)

 

I have a table that looks like this;

Table Named; stats;

 

idnamedescription

1Stevenupdated their status.

2Stevenuploaded a picture to their profile.

 

Then I have a table like this;

Table Named; `like`;

idusernamelike

2Steven1

 

(Column "like" is a variable between 0 (Not Liked) and 1 (Liked)

 

My SQL looks like this;

$sql = "SELECT * FROM stats LEFT JOIN `like` ON `like`.id = stats.id ORDER BY stats.id DESC,stats.id LIMIT $offset, $rowsperpage";

 

Everything you see here is perfect. I will try to continue to explain the best I can.

As you see above, the STATS TABLE has ID numbers auto-increcement while when someone hits the like button, that STATS ID number enters in the LIKE TABLE also inserting the sessions USERNAME and 1 Value for LIKE COLUMN.

 

$sql="INSERT INTO `like` (id, username, `like`)
VALUES
('$_POST[id]','$_POST[username]','$_POST[like]')";

 

 

Everything is once again perfect of what I have. Displaying it is my problem.

echo $list[''] . "<a href=\"profile.php?user=" . $list['name'] . "\"> <b>" . $list['name'] . "</b></a> " . $list['description'] . "<br /><form action=\"profile_like_insert.php\" method=\"post\">
<input name=\"id\" type=\"hidden\" size=\"50\" value=\"" . $list['id'] . "\"/>
<input name=\"username\" type=\"hidden\" size=\"50\" value=\"";
?>
<?php echo $_SESSION['username']; ?>
<?php 
echo $list[''] . "\">
<input name=\"like\" type=\"hidden\" size=\"50\" value=\"1\"/>
<input type=\"submit\" value=\"Like\" />
</form>; 

 

The above is an echo list that echos perfectly. My only problem is where do I insert this into?:

<a href=\"profile.php?user=" . $list['username'] . "\">" . $list['username'] . "</a> likes this.<br>

 

When I enter this code in the ECHO LIST it duplicates posts and also has the text "Likes This" under each status update (Updated Profile).

 

 

This is what I would like to have;

 

Only show the word LIKES THIS if an USERNAME likes it. For example;

 

Steven updated his profile.

Steven uploaded a profile picture.
John Doe likes this.

 

What i've been getting is this;

Steven updated his profile.
likes this.

Steven uploaded a profile picture.
John Doe likes this.

Steven uploaded a profile picture
Bob likes this. (As you see it duplicates)

 

I will keep trying very hard to figure this out,

I would love someone to get me into the right path :)

Thanks so much in advanced and your time!

Link to comment
https://forums.phpfreaks.com/topic/215198-is-this-possible/
Share on other sites

Your table should look somewhat similar to:

 

 

user (id, user_name, password)status (id, user_id, status, posted_at)like (status_id, user_id, liked)

 

 

In mySQL this would be:

 

 

CREATE TABLE user (  id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,  user_name VARCHAR(32) NOT NULL CHARACTER SET utf8 COLLATE utf8_bin,  password CHAR(40) NOT NULL CHARACTER SET ascii,  INDEX idx_user_logon (user_name, password),  UNIQUE idx_user_name (user_name)) ENGINE = MyISAM;CREATE TABLE status (  id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,  user_id INT UNSIGNED NOT NULL,  status VARCHAR(160) NOT NULL CHARACTER SET utf8 COLLATE utf8_bin,  posted_at DATETIME NOT NULL,  INDEX idx_status_user_id (user_id)) ENGINE = MyISAM;CREATE TABLE like (  status_id INT UNSIGNED NOT NULL,  user_id INT UNSIGNED NOT NULL,  liked TINYINT(1) NOT NULL DEFAULT TRUE,  INDEX idx_like_status_id (status_id),  PRIMARY KEY (status_id, user_id)) ENGINE = MyISAM;

 

 

This design should cover most of your bases (user_name should only be registered once, user_name|password index for login, ..).

Link to comment
https://forums.phpfreaks.com/topic/215198-is-this-possible/#findComment-1119342
Share on other sites

Thanks for your reply!

 

As stated above (Which I have tables really similar); I am having troubles displaying this in PHP.

 

As there is a news feed; there is a echo list (Posted above)

here is an example of my output;

 

Steven updated his profile.

likes this. <- This is showing likes this. But nobody liked this post, how can I make that into an else statement using while and echo list?

 

Steven uploaded a profile picture.

John Doe likes this.

 

Steven uploaded a profile picture.

Bob likes this.  <- This was allready liked above by John Doe. How can I put these two together in a while echo list?

 

Thanks, hopefully this is clear enough to understand :)

Link to comment
https://forums.phpfreaks.com/topic/215198-is-this-possible/#findComment-1119452
Share on other sites

pseudo code

some code$description='':while loop for outputif($description != $list['description']){$description = $list['description'];//echo description}if($list['username']){echo "<a href=\"profile.php?user=" . $list['username'] . "\">" . $list['username'] . "</a> likes this.<br>";}//end while loop

 

Link to comment
https://forums.phpfreaks.com/topic/215198-is-this-possible/#findComment-1119640
Share on other sites

pseudo code

some code
$description='':
while loop for output
if($description != $list['description']){
$description = $list['description'];
//echo description
}
if($list['username']){
echo "<a href=\"profile.php?user=" . $list['username'] . "\">" . $list['username'] . "</a> likes this.<br>";
}
//end while loop

 

100% Works! Thanks very much!

Question (Doesn't Have to Be Answered):

 

I have;

Steven changed his profile picture.

Steven likes this.

 

Steven changed his profile picture.

Bob likes this.

 

Is there a way to combine the two so that it outputs:

Steven changed his profile picture.

Steven, Bob likes this.

 

Thanks ignace for your help as well. If I want to clean up my databases/tables, I will follow your tables. They make more sense that way.

Link to comment
https://forums.phpfreaks.com/topic/215198-is-this-possible/#findComment-1120068
Share on other sites

some code
$description='':
$tmp = array();
while loop for output
if($description != $list['description']){
              if(count($tmp)>0){
                     echo implode(', ', $tmp), " likes this.<br>";
                     $tmp = array();
              }
$description = $list['description'];
//echo description 
}
if($list['username']){
$tmp[] = "<a href=\"profile.php?user=" . $list['username'] . "\">" . $list['username'] . "</a>";
}
//end while loop 

Link to comment
https://forums.phpfreaks.com/topic/215198-is-this-possible/#findComment-1120108
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.