Programmeringshjälp! Hur ska jag gå tillväga? (Webbprogrammering)

Permalänk
Medlem

Programmeringshjälp! Hur ska jag gå tillväga? (Webbprogrammering)

Hallå!
Det är så att jag håller på med en hemsida där man helt enkelt väljer vem som är snyggast av två tjejer. Och allting flyter på jättebra. Nu vill jag dock fixa statstik. Jag tänkte först på att använda mig av Elo ranking systemet, men pågrund av tidsbrist tänker jag endast lägga till 1, för varje klick varje tjej får.

I alla fall, till frågan. Jag är relativt ny till PHP och MySqL. Men hur är det bästa sättet att spara varje tjej, + antalet klickningar? Jag har tänkt på att skapa en MySql Databas, sedan spara allting där. Men hur ska jag gå tillväga? Jag vet hur en databas fungerar.

Finns det något annat mer effektivt sätt kanske?

Tack på förhand!

Permalänk
Skrivet av Logfan:

Hallå!
Det är så att jag håller på med en hemsida där man helt enkelt väljer vem som är snyggast av två tjejer. Och allting flyter på jättebra. Nu vill jag dock fixa statstik. Jag tänkte först på att använda mig av Elo ranking systemet, men pågrund av tidsbrist tänker jag endast lägga till 1, för varje klick varje tjej får.

I alla fall, till frågan. Jag är relativt ny till PHP och MySqL. Men hur är det bästa sättet att spara varje tjej, + antalet klickningar? Jag har tänkt på att skapa en MySql Databas, sedan spara allting där. Men hur ska jag gå tillväga? Jag vet hur en databas fungerar.

Finns det något annat mer effektivt sätt kanske?

Tack på förhand!

Hahahah, måste bara säga att det börjar låta lite som "The social network"

Visa signatur
Permalänk
Medlem
Skrivet av Kebabhyvlarn:

Hahahah, måste bara säga att det börjar låta lite som "The social network"

Tycker det låter mer som Hot or Not.

Allvarligt, TS, det här är enkelt. Du säger att du vet hur en databas funkar? Det handlar typ om att ha en tabell där varje rad är en av tjejerna med tillhörande räknare och uppdatera rätt rad varje gång någon röstar, det tar typ fem minuter att slänga ihop.

Permalänk
Inaktiv

Som You säger är det inte så värst svårt. Ha en tabell som ser ungefär ut såhär:

tb_kittens id (PRIMARY KEY, AUTO INCREMENT), kitten (TEXT, url till bild?), votes (INT)

Du väljer sedan ut 2 slumpmässiga rader från databasen, presenterar dem och när användaren sedan trycker på en bild så görs en fråga till databasen som lägger till ett i votes.

Permalänk
Medlem
Skrivet av Logfan:

Hallå!
Det är så att jag håller på med en hemsida där man helt enkelt väljer vem som är snyggast av två tjejer. Och allting flyter på jättebra. Nu vill jag dock fixa statstik. Jag tänkte först på att använda mig av Elo ranking systemet, men pågrund av tidsbrist tänker jag endast lägga till 1, för varje klick varje tjej får.

I alla fall, till frågan. Jag är relativt ny till PHP och MySqL. Men hur är det bästa sättet att spara varje tjej, + antalet klickningar? Jag har tänkt på att skapa en MySql Databas, sedan spara allting där. Men hur ska jag gå tillväga? Jag vet hur en databas fungerar.

Finns det något annat mer effektivt sätt kanske?

Tack på förhand!

Om du har inloggade användare så borde du spara deras röster i en länktabell.
Jag föreslår att du lagrar relativa url:er till bilderna i databasen samt antal röster (om ovanstående inte gäller). Typ så som havsmonstret skrev.

Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?

Permalänk
Medlem

Jadå, men problemet är hur jag ska få den att uppdatera databasen när jag trycker på en bild. Då, bilden endast länkar till index.php igen.

Permalänk
Medlem
Skrivet av Logfan:

Jadå, men problemet är hur jag ska få den att uppdatera databasen när jag trycker på en bild. Då, bilden endast länkar till index.php igen.

Finns flera olika sätt att göra på.
Du skulle kunna göra så att varje länks adress är: index.php?imgid=xxx
Där xxx är det unika id:t för den bilden. Om GET-variabeln "imgid" är satt så uppdaterar du antalet på den bilden med ett. Sen presenterar du nya bilder direkt efter detta är gjort.

Du kanske ser redan nu att vem som helst kan loopa ett id och på så sätt påverka rösträkningen?

Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?

Permalänk
Medlem

Ja, det är en av anledningarna till att jag inte vill använda $_GET.

Permalänk
Medlem
Skrivet av Logfan:

Ja, det är en av anledningarna till att jag inte vill använda $_GET.

Det spelar inte någon större roll vad du använder, man kommer fortfarande kunna göra så.

Permalänk
Medlem
Skrivet av Logfan:

Ja, det är en av anledningarna till att jag inte vill använda $_GET.

Du har bara GET och POST att välja mellan och båda är i klartext och går att kopiera/skicka igen. Det spelar ingen roll hur du gör. Du får exakt samma problem oavsett hur du skickar värdet.
Oavsett hur du gör så måste du bygga logik för att begränsa så att vissa användare inte ens kan påverka resultaten otillåtet.

Med tanke på hur röstfunktionen verkar fungera så ser jag ingen direkt lösning på ditt problem:
Om du slumpar fram två bilder, exempelvis D och F och användaren X röstar på D.
Sen slumpas det igen men bilderna är B och D och användaren X röstar på D... Med andra ord så får man rösta på en bild fler gånger än en.

Jag önskar mer beskrivning om hur du vill att det ska fungera innan jag (och andra) kan spåna angående en potentiell lösning på detta problem.

Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?

Permalänk
Medlem

Okey. Själva hemsidan fungerar på det sätt att det finns två bilder emot varandra. Båda bilderna slumpas (Finns 65 bilder sammanlagt).

Sedan, när man väl trycker på en av bilderna, ska den tjejens id ökas med en i databasen. Jag ska även ha en annan "variabel", som också ökas för att på så sätt räkna ut hur många gånger tjejen har förlorat.

Det är så det kommer fungera. Det jag har tänkt på är ifall man inte kan spara en till variabel som förhindrar manipulering av resultatet. T.ex if ($antalklick < $antalklickaforragangen) { $antalklick = $antalklickforragangen; }

Det borde ju förhindra att användare sätter ner scoren, aight? Sedan, borde det ju också fungera att typ använda:

if ($antalklick > $antalklickaforragangen+1) { $antalklick = $antalklickforragangen+1; }

Men jag antar väl att det finns någon bättre lösning på det?

Permalänk
Medlem
Skrivet av Logfan:

Okey. Själva hemsidan fungerar på det sätt att det finns två bilder emot varandra. Båda bilderna slumpas (Finns 65 bilder sammanlagt).

Sedan, när man väl trycker på en av bilderna, ska den tjejens id ökas med en i databasen. Jag ska även ha en annan "variabel", som också ökas för att på så sätt räkna ut hur många gånger tjejen har förlorat.

Det är så det kommer fungera. Det jag har tänkt på är ifall man inte kan spara en till variabel som förhindrar manipulering av resultatet. T.ex if ($antalklick < $antalklickaforragangen) { $antalklick = $antalklickforragangen; }

Det borde ju förhindra att användare sätter ner scoren, aight? Sedan, borde det ju också fungera att typ använda:

if ($antalklick > $antalklickaforragangen+1) { $antalklick = $antalklickforragangen+1; }

Men jag antar väl att det finns någon bättre lösning på det?

Att du sparar hur många gånger en bild har "förlorat" är bra.

Det du kommer skicka till servern nu är winid=xxx loseid=yyy (där xxx är bilden man klickade på och yyy är bilden som "förlorade")

Jag förstår inte riktigt din kod...

$antalklick = totalt antal klick som bild X har.
$antalklickaforragangen = Vart kommer detta ifrån?

Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?

Permalänk
Medlem

Nej, skit i det. Morgontrött, tänkte inte riktigt på hur jag skulle få det att gå ihop.

Men vilken är den bästa metoden då? Är det $_GET?

Permalänk
Inaktiv

$_POST är lite svårare för folk att förfalska utan direkt kunskaper då du bara kan uppdatera sidan med rätt URL med $_GET. Vad du kan göra är att man kan rösta på varje bild en gång per 20min kanske på ett IP?

Permalänk
Medlem

Men jag förstår inte riktigt det här med $_POST.
Den tycks ju bara användas när man gör formulär? Hur ska jag kunna använda det på min hemsida?

Permalänk
Medlem

Det du lär göra är att skapa två formulär. Ett formulär för varje bild, där varje formlär innehåller en "hidden" med det id-värde som bilden har (och kanske då även en "hidden" med id-värde för den andra bilden). Bilden motsvarar sedan en "submit-knapp" som tar en vidare till t.ex. process_voting.php (undvik att skicka användaren till samma sida som forumläret finns på då det då enbart är att trycka på refresh-knappen för att skicka samma data igen). Väl på process_voting.php så tar du fram vilket id som vann (och vilket id som förlorade om du vill ha statistik över detta) och uppdaterar rätta raden i databasen med en till röst. Sedan så använder du dig bara av en header-funktion för att skicka användaren tillbaks till startsidan. Det är nog såhär jag skulle lösa det iaf.

Permalänk
Medlem

Nästa steg i ditt projekt, för din egna lärdoms skull, är att ta hänsyn till relativ röstning. Att X får många röster mot Y, ska ju inte betyda att X går om Z eller att Y hamnar under Z. Därför är X mot Z nästa intressanta jämförelse att göra och då kan det vara idé att inte bara slumpa fram alla jämförelser, utan att låta användaren istället göra intressanta bedömningar (de bedömningar som har minst underlag).

Permalänk
Medlem

Knuspaflex: Ja, det låter som en bra lösning, ska köra på den!

Dock har jag stött på ett problem med min databas. Jag har skapat ett table som heter "other" och så har jag en kolumn som heter "antalbesokare". Denna kolumn är en INT.
Jag tror jag har fixat så att när man uppdaterar index.php ökas antalbesokare med en. Men, när jag vill skriva ut värdet på denna kolumn i ett annat dokument, skriver den ut "Resource id #9".

Kod:

Öka och spara värdet: <?php //Connect to database $con = mysql_connect("mysql16.000webhost.com","a3134990_*******","*******"); if (!$con) { die('Could not connect: ' . mysql_error()); } //GET Variable from database mysql_select_db("a3134990_girls", $con); $visitors['coolarray'] = mysql_query("SELECT antalbesokare FROM other"); mysql_query("UPDATE other SET antalbesokare = " . $visitors['coolarray'] . "+1"); mysql_close($con); ?> Öppna och skriva ut värdet: <?php $con = mysql_connect("mysql16.000webhost.com","a3134990_*******","*******"); mysql_select_db("a3134990_girls", $con); $anvandare['tuffarray'] = mysql_query("SELECT antalbesokare FROM other"); echo $anvandare['tuffarray']; mysql_close($con); ?>

Jag pratade med en kille som sa att den sparades som array, därför skrev jag ut det såhär. Men finns det något sätt att spara utan att använda en array, och vad är fel med koden som den är nu? Tack på förhand!

Permalänk
Inaktiv

echo($anvandare['tuffarray']['antalbesokare']);

Permalänk
Medlem
Skrivet av anon150287:

echo($anvandare['tuffarray']['antalbesokare']);

Nu skriver den inte ut någonting.

Kan det vara fel på min kolumn? Skapade den med PhpMyAdmin.

http://piclair.com/0ld20

Sådär ser den ut.

Permalänk
Inaktiv

Oj, där tänkte jag fel.
Du måste fetcha raden från resultatet mysql_query ger dig.

$result = mysql_query("SELECT antalbesokare FROM other"); $anvandare['tuffarray'] = mysql_fetch_assoc($result); echo($anvandare['tuffarray']['antalbesokare']);

Permalänk
Medlem

Fungerar fortfarande inte. Skrivs inte ut någonting.

Permalänk
Medlem
Skrivet av anon150287:

Oj, där tänkte jag fel.
Du måste fetcha raden från resultatet mysql_query ger dig.

$result = mysql_query("SELECT antalbesokare FROM other"); $anvandare['tuffarray'] = mysql_fetch_assoc($result); echo($anvandare['tuffarray']['antalbesokare']);

Om du använder "mysql_fetch_array" istället för "mysql_fetch_assoc", fungerar det då?

Permalänk
Medlem
Skrivet av knuspaflex:

Om du använder "mysql_fetch_array" istället för "mysql_fetch_assoc", fungerar det då?

Nej, fungerar fortfarande inte. Förstår verkligen inte vad som är fel ;/

Min kod i nuläget:

<?php $con = mysql_connect("mysql16.000webhost.com","a3134990_charlie","test123"); if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db("a3134990_girls", $con); $result = mysql_query("SELECT antalbesokare FROM other"); $anvandare['tuffarray'] = mysql_fetch_array($result); echo ($anvandare['tuffarray']['antalbesokare']); mysql_close($con); ?>

Permalänk
Inaktiv

Testa

print_r($anvandare['tuffarray']);

så kan du se vad arrayen innehåller.

Finns det mer än en rad i other? Gör det det måste du loopa över dom raderna.

while($row = mysql_fetch_assoc($result)) { $raderfrandatabasen[] = $row; }

Permalänk
Medlem

Skulle testa det nu, dock har jag stött på ett nytt problem. Jag började använda xampp istället för att ladda upp på webbhotellet och det fungerar perfekt, förutom att jag får error på "$anvandare['tuffarray'] = mysql_fetch_array($result);".

Errort lyder: Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\admin.php on line 9

Och nej, har endast en kolumn i other.

Permalänk
Inaktiv

Det innebär antagligen att mysql_query gav dig FALSE, vilket betyder att det stötte på ett felmeddelande. Testa o köra såhär istället:

if($result = mysql_query("SELECT antalbesokare FROM other")) { //KOD SOM BEHANDLAR DATAN HÄR } else { echo(mysql_error()); }

Permalänk
Medlem

Det här förstår jag inte alls. Den säger "No database selected". Men jag har mysql_select_db("girls", $con);.

Permalänk
Inaktiv

Testa att köra en echo(mysql_error()); efter mysql_select_db() och se om du får något felmeddelande. Sen behöver du inte $con som andra argument, det är bara om du har fler anslutningar till mysql på samma sida.

Permalänk
Medlem

Ja, då skriver den ut "Access denied for user ''@'localhost' to database 'girls'". Är detta att den inte hittar databasen eller? Eller vad är fel?