Hallo, ik heb een php bestandje gemaakt waarin ik een aantal statussen/posts uit de database haal en deze posts toon ik allemaal onder elkaar. Hierbij heb ik een like-button gemaakt. Als ik de like button 1x ergens toevoegde werkte deze perfect. Ik heb de likebutton mee in een while-lus gezet omdat ik natuurlijk voor elke post een werkende like-button wil hebben. Hiervoor had ik natuurlijk wel al door dat ik de like buttons via ID moest linken met de posts waar ze bij staan. Ik maak ook gebruik van mijn database om de likes in op te slaan op de correcte manier.
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

<?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>';	
}			
?>


Likeaanpassing.php

<?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;
?> 



Ik wist niet goed waar ik dit bericht op het forum moest plaatsten (javascript(ajax) of php) omdat ik van beiden gebruik gemaakt heb.
In het eerste fragment haal je maar 1 rij op van $result (regel 4 en 5). Deze sla je op in $row2 (waar verder niets mee gebeurt?!).

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.
$result = mysqli_query($con,"SELECT * FROM tijdlijn");
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?
Kijk eens naar wat die functie doet (het moet trouwens type="text/javascript" zijn, niet language="javascript" oid):
<?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";
    }
}';
?>

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:
<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>

aanroep
<script type="text/javascript">
changeImage(<?php echo $result['tijdlijnID'] ?>);
</script>

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.

Reageren