webForumDet fria alternativet

Uppdatera tabell om vissa villkor uppfyllts, får det inte att funka

PHP

8 svar · 492 visningar · startad av soidog

Medlem sedan nov. 200519 inlägg
Frågan#1

Hej,
Har hållt på med detta ett par dagar, utan att få det att funka.

Har en tabell, 5 st fält, id, url, klick, aktiv samt totala_klick.

Tanken är att när antal klick blir lika med eller större än totala_klick så ska fältet aktiv sättas till en nolla.

Tyvär får jag inte till det, aktiv sätts inte till noll när klick är lika med eller större än totala_klick, så här ser koden ut.

<?php
// kollar om id är numeriskt
if(is_numeric($_GET['id'])){
   
	//hämtar url via $_GET
	$sql = mysql_query("SELECT * FROM test WHERE id = '{$_GET['id']}' LIMIT 1")
	or exit(mysql_error());
	while ($res = mysql_fetch_assoc($sql)) {
	$url = $res['url'];
	$id = $res['id'];
	$klick = $res['klick'];
	$totala_klick = $res['totala_klick'];
   }
 
	//kollar om totala klick är NULL, updatera klick med 1 och skicka vidare besökaren till url
	if('$totala_klick' == 'NULL'){
	mysql_query("UPDATE test SET klick=klick+1 WHERE id = '$id'")
	or exit(mysql_error());
	/*
	header("location: $url");
	*/
   }
 
	//kollar om klick är större eller lika med totala klick, uppdatera klick med 1, sätt ej aktiv till 0 och skicka vidare besökaren till url
	if('$klick' >= '$totala_klick'){
	mysql_query("UPDATE test SET klick=klick+1 WHERE id = '$id'")
	or exit(mysql_error());
	mysql_query("UPDATE test SET aktiv = '0' WHERE id = '$id'")
	or exit(mysql_error());
	/*
	header("location: $url");
	*/   
   }   
         
}else{
	//Om inget numeriskt värde finns så skickas man till index sidan
	header("location; index.php");
}
?>

Har medvetet stängt av header, så att man inte skickas vidare. Det slås på när det funkar.

Någon som vad det är för fel. Koden är inte den snyggaste, men jag försöker lära mig.

Medlem sedan juni 20031 837 inlägg
#2

vad är det som inte fungerar?
ökar klick mellan varje gång?
får du något felmeddelande?
testa att skriva ut de olika variablerna och se så de stämmer.

Medlem sedan dec. 2006382 inlägg
#3

Variabler ska inte ha enkelfnuttar runt sig, då tolkar parsern dem som en sträng. Med citationstecken går det dock att "baka in" variabler i en sträng utan att konkatenera, men det är ju inte aktuellt i det här fallet.

Medlem sedan nov. 200519 inlägg
#4

Klick ökar mellan varje gång oavsett om det är mindre, lika med eller större än totala_klick, det ska det göra. Så det funkar

Men när klick är större eller lika med totala_klick så ska aktiv uppdateras till en nolla. Ex, om klick är 99, totala_klick är 100, så ska nästa gång klick öka med 1 samt aktiv sättas till en nolla.

Variablerna stämmer, inga konstigheter där.

Hoppas att ni förstår nu.

Medlem sedan juni 20031 837 inlägg
#5

detta ser inte rätt ut

if('$klick' >= '$totala_klick'){

använd

if($klick >= $totala_klick){

samma med denna

if('$totala_klick' == 'NULL'){
Medlem sedan nov. 200519 inlägg
#6

Provade att ta bort enkelfnuttarna, men då funkade det inte. Klick ökade inte med ett, inga variabler skrivs ut heller då.

Medlem sedan dec. 200435 inlägg
#7

Funkar verkligen detta?

mysql_query("UPDATE test SET klick=klick+1 WHERE id = '$id'")

Jag skulle vilja ha det till

mysql_query("UPDATE test SET klick =".$klick+1."WHERE id = ".$id);
Medlem sedan nov. 200519 inlägg
#8

Croolie, provade att ändra som du vill ha det, får då följande fel, Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in /home/myaccount/public_html/test.php on line 17

Croolie, detta funkar,

mysql_query("UPDATE test SET klick=klick+1 WHERE id = '$id'")

klick ökar med ett,

Medlem sedan juni 20031 837 inlägg
#9

hmm, du kollar om totala_klick är lika med NULL, om det är det så ökar du klick med 1.

sen kollar du om klick är större eller lika med totala_klick och då vill du ändra aktiv till 0.

så om totala_klick är större än noll så kommer inte klick att blir större eller lika med totala_klick och därmed kommer du aldrig att sätta aktiv till 0.

ta bort fnuttarna som jag skrev i mitt tidigare meddelande och tänk efter vad du egentligen vill göra med dina if-satser.

visa oss sedan din kod igen.

249 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
121 ms — hämta tråd, inlägg och bilagor (db)
118 ms — ändringar (db)