Like Buttons individueel laten werken op ID
Zo heb ik in de database:
→Een likeID
→Een tijdlijnID (postID)
→Een gebruikersID (om na te kijken of de ingelogde persoon een bepaalde status al geliked heeft)
Het probleem is dat de like buttons niet perfect werken. Wanneer ik op 1 van de buttons klik komt er in de database automatisch te staan:
→tijdlijnID = 1 (de allereerste status wordt dus enkel aangepast, dit is de laatste status in de query omdat ik de nieuwste statussen bovenaan toon)
(mijn fout zit dus bij de "result['tijdlijnID'])
Heeft iemand een idee hoe ik dit zou kunnen oplossen? Bedankt :)
Tijdlijn.php
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
<?php
//tijdlijn.php
$result = mysqli_query($con,"SELECT * FROM tijdlijn");
$row2 = mysqli_fetch_assoc($result);
$query = mysqli_query($con, "SELECT * FROM tijdlijn INNER JOIN vriendenlijst ON vriendenlijst.user_id='".$_SESSION['gebruikersID']."' AND tijdlijn.gebruikersID = vriendenlijst.friend_id ORDER BY date DESC ");
while( $result = mysqli_fetch_assoc($query) )
{
$querylikes = mysqli_query($con, "SELECT likeID FROM likes WHERE tijdlijnID= '".$result['tijdlijnID']."'");
$aantallikes = mysqli_num_rows($querylikes);
$queryimage = mysqli_query($con, "SELECT * FROM likes WHERE tijdlijnID= '".$result['tijdlijnID']."'");
$row2 = mysqli_fetch_assoc($queryimage);
//STATUS
echo $result['status']
echo "<br>";
if ($row2['gebruikersID']== $_SESSION['gebruikersID'])
{
//afbeelding = like.jpg
echo
"<input type='image' src='like.jpg' name='saveForm' class='btTxt submit' style='width:30px;height:30px' id='".$result['tijdlijnID']."' onclick='mijnFunctie();likeBijtellen()'/>
<h13><div id='aantallikes'>".$aantallikes."</div></h13>"
}
else
{
//afbeelding = unlike.jpg
echo
"<input type='image' src='unlike.jpg' name='saveForm' class='btTxt submit' style='width:30px;height:30px' id='".$result['tijdlijnID']."' onclick='mijnFunctie();likeBijtellen()'/>
<h13><div id='aantallikes'>".$aantallikes."</div></h13>"
}
//afbeelding veranderen naar like.jpg of unlike.jpg na de klik
echo '<script language="javascript">
function mijnFunctie(){
if(document.getElementById("'.$result['tijdlijnID'].'").getAttribute("src") == "like.jpg")
{
changeImage1()
}
else
{
changeImage2()
}
}
function changeImage1() {
if (document.getElementById("'.$result['tijdlijnID'].'").src == "unlike.jpg")
{
document.getElementById("'.$result['tijdlijnID'].'").src = "like.jpg";
}
else
{
document.getElementById("'.$result['tijdlijnID'].'").src = "unlike.jpg";
}
}
</script>
<script language="javascript">
function changeImage2() {
if (document.getElementById("'.$result['tijdlijnID'].'").src == "like.jpg")
{
document.getElementById("'.$result['tijdlijnID'].'").src = "unlike.jpg";
}
else
{
document.getElementById("'.$result['tijdlijnID'].'").src = "like.jpg";
}
}
</script>';
echo '<script>
function likeBijtellen()
{
if(document.getElementById("'.$result['tijdlijnID'].'").getAttribute("src") == "like.jpg")
{';
$aantallikes = $aantallikes +1;
$like = 1;
echo 'var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("POST","ajax.php",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("aantallikes='.$aantallikes.' & geliked='.$like.' & tijdlijnid='.$result['tijdlijnID'].'");
}
else
{';
$aantallikes = $aantallikes -1;
$like = 0;
echo 'var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("POST","ajax.php",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("aantallikes='.$aantallikes.' & geliked='.$like.' & tijdlijnid='.$result['tijdlijnID'].'");
}
}
</script>';
}
?>
//tijdlijn.php
$result = mysqli_query($con,"SELECT * FROM tijdlijn");
$row2 = mysqli_fetch_assoc($result);
$query = mysqli_query($con, "SELECT * FROM tijdlijn INNER JOIN vriendenlijst ON vriendenlijst.user_id='".$_SESSION['gebruikersID']."' AND tijdlijn.gebruikersID = vriendenlijst.friend_id ORDER BY date DESC ");
while( $result = mysqli_fetch_assoc($query) )
{
$querylikes = mysqli_query($con, "SELECT likeID FROM likes WHERE tijdlijnID= '".$result['tijdlijnID']."'");
$aantallikes = mysqli_num_rows($querylikes);
$queryimage = mysqli_query($con, "SELECT * FROM likes WHERE tijdlijnID= '".$result['tijdlijnID']."'");
$row2 = mysqli_fetch_assoc($queryimage);
//STATUS
echo $result['status']
echo "<br>";
if ($row2['gebruikersID']== $_SESSION['gebruikersID'])
{
//afbeelding = like.jpg
echo
"<input type='image' src='like.jpg' name='saveForm' class='btTxt submit' style='width:30px;height:30px' id='".$result['tijdlijnID']."' onclick='mijnFunctie();likeBijtellen()'/>
<h13><div id='aantallikes'>".$aantallikes."</div></h13>"
}
else
{
//afbeelding = unlike.jpg
echo
"<input type='image' src='unlike.jpg' name='saveForm' class='btTxt submit' style='width:30px;height:30px' id='".$result['tijdlijnID']."' onclick='mijnFunctie();likeBijtellen()'/>
<h13><div id='aantallikes'>".$aantallikes."</div></h13>"
}
//afbeelding veranderen naar like.jpg of unlike.jpg na de klik
echo '<script language="javascript">
function mijnFunctie(){
if(document.getElementById("'.$result['tijdlijnID'].'").getAttribute("src") == "like.jpg")
{
changeImage1()
}
else
{
changeImage2()
}
}
function changeImage1() {
if (document.getElementById("'.$result['tijdlijnID'].'").src == "unlike.jpg")
{
document.getElementById("'.$result['tijdlijnID'].'").src = "like.jpg";
}
else
{
document.getElementById("'.$result['tijdlijnID'].'").src = "unlike.jpg";
}
}
</script>
<script language="javascript">
function changeImage2() {
if (document.getElementById("'.$result['tijdlijnID'].'").src == "like.jpg")
{
document.getElementById("'.$result['tijdlijnID'].'").src = "unlike.jpg";
}
else
{
document.getElementById("'.$result['tijdlijnID'].'").src = "like.jpg";
}
}
</script>';
echo '<script>
function likeBijtellen()
{
if(document.getElementById("'.$result['tijdlijnID'].'").getAttribute("src") == "like.jpg")
{';
$aantallikes = $aantallikes +1;
$like = 1;
echo 'var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("POST","ajax.php",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("aantallikes='.$aantallikes.' & geliked='.$like.' & tijdlijnid='.$result['tijdlijnID'].'");
}
else
{';
$aantallikes = $aantallikes -1;
$like = 0;
echo 'var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("POST","ajax.php",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("aantallikes='.$aantallikes.' & geliked='.$like.' & tijdlijnid='.$result['tijdlijnID'].'");
}
}
</script>';
}
?>
Likeaanpassing.php
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
//Likeaanpassing.php
include 'connectie.php';
session_start();
$gebruikersID = $_SESSION['gebruikersID']; //gebruikersID van de ingelogde persoon
$geliked = $_POST['geliked']; // 1 of 0
$tijdlijnID = $_POST['tijdlijnid']; // status-id
if ($geliked == 1)
{
mysqli_query($con, "INSERT INTO likes (gebruikersID, tijdlijnID) VALUES ('$gebruikersID', '$tijdlijnID')");
}
else if ($geliked == 0)
{
mysqli_query($con, "DELETE FROM likes WHERE tijdlijnID = '".$tijdlijnID."' AND gebruikersID = '".$gebruikersID."'");
}
//aantal likes opnieuw nakijken
$querylikes = mysqli_query($con, "SELECT likeID FROM likes WHERE tijdlijnID= '".$tijdlijnID."'");
$aantallikes = mysqli_num_rows($querylikes);
//aanpassen aantal likes
echo $aantallikes;
?>
//Likeaanpassing.php
include 'connectie.php';
session_start();
$gebruikersID = $_SESSION['gebruikersID']; //gebruikersID van de ingelogde persoon
$geliked = $_POST['geliked']; // 1 of 0
$tijdlijnID = $_POST['tijdlijnid']; // status-id
if ($geliked == 1)
{
mysqli_query($con, "INSERT INTO likes (gebruikersID, tijdlijnID) VALUES ('$gebruikersID', '$tijdlijnID')");
}
else if ($geliked == 0)
{
mysqli_query($con, "DELETE FROM likes WHERE tijdlijnID = '".$tijdlijnID."' AND gebruikersID = '".$gebruikersID."'");
}
//aantal likes opnieuw nakijken
$querylikes = mysqli_query($con, "SELECT likeID FROM likes WHERE tijdlijnID= '".$tijdlijnID."'");
$aantallikes = mysqli_num_rows($querylikes);
//aanpassen aantal likes
echo $aantallikes;
?>
Ik wist niet goed waar ik dit bericht op het forum moest plaatsten (javascript(ajax) of php) omdat ik van beiden gebruik gemaakt heb.
Gewijzigd op 14/05/2015 18:10:15 door Johnny Test
Vervolgens ga je met $query uit regel 6 verder.
Op regel 10 wordt $result ineens gebruikt als resultaatrij waarbij je $result uit regel 4 -waar dit een queryresultaat was- overschrijft.
Vervolgens overschrijf je $row2 op regel 16.
Ik denk dat je best wat queries bij elkaar kunt vegen waarbij je gebruik maakt van LEFT JOINs op tijdlijn.
En dan heb je (javascript) functies in een while loop staan... Dat kan nooit goed gaan... Die dingen accepteren toch parameters? Dan doen changeImage1() en changeImage2() volgens mij effectief hetzelfde (ze togglen tussen twee plaatjes).
Vervolgens XMLHttpRequests()? Waar heb je dit vandaan gevist. Gebruik een library zoals jQuery oid.
Tijd om dit stuk code om te schrijven, want er klopt weinig van.
en
$row2 = mysqli_fetch_assoc($result);
had ik vergeten te verwijderen want die heb ik inderdaad niet nodig.
changeimage1() en changeimage2() werken blijkbaar enkel zo, dus niet als ik 1 functie changeimage() gebruik.
Hoe kan ik mijn javascript functies dan via mijn $result['tijdlijnID'] laten werken als ze niet in de while loop kunnen staan?
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
echo '<script type="text/javascript">
function changeImage1() {
if (document.getElementById("'.$result['tijdlijnID'].'").src == "unlike.jpg") {
document.getElementById("'.$result['tijdlijnID'].'").src = "like.jpg";
} else {
document.getElementById("'.$result['tijdlijnID'].'").src = "unlike.jpg";
}
}';
?>
echo '<script type="text/javascript">
function changeImage1() {
if (document.getElementById("'.$result['tijdlijnID'].'").src == "unlike.jpg") {
document.getElementById("'.$result['tijdlijnID'].'").src = "like.jpg";
} else {
document.getElementById("'.$result['tijdlijnID'].'").src = "unlike.jpg";
}
}';
?>
Wat is het variabele deel hierin? $result['tijdlijnID']. Die zou je toch als parameter aan de functie kunnen voeren in plaats van het continue her-declareren van dezelfde functie?
Er is een verschil tussen declaratie en aanroep.
declaratie
Kan prima in puur Javascript:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<script type="text/javascript">
function changeImage(id) {
var elt = document.getElementById(id);
if (elt.src == "unlike.jpg") {
elt.src = "like.jpg";
} else {
elt.src = "unlike.jpg";
}
}
</script>
function changeImage(id) {
var elt = document.getElementById(id);
if (elt.src == "unlike.jpg") {
elt.src = "like.jpg";
} else {
elt.src = "unlike.jpg";
}
}
</script>
aanroep
Code (php)
1
2
3
2
3
Daarnaast is een auto-increment id (een getal) geen geldige waarde voor het id van een element. Volgens mij volgen deze waarden dezelfde regels als de naamgeving van variabelen, deze schrijven onder andere voor dat de waarden niet mogen beginnen met / enkel mogen bestaan uit cijfers.
Zoals eerder gezegd: ik raad je (dringend) aan om bovenstaande gribus te refactoren.