Ett "rösta på låt"-system i PHP

Permalänk
Skrivet av csmannen:

$chosedtime= $_POST ['chosedtime'];
$chosedtime= stripslashes($chosedtime);
$chosedtime= mysql_real_escape_string($chosedtime);

$chosedtimeX= time(); - $chosedtime * 86400;

Är det där ett korrekt och säkert sätt att räkna ut unixet - X*86400? Hur gör jag sen i queryn?

Jag brukar använda en funktion för att säkra in-data:

// Clean input
function fInClean($in, $serialized = false, $allowTags = false){
if(!$serialized){
if (get_magic_quotes_gpc()) { $in = stripslashes($in); }
}
if(!$allowTags){ $in = strip_tags($in,"<b><u><i>"); }
return trim(mysql_real_escape_string($in));
}

Inkludera funktionen i en generell funktionsfil så den finns tillgänglig på alla sidor. Du kan då sedan hämta indata på detta sätt:

$chosedtime = fInClean($_POST['chosedtime']);
$chosedtimeX = time() - $chosedtime * 86400;

(obs. att du inte får ha ditt ; efter time() då det representerar ett radslut.)

Ang. queryn och det där med röster senaste veckan skulle jag göra något sånt här:

SELECT a.*, b.*, AVG(b.points) AS meanvalue
FROM songs a LEFT JOIN votes b ON a.id = b.songid
WHERE a.active = 1 AND b.unix>= '$chosedtimeX'
GROUP BY a.id
ORDER BY meanvalue DESC

Otestat dock, kan bli problem med din group by där. Sen får du ju göra en if-sats i php om du ska lägga till det där sista "AND b.votetime" beroende på om du får in någon chosedtimeX eller inte. Och så måste du såklart ha ett fält i tabellen votes som heter votetime, där du loggar ett unix timestamp när personen röstade.

Permalänk
Medlem

Grymt nu funkar det asbra.

Om jag vill göra en rating system med stjärnor eller liknande gör jag bara en till query. Men hur ska jag få dit stjärnorna? Förstår ni? Så att man kan välja 1-5 stjärnor och rösta genom att klicka.

I värsta fall kan man ju göra en "gardin" där man har 1,2,3,4,5. Dock blir det lite fulare.

Permalänk
Medlem
Skrivet av csmannen:

Grymt nu funkar det asbra.

Om jag vill göra en rating system med stjärnor eller liknande gör jag bara en till query. Men hur ska jag få dit stjärnorna? Förstår ni? Så att man kan välja 1-5 stjärnor och rösta genom att klicka.

I värsta fall kan man ju göra en "gardin" där man har 1,2,3,4,5. Dock blir det lite fulare.

Skulle man kunna göra en IF sats där man räknar meanvalue och ersätter siffran med antal stjärnor? Så om jag har betyget är 4 så ersätts det med 4 st stjärnor.

Permalänk
Medlem
Skrivet av csmannen:

Skulle man kunna göra en IF sats där man räknar meanvalue och ersätter siffran med antal stjärnor? Så om jag har betyget är 4 så ersätts det med 4 st stjärnor.

Jag har kommit på att jag nog bara vill ha betyget, och sen en rösta knapp på sidan om varje låt. För att göra det ska jag använda css så att när man klickar på "Sätt betyg" så ska ett rullgardinfönster dyka upp". För att göra det i css ska jag skriva något i stil med:

<a href="javascript://" onclick="showhide('Votehidden');">Rösta</a></p> <div id="Votehidden" style="margin-bottom: 0px; visibility:hidden;"> <form method="post" action="rate.php"> <select name="points"> <option>1</option> <option>2</option> <option>3</option> <option>4</option> <option>5</option> <input type="submit" value="submit"> </select> </form> </div>

Hur får jag in det över i mitt php-script som echoar ut låtarna?:

while($row = mysql_fetch_array($result)){ echo '<a href="'.$row['link'].'">'.$row['name'].'</a>'. " - ". ceil($row['meanvalue']) ; echo "<br />";

Hur gör jag sedan i scriptet som ratear låtarna (rate.php) så att man ratear på den låten som är till vänster om rateknappen?

funkar den här principen med html i php scriptet?

while($row = mysql_fetch_array($result)){ echo '<a href="'.$row['link'].'">'.$row['name'].'</a>'. " - ". ceil($row['meanvalue']). " - ". 'all min kod i'.; echo "<br />";

Permalänk
Medlem

Nu har jag börjat sätta in en länk som man ska kunna trycka på att att kunna rösta. Dock får jag upp: "Parse error: syntax error, unexpected T_STRING, expecting ',' or ';' " på rad 14.

Rad 14:

echo '<a href="'.$row['link'].'">'.$row['name'].'</a>'. " - ". ceil($row['meanvalue']). " - ". '<a href="rate.php" onclick="showhide('Votehidden');">Rösta</a> ' ;

Jag ser inget fel där, ser ni?

Jag har löst det på ett annat sätt, dock fulare. Nu visas "rullgardinsfönstret" till vänster om betyget. Jag vill helst göra så att det bara syns när man klicka på min länk, (rösta). Dock får jag fel i php när jag gör det, snälla nån?

Nu har jag även kommit på ett bra sätt att göra rösningen på. När man har valt ett betyg och trycker på "Rösta!" så skickas man vidare till rate.php?name=XXX. Via name hämtar jag sedan låtens namn och uppdaterar poängen, smart va?

Permalänk
Medlem

<?php if(isset($_GET['songid'])){ $points = strip_tags(@$_POST['points']); $ip = isset($_SERVER['HTTP_X_FORWARDED_FOR']) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR']; $unix = time() $query = mysql_query ("INSERT INTO votes ('','".$_GET['songid']."','".$ip."','".$points."','".$unix."')"); $result = mysql_query($query) or die(mysql_error()); } ?>

Jag får fel på queryn: "syntax error, unexpected T_VARIABLE" på rad 9 (queryn). Vad har jag skrivit fel?

Sen, kan jag på något sätt leda till baka dem till sidan och att något skrivs ut, typ "Tack för din röst, om 5 sekunder skickas du tillbaka till sidan!" och sen kommer man tillbaka till xxx.php efter 5 sekunder.

Permalänk
Skrivet av csmannen:

Nu har jag börjat sätta in en länk som man ska kunna trycka på att att kunna rösta. Dock får jag upp: "Parse error: syntax error, unexpected T_STRING, expecting ',' or ';' " på rad 14.

Rad 14:

echo '<a href="'.$row['link'].'">'.$row['name'].'</a>'. " - ". ceil($row['meanvalue']). " - ". '<a href="rate.php" onclick="showhide('Votehidden');">Rösta</a> ' ;

Jag ser inget fel där, ser ni?

echo "<a href='{$row['link']}'>{$row['name']}</a> - " . ceil($row['meanvalue']) . " - <a href='rate.php' onclick='showhide(\'Votehidden\');'>Rösta</a>";

Skrivet av csmannen:

Jag får fel på queryn: "syntax error, unexpected T_VARIABLE" på rad 9 (queryn). Vad har jag skrivit fel?

Du måste ha ett semikolon efter varje rad. Ska vara:
$unix = time();

Skrivet av csmannen:

Sen, kan jag på något sätt leda till baka dem till sidan och att något skrivs ut, typ "Tack för din röst, om 5 sekunder skickas du tillbaka till sidan!" och sen kommer man tillbaka till xxx.php efter 5 sekunder.

<meta http-equiv="refresh" content="5;url=xxx.php">

Permalänk
Medlem

Tack. Nu har jag fixat unixet och fått en idé om hur jag ska uppdatera sidan efter X antal sekunder.

"Utskrivningen av queryn" funkar nu, men jag ville lägga till lite mer, och då blev det knas.

"Utskrivningen av queryn" :

echo "<a href='{$row['link']}'>{$row['name']}</a> - " . ceil($row['meanvalue']) . " - <a href='rate.php' onclick='showhide(\'Votehidden\');'>Rösta</a> <div id="Votehidden" style="margin-bottom: 0px; visibility:hidden;"> <form method="post" action="rate.php"> <select name="points"> <option>1</option> <option>2</option> <option>3</option> <option>4</option> <option>5</option> <input type="submit" value="submit"> </select> </form> </div>";

Dock fungerar inte den. Jag får följande error; "Parse error: syntax error, unexpected T_STRING, expecting ',' or ';'" på rad 17. Vad gick fel?

Sen, finns det något bra sätt att felsöka php-kod på? För nu förstår jag inte riktigt vad alla errors betyder och hur man åtgärdar dem.

Permalänk
Inaktiv

Du börjar din echo med " och använder det senare i koden.
Det den tolkar det som är att tex. post och rate.php är PHP variabler medan det faktiskt är ord som ska vara med i koden.
Använd ' för PHP och " för HTML. Finns lite skillnader mellan ' och " i PHP, tex. kan du skriva in variabler i en sträng med " medan du måste använda punkter för '.

Exempel:

echo('<a href="'.$row['link'].'">'.$row['name'].'</a> - '.ceil($row['meanvalue']).' - <a href="rate.php" onclick="showhide(\'Votehidden\');">Rösta</a> <div id="Votehidden" style="margin-bottom: 0px; visibility:hidden;">');

Permalänk
Medlem
Skrivet av anon150287:

Du börjar din echo med " och använder det senare i koden.
Det den tolkar det som är att tex. post och rate.php är PHP variabler medan det faktiskt är ord som ska vara med i koden.
Använd ' för PHP och " för HTML. Finns lite skillnader mellan ' och " i PHP, tex. kan du skriva in variabler i en sträng med " medan du måste använda punkter för '.

Exempel:

echo('<a href="'.$row['link'].'">'.$row['name'].'</a> - '.ceil($row['meanvalue']).' - <a href="rate.php" onclick="showhide(\'Votehidden\');">Rösta</a> <div id="Votehidden" style="margin-bottom: 0px; visibility:hidden;">');

Tack, jag har nu gjort som du säger, men likt förbannat får jag fel. "syntax error, unexpected T_ECHO, expecting ',' or ';'" på rad 33.

Kod: http://pastie.org/2005955

Permalänk
Inaktiv

Du har inget ; på rad 30.

Permalänk
Medlem

Tack!

Nu har jag fortsatt på scriptet som sätter betyg på låtarna. En så länge är det simpelt, alltså utan mysql_real_escape_string och så att scriptet kollar så att användarens IP bara finns på en röst på en låt.

Dock får jag lite problem. Mitt script echoar ut "det funkar", fast det inte gör det. Jag tycker scriptet ser bra ut, det gör dock inte servern

KOD: http://pastie.org/2008034

Varför händer inget i mitt script?

Permalänk
Skrivet av anon150287:

Du börjar din echo med " och använder det senare i koden.
Det den tolkar det som är att tex. post och rate.php är PHP variabler medan det faktiskt är ord som ska vara med i koden.
Använd ' för PHP och " för HTML. Finns lite skillnader mellan ' och " i PHP, tex. kan du skriva in variabler i en sträng med " medan du måste använda punkter för '.

Exempel:

echo('<a href="'.$row['link'].'">'.$row['name'].'</a> - '.ceil($row['meanvalue']).' - <a href="rate.php" onclick="showhide(\'Votehidden\');">Rösta</a> <div id="Votehidden" style="margin-bottom: 0px; visibility:hidden;">');

Håller inte med om att man ska börja en echo med ', börjar man istället med vanligt citationstecken " slipper man konkatenera som du nu behövde göra. Gör istället så här:

echo "<a href='{$row['link']}'>{$row['name']}</a> - " .ceil($row['meanvalue']). " - <a href='rate.php' onclick='showhide(\'Votehidden\');'>Rösta</a> <div id='Votehidden' style='margin-bottom: 0px; visibility:hidden;'>";

Blir så mycket smidigare, särskilt när man har ett gäng variabler inblandade. Observera dock att för att detta ska fungera med arrayer måste man omringa dem med måsvingar { }. Enda gången man behöver konkatenera mig veterligen är vid funktionsanrop som i det här fallet ceil().

Permalänk
Skrivet av csmannen:

Tack!

Nu har jag fortsatt på scriptet som sätter betyg på låtarna. En så länge är det simpelt, alltså utan mysql_real_escape_string och så att scriptet kollar så att användarens IP bara finns på en röst på en låt.

Dock får jag lite problem. Mitt script echoar ut "det funkar", fast det inte gör det. Jag tycker scriptet ser bra ut, det gör dock inte servern

KOD: http://pastie.org/2008034

Varför händer inget i mitt script?

Funkar queryn? Dvs. sparas det något? Skulle dock rekommendera dig att genomföra queryn på detta sätt:

$songid = fInClean($_GET['songid']); $points = fInClean($_POST['points']); $query = "INSERT INTO votes(id,ip,points,unix) VALUES('$songid','$ip','$points','$unix')"; mysql_query($query);

Flera fördelar:
- Säker in-data
- Du behöver inte tänka på kolumnernas ordning i databasen
- Snyggare och mer lättläst
- Du kan enkelt eka ut queryn med echo $query; ifall du vill veta exakt vad som körs, eller testa det i ett sql-program.

Permalänk
Medlem
Skrivet av infinity08:

Funkar queryn? Dvs. sparas det något? Skulle dock rekommendera dig att genomföra queryn på detta sätt:

$songid = fInClean($_GET['songid']); $points = fInClean($_POST['points']); $query = "INSERT INTO votes(id,ip,points,unix) VALUES('$songid','$ip','$points','$unix')"; mysql_query($query);

Flera fördelar:
- Säker in-data
- Du behöver inte tänka på kolumnernas ordning i databasen
- Snyggare och mer lättläst
- Du kan enkelt eka ut queryn med echo $query; ifall du vill veta exakt vad som körs, eller testa det i ett sql-program.

Tack, riktigt schysst! Dock fungerar det fortfarande inte... Inget sparas i min databas.

Här är min nya kod: http://pastie.org/2008833

Den följer din struktur, men den fungerar inte. Vad kan felet ligga?

EDIT: Knäppt när jag echoar ut min query får jag: INSERT INTO votes(id, songid, ip,points,unix) VALUES('',2','127.0.0.1','','1307025836')Det funkar!

Då borde det funka va?

Permalänk
Inaktiv
Skrivet av infinity08:

Håller inte med om att man ska börja en echo med ', börjar man istället med vanligt citationstecken " slipper man konkatenera som du nu behövde göra. Gör istället så här:

echo "<a href='{$row['link']}'>{$row['name']}</a> - " .ceil($row['meanvalue']). " - <a href='rate.php' onclick='showhide(\'Votehidden\');'>Rösta</a> <div id='Votehidden' style='margin-bottom: 0px; visibility:hidden;'>";

Blir så mycket smidigare, särskilt när man har ett gäng variabler inblandade. Observera dock att för att detta ska fungera med arrayer måste man omringa dem med måsvingar { }. Enda gången man behöver konkatenera mig veterligen är vid funktionsanrop som i det här fallet ceil().

Är väl lite av en smaksak med, har alltid använt " i HTML och har då blivit ' i PHP.

Skrivet av csmannen:

Tack, riktigt schysst! Dock fungerar det fortfarande inte... Inget sparas i min databas.

Här är min nya kod: http://pastie.org/2008833

Den följer din struktur, men den fungerar inte. Vad kan felet ligga?

EDIT: Knäppt när jag echoar ut min query får jag: INSERT INTO votes(id, songid, ip,points,unix) VALUES('',2','127.0.0.1','','1307025836')Det funkar!

Då borde det funka va?

Kör queryn såhär så får du eventuella felmeddelande:

if(!mysql_query($query)) { echo(mysql_error()); }

Permalänk
Medlem
Skrivet av anon150287:

Är väl lite av en smaksak med, har alltid använt " i HTML och har då blivit ' i PHP.

Kör queryn såhär så får du eventuella felmeddelande:

if(!mysql_query($query)) { echo(mysql_error()); }

Jag får "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 '','127.0.0.1','3','1307034548')' at line 1" Vad tyder det på?

Permalänk
Inaktiv
Skrivet av csmannen:

Jag får "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 '','127.0.0.1','3','1307034548')' at line 1" Vad tyder det på?

Du har glömt en ' framför $songid...

Permalänk
Skrivet av csmannen:

Jag får "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 '','127.0.0.1','3','1307034548')' at line 1" Vad tyder det på?

Queryn ska isåfall vara (förutsatt att kolumnnamnen är rätt och att id har en auto increment:

$query = "INSERT INTO votes(songid, ip,points,unix) VALUES('$songid','$ip','$points','$unix')";

Dvs. du behöver inte ha med id alls om den är primary index och har auto increment. Sen så hade du glömt en ' innan songid.

Permalänk
Medlem
Skrivet av infinity08:

Queryn ska isåfall vara (förutsatt att kolumnnamnen är rätt och att id har en auto increment:

$query = "INSERT INTO votes(songid, ip,points,unix) VALUES('$songid','$ip','$points','$unix')";

Dvs. du behöver inte ha med id alls om den är primary index och har auto increment. Sen så hade du glömt en ' innan songid.

Tack!

Nu ska jag göra så att det enbart är en röst per låt. Återkommer med resultat, och i värsta fall frågor...

EDIT: Löste det!

$checkquery = mysql_query ("SELECT ip, songid FROM votes WHERE songid='$songid' AND ip='$ip' "); $numrows = mysql_num_rows ($checkquery); if ($numrows!=0) { echo "Du har redan röstat på den här låten!"; } else { blabla }

Nu är det bara den sista funktionen kvar: att låta användare skicka in låttips. Dock är den inte så svår.

Tack för alla svar, hade tagit enormt lång tid, eller snarare oändligt långtid utan dem!

Permalänk
Medlem

Jag kom på att nu visas enbart låtar som har fått en eller flera röster, vilket dödar systemet för alla låtar. Hur ska jag lösa det? Känns som det borde gå att göra i queryn, men hur? En annan lösningen är ju att man skriver in ett betyg i databasen i samma veva som låten läggs till.

Query:

$query = "SELECT `songs`.*, `votes`.*, `votes`.`id` AS `voteid`, AVG(`votes`.`points`) AS `meanvalue` FROM `songs` INNER JOIN `votes` ON `songs`.`id` = `votes`.`songid` WHERE `songs`.`active` = 1 AND `votes`.`unix` >= '$chosedtimeX' GROUP BY `songs`.`id` ORDER BY `meanvalue` DESC ";

Det som gör att låtar utan röster inte visas är

WHERE: `votes`.`unix` >= '$chosedtimeX'

Dock gillar jag den funktionen. Jag tror det är bäst att göra så att ett betyg skrivs in när låten skickas in.

För att göra det tänkte jag mig en mycket simpel query, lik den i votes. Det enda jag inte riktigt vet hur jag ska göra är att skriva in songid. Kan jag göra så att låten först skrivs in, sen så kollar jag vilket id den fick och skriver in det id som songid i votes? Hajjar ni?

Som det ser ut nu gör jag 3 st query, en som skriver in låten, en som hämtar låten id genom att kolla länken och en sista som skriver in en röst med värdet 3 genom att den tar idt från songen och gör det till songid. Dock fungerar det inte ritkigt.

Querys:

$query = "INSERT INTO songs(link, name, active,date) VALUES('$link','$name','$active','$date')"; mysql_query($query); $query1 = mysql_query ("SELECT id, link FROM users WHERE link='$link'"); $row['id'] = $songid $query2 = "INSERT INTO votes(songid, ip, points, date) VALUES('$songid','$ip','3','$date')"; mysql_query($query2);

Jag får då error på rad 50: "syntax error, unexpected T_VARIABLE"

Permalänk
Skrivet av csmannen:

Jag kom på att nu visas enbart låtar som har fått en eller flera röster, vilket dödar systemet för alla låtar. Hur ska jag lösa det? Känns som det borde gå att göra i queryn, men hur? En annan lösningen är ju att man skriver in ett betyg i databasen i samma veva som låten läggs till.

Query:

$query = "SELECT `songs`.*, `votes`.*, `votes`.`id` AS `voteid`, AVG(`votes`.`points`) AS `meanvalue` FROM `songs` INNER JOIN `votes` ON `songs`.`id` = `votes`.`songid` WHERE `songs`.`active` = 1 AND `votes`.`unix` >= '$chosedtimeX' GROUP BY `songs`.`id` ORDER BY `meanvalue` DESC ";

Det som gör att låtar utan röster inte visas är

WHERE: `votes`.`unix` >= '$chosedtimeX'

Dock gillar jag den funktionen. Jag tror det är bäst att göra så att ett betyg skrivs in när låten skickas in.

Skrivet av infinity08:

Ang. queryn och det där med röster senaste veckan skulle jag göra något sånt här:

SELECT a.*, b.*, AVG(b.points) AS meanvalue
FROM songs a LEFT JOIN votes b ON a.id = b.songid
WHERE a.active = 1 AND b.unix>= '$chosedtimeX'
GROUP BY a.id
ORDER BY meanvalue DESC

Otestat dock, kan bli problem med din group by där. Sen får du ju göra en if-sats i php om du ska lägga till det där sista "AND b.votetime" beroende på om du får in någon chosedtimeX eller inte. Och så måste du såklart ha ett fält i tabellen votes som heter votetime, där du loggar ett unix timestamp när personen röstade.

Använd queryn jag skrev där istället. Du har flera saker i din query som kan bli problem, bland annat bör du ha en LEFT JOIN, annars får du inte med låtar utan röster. Och sen som sagt, använd en if-sats i php för att avgöra om WHERE-satsen ska med eller inte.

Skrivet av csmannen:

Jag får då error på rad 50: "syntax error, unexpected T_VARIABLE"

Du saknar ett semikolon ; efter $row['id'] = $songid

Permalänk
Medlem
Skrivet av infinity08:

Använd queryn jag skrev där istället. Du har flera saker i din query som kan bli problem, bland annat bör du ha en LEFT JOIN, annars får du inte med låtar utan röster. Och sen som sagt, använd en if-sats i php för att avgöra om WHERE-satsen ska med eller inte.

Du saknar ett semikolon ; efter $row['id'] = $songid

Tack, queryn funkar prima.

Nu tänkte jag lite på IF-satsen. Skulle man kunna göra något i stil med: IF Count(b.points)>1 b.unix>= '$chosedtimeX' ELSE meanvalue =3; ? Förstår du? Hur gör man det här korrekt?

Sen måste jag fråga en sak: hur funkar det här med a och b. Jag testade att pastea det direkt utan att ändra till songs och votes, och det funkar! Men, HUR?

Permalänk
Skrivet av csmannen:

Tack, queryn funkar prima.

Nu tänkte jag lite på IF-satsen. Skulle man kunna göra något i stil med: IF Count(b.points)>1 b.unix>= '$chosedtimeX' ELSE meanvalue =3; ? Förstår du? Hur gör man det här korrekt?

Sen måste jag fråga en sak: hur funkar det här med a och b. Jag testade att pastea det direkt utan att ändra till songs och votes, och det funkar! Men, HUR?

Är lite osäker på vad du vill uppnå. Ville du inte ha ett alternativ där användaren kan se de mest populära låtarna efter en angiven tid, ex. senaste veckan? Även om det kanske, kanske vore möjligt att göra något i den vägen i sql skulle jag nog lösa det på detta sätt, om du nu vill få med även låtar utan röster:

SELECT a.*, b.*, AVG(b.points) AS meanvalue FROM songs a LEFT JOIN votes b ON a.id = b.songid WHERE a.active = 1 AND (b.unix>= '$chosedtimeX' OR b.unix IS NULL) GROUP BY a.id ORDER BY meanvalue DESC

Och sedan i php:n kolla om unix i resultatet är null, då kan du ju skriva ut "Inga röster än" eller liknande.

Ang. a och b så är det bara alias för tabellerna, du skulle lika gärna kunna döpa dem till tabell1 och tabell2 eller vad du vill. Jag brukar använda a och b eftersom det kortar ner queryn och blir tydligare. Själva döpandet görs efter FROM, du ser att det står "FROM songs a", det är eg. en förkortning av "FROM songs AS a" som gör att du kan referera till tabellen songs med aliaset a varsomhelst annars i queryn. Likadant ger du tabellen votes aliaset b: "LEFT JOIN votes b".

Permalänk
Medlem
Skrivet av infinity08:

Är lite osäker på vad du vill uppnå. Ville du inte ha ett alternativ där användaren kan se de mest populära låtarna efter en angiven tid, ex. senaste veckan? Även om det kanske, kanske vore möjligt att göra något i den vägen i sql skulle jag nog lösa det på detta sätt, om du nu vill få med även låtar utan röster:

SELECT a.*, b.*, AVG(b.points) AS meanvalue FROM songs a LEFT JOIN votes b ON a.id = b.songid WHERE a.active = 1 AND (b.unix>= '$chosedtimeX' OR b.unix IS NULL) GROUP BY a.id ORDER BY meanvalue DESC

Och sedan i php:n kolla om unix i resultatet är null, då kan du ju skriva ut "Inga röster än" eller liknande.

Ang. a och b så är det bara alias för tabellerna, du skulle lika gärna kunna döpa dem till tabell1 och tabell2 eller vad du vill. Jag brukar använda a och b eftersom det kortar ner queryn och blir tydligare. Själva döpandet görs efter FROM, du ser att det står "FROM songs a", det är eg. en förkortning av "FROM songs AS a" som gör att du kan referera till tabellen songs med aliaset a varsomhelst annars i queryn. Likadant ger du tabellen votes aliaset b: "LEFT JOIN votes b".

Tack så hemskt mycket, riktigt bra förklarat!

Jag har nu löst det på ett annat sätt. När adminen accepterar låten får den en röst med värdet 3, det tycker jag blir en bra lösning så att alla nya låtar inte lägger sig längs ner och inte har någon chans att "klättra upp".

En liten simpel fråga, är NULL det samma som inget resultat/0?

Permalänk
Inaktiv

NULL betyder "inget".
Om ett värde än NULL har det inget värde (låter konstigt).

Permalänk
Medlem

Håller på med en annan sak som är koppla till röst-system som nu krånglar. Jag förstår verkligen inte var felet ligger.

De 3 "querysarna" ska göra följande: hämta titel och link där id= idt från urlen, hämta unixet med högst värde från dagenslatar och lägga på ett dygn (86400 sekunder) och till sist föra in $link, $titel $datum och $highunix i dagenslatar. Förstår ni?

EDIT: Löste 2 av variblerna via URLen, dock fungerar inte varibeln HighUnix.

KOD:

$maxunixquery = "SELECT MAX(unix) AS HighUnix FROM dagenslatar "; mysql_query($maxunixquery); $HighUnix = $row['HighUnix'] + 86400;

Kan man göra så för att hämta unixet med högst värde för att sedan göra en variabel av det ($HighUnix)?

Permalänk

Du behöver ett resultset också:

$rs = mysql_query($maxunixquery); if($rs && mysql_num_rows($rs)>0){ $row = mysql_fetch_assoc($rs); $HighUnix = $row['HighUnix'] + 86400; }

Permalänk
Medlem
Skrivet av infinity08:

Du behöver ett resultset också:

$rs = mysql_query($maxunixquery); if($rs && mysql_num_rows($rs)>0){ $row = mysql_fetch_assoc($rs); $HighUnix = $row['HighUnix'] + 86400; }

Tack, grymt schysst!

Nu är det bara det allra sista scriptet kvar: http://pastie.org/2039435 Liksom det förra skrivs ingen ut, vare sig i databasen eller på sidan.

Permalänk
Skrivet av csmannen:

Tack, grymt schysst!

Nu är det bara det allra sista scriptet kvar: http://pastie.org/2039435 Liksom det förra skrivs ingen ut, vare sig i databasen eller på sidan.

Kolla så du inte har något fel i din dagenslåtar-query. Sen så har du ett litet fel på slutet:

echo "<br>"; $row['HighUnix']; echo "<br>";

Inte säker att det kommer framkalla ett error men det finns ju ingen poäng i att anropa ett värde i en array utan en echo eller operaton.