Avatar billede Milla-Tigerdyr Praktikant
18. september 2011 - 16:51 Der er 21 kommentarer og
1 løsning

Begrænsning på konkurrencer..

Hej eksperter.
Jeg er igang med en hjemmeside, med heste. Deri skal ens heste kunne deltage i nogle konkurrencer, alt efter hvilket niveau hesten er i..
Jeg skal så have lavet det sådan at der står hvis du er i niveau 0, kan du deltage i f.eks 2 konkurrencer, hvor præmien er det og det..
I niveau 1, 3 konkurrencer hvor præmien er lidt højere osv.

Der er 10 niveauer, men mit problem er, at jeg ved ikke hvordan jeg skal skrive det ned i kodning, og ved heller ikke hvordan jeg skal få konkurrencen til at åbne for tilmeldninger kl. 08:00, også lukke igen for tilmeldninger kl. 18:00, også kommer der f.eks resultater kl. 19:00. Dette er noget der skal ske én gang om dagen..
Er der nogen der kan hjælpe?
Avatar billede expnet Seniormester
18. september 2011 - 17:03 #1
Hvis du ikke selv har noget kode og det skal laves fra bunden af så tror jeg nok du skal overveje at tilbyde andet end point på eksperten for at få det udvikling
Avatar billede Milla-Tigerdyr Praktikant
18. september 2011 - 17:06 #2
expnet, lige nu så søger jeg bare en løsning på hvordan jeg skal lave det.
Jeg ville da helt klart selv se om det var noget jeg kunne finde ud af, men jeg aner bare ikke hvordan jeg skal gøre :s
18. september 2011 - 17:33 #3
Du berører (mindst) to forskellige problemer i et spørgsmål, nemlig hvordan du holder rede på niveauer og konkurrencer, og hvordan du får tingene til at foregå på eller mellem forskellige tidspunkter.  Det sidste kender jeg ikke så meget til, men jeg våger pelsen på det første, det om niveauer og konkurrencer.

Jeg ville nok bevare oplysningerne om niveauer, konkurrencer, præmier, o.s.v., i database tabeller og så kalde oplysningerne ind på siden ved hjælp af php mysql_queries (jeg ved fra tidligere spørgsmål at det er mysql du anvender.

Men først et spørgsmål:  Hvordan ved programmet hvilket niveau det drejer sig om?  Er der en html formular hvor folk kan angive niveau og har formularen action=konkurrencer.php (for eksempel) således at du i konkurrencer.php kan starte med $niveau = $_POST['niveau'];

I så fald kunne du måske have en mysql tabel 'konkurrencer' såsom:

konkurrencer
id navn præmie
1  konkur1 100
2  konkur2 125
3  konkur3 150
o.s.v

og en mysql tabel 'niveauer' - hvis nu niveau0 kan deltage i konkurrence 1 og 2, niveau1 i konkurrence 1, 2, og 3, niveau2 i konkurrencer 1 til 5, o.s.v., så kan du for hvert niveau nøjes med at angive den højeste tilladte konkurrence.  Tabellen kunne så være:

niveauer
id navn top
0 begynder 2
1 fortsættere 3
2 viderekommende 5
3 super 7
o.s.v.

Hvad skal der så ske på siden konkurrencer.php?  Skal du have udskrevet en liste af de konkurrencer hesten må deltage i, efter at hestens niveau er bekendt i niveau?  Det kunne foregå således:

$result = mysql_query("SELECT navn, præmie FROM konkurrencer WHERE id <= (SELECT top FROM niveauer WHERE id = $niveau)");
echo "Du kan deltage i følgende konkurrencer: <br>";
while($row = mysql_fetch_array($result))
{
  echo "Konkurrence " . $row['navn'] . "med præmie på " . $row['præmie'] . " kr <br>";
}

Det skulle så med en hest på niveau 1 give dette:

Du kan deltage i følgende konkurrencer:
konkurrence konkur1 med præmie på 100 kr
konkurrence konkur2 med præmie på 125 kr
konkurrence konkur3 med præmie på 150 kr

Du formulerer dit spørgsmål meget åbent.  Jeg håber ovenstående 'brainstorming' kan levere lidt stof til eftertanke, der kan hjælpe dig til at skyde dig ind på hvad konkret det er du vil.
18. september 2011 - 17:38 #4
... og hvis du ikke har været ude for det før, så det der foregår i min foreslåede query er en subselect.  I den inderste select forespørger du for top konkurrencen for det relevante niveau.  Resultatet, for eksempel 3 for niveau1, anvendes så i den yderste select.
Avatar billede Milla-Tigerdyr Praktikant
18. september 2011 - 17:40 #5
Tusind tak Christian_Belgien.
Jeg kan fortælle at pt. har jeg en tabel ved navn "heste", i den er der en kolonne ved navn "niveau", som jo angiver hvilket niveau HESTEN er i..

Skal jeg så stadig oprette tabellen niveauer eller hvad?:)
Avatar billede expnet Seniormester
18. september 2011 - 17:47 #6
nej du kan godt bruge din tabel du skal bare være opmærksom på hvor Christian_Belgien laver et udtræk fra / henter niveau fra
Avatar billede scootergrisen Nybegynder
18. september 2011 - 17:51 #7
Kunne du ikke lave sådan at der står :

"Klik her hvis du er niveau 0"
"Klik her hvis du er niveau 1"
"Klik her hvis du er niveau 2"
"Klik her hvis du er niveau 3"
"Klik her hvis du er niveau 4"
"Klik her hvis du er niveau 5"

Også har du en side for hvert niveau.

Det med at vise resultatet klokken 19 kunne du gøre med javascript eller for eksempel PHP.

Kan du finde ud af PHP eller javascript ?

Så kunne man skrive noget i stil med :

<?php

$resultat = "Camilla vandt";

if(date("H") >= 19){

  echo $resultat;

}

?>

Så hver dag når klokken er over 19 så vises teksten "Camilla vandt".
Avatar billede Milla-Tigerdyr Praktikant
18. september 2011 - 17:53 #8
Så istedet for: $result = mysql_query("SELECT navn, præmie FROM konkurrencer WHERE id <= (SELECT top FROM niveauer WHERE id = $niveau)");

Skal jeg skrive:

$result = mysql_query("SELECT navn, præmie FROM konkurrencer WHERE id <= (SELECT niveau FROM heste WHERE id = $niveau)");

Eller hvad?:)
Avatar billede Milla-Tigerdyr Praktikant
18. september 2011 - 17:55 #9
Scootergrisen; Så kan man jo bare snyde og sige man er i niveau 9?:)

Ja jeg kan finde ud af php, men er ikke særlig god til det med javascript :)
Men hvordan udvælger man en tilfældig vinder?
Avatar billede expnet Seniormester
18. september 2011 - 17:56 #10
også vil jeg lige tilføje til indlæg #3 i forbindelse med at du så gerne vil have den laver udtrækning hverdag kl. 19.00

skal du finde ud af om der hvor din hjemmeside ligger om de undstøtter CronJob og så skal du lave en php side hvor du laver de ud regner hvem der har svare rigtig og i blandt dem som har svaret rigtigt skal du lave en "rand()" se på http://php.net/rand
funktion der tager en tilfældig ud som vinder

når den php side er færdig skal den så ind og ligge i ens cronjob

p.s det er ikke mange steder man har den mulighed altså cronjob

og så vil det kun være mulighed ved at selv gå ind på den side kl 19.00 hverdag
18. september 2011 - 18:00 #11
MIT svar, som indeholder to spørgsmål:  (1)  Hvordan ved du hvilken hest det drejer sig om?  Har du et eller andet sted en variabel $hest?

Hvis din heste tabel så er:

id navn niveau
1 Sorte 3
2 Jolly Jumper 7
3 Sprænghest 5

hvordan ved du så hvilke konkurrencer hver hest må deltage i?  Det må du have stående et eller andet sted.  Den gængse, og i min mening bedste, praksis er at have en særskilt tabel for hver 'slags' data, altså en tabel der for hver niveau angiver konkurrencerne.  Så hvis du har hestens id stående i $hest, så kan du lave sådan en query:

$result = mysql_query("SELECT navn, præmie FROM konkurrencer WHERE id <= (SELECT top FROM niveauer WHERE id = (SELECT niveau FROM heste WHERE id = $hest))");

Jeg har ikke testet queryen, fordi det her foreløbigt er ment som brainstorming, så det kan godt være, at der er en syntaksfejl.  Det er nogen tid siden jeg selv har anvendt sådanne subselects.
Avatar billede Milla-Tigerdyr Praktikant
18. september 2011 - 18:02 #12
Er det den eneste mulighed der er for at den finder et tilfældigt navn?:O
Og der er jo ikke noget med at svare rigtigt??
18. september 2011 - 18:02 #13
Jeg havde ikke set indlæg #7 til #10, der kom mens jeg skrev mit.  Dem kikker jeg lige på.
Avatar billede Milla-Tigerdyr Praktikant
18. september 2011 - 18:04 #14
Christian jeg er ikke med mere :S
Altså jeg har tænkt mig at lave et link fra hesten, og ind til "konkurrence-siden". Dvs, så der kommer til at stå f.eks konkurrence.php?id=12
Eller sådan noget. Kunne det ikke fungere?

Men jeg forstår ikke det der med at jeg både skal have niveau i min heste tabel og en tabel ved navn niveau?
18. september 2011 - 18:08 #15
Som sagt, ingen kommentarer om cronjob og tidspunkter, men hvad angår mysql delen, så står jeg ved mit forslag.  Hvis et medlem af siden har en hest med et bestemt niveau, så skal det hele, inklusiv niveauet, styres fra oplysningen om hesten.  Det er noget rod at indføre niveau særskilt.  For eksempel, som Mille-Tigerdyr allerede siger, folk kan indføre et forkert niveau.

Der er en teori om normalisering af data (og mit forslag følger denne teori.)  Hvis man følger denne teori omhyggeligt, så vil man fra sin database kunne udtrække oplysninger på alle tænkelige måder, også må måder man ikke havde forestillet sig da man oprettede tabellen.
Avatar billede Milla-Tigerdyr Praktikant
18. september 2011 - 18:13 #16
Christian, men skal jeg stadig både have niveau feltet i min heste tabel OG en ny tabel ved navn niveau? Bliver det så ikke meget besværligt at finde hoved og hale i?:S
18. september 2011 - 18:34 #17
Hvordan ved du nu hvilke konkurrencer en hest må deltage i?  En mulighed kunne være for hver hest at skrive dens niveau og hvilke konkurrencer dette niveau giver ret til.  For eksempel:

id navn niveau topkonkurrence
1  Sorte    3      5
2  Jolly    5      8
3  Hvide    3      5

Så hvis du har femten heste på niveau 3 skriver du femten gange,at topkonkurrencen er 5.  Hvad hvis du kommer til at skrive fejl, så der ved nogle heste på niveau 3 kommer til at stå 4?  Så går der rod i.  Og hvad hvis dit system udvikler sig, så du vil give heste på niveau 3 6 konkurrencer?  Så skal du rette det, korrekt, i femten linier.  Hvis du har en særskilt niveau tabel, så er der kun et sted at rette det.

Nu ligger det således, at database strukturer og normalisering hører til mine stærke sider.  Det er min erfaring, at med en særskilt tabel for hver slags data, altså i dette tilfælde en særskilt niveau tabel, bliver systemet mere stabilt og mindre fejl følsomt, især når datamængden begynder at vokse.

Men det bestemmer du.
Avatar billede Milla-Tigerdyr Praktikant
18. september 2011 - 18:37 #18
Jamen forstår bare ikke hvordan hesten kommer ind i den der database?:S Så alle heste skal BÅDE lægge i databasen "heste" OG databasen "niveau", eller hvad??

Jeg forstår bare ikke hvordan de to ting kommer til at hænge sammen ;/
18. september 2011 - 20:06 #19
Du har en mysql database med en masse tabeller.  Fra tidligere spørgsmål kender jeg tabellerne members og user_on line.  Du fortæller nu, at du også har tabellen heste.  Den tabel har velsagtens, mindst, kolonner med hest_id, navn, og niveau.  Hvordan du får fyldt data i den tabel har du ikke fortalt.  Måske har du til at starte 20 heste som du fylder i tabellen manuelt via phpmyadmin eller hvad du bruger.  Såsom: 
INSERT INTO heste(id, navn, niveau) VALUES(1, 'Sorte', 3);
INSERT INTO heste(id, navn, niveau) VALUES(2, 'Jolly', 5);
INSERT INTO heste(id, navn, niveau) VALUES(3, 'Hvide', 3);

o.s.v.  Når så bedriften vokser indsætter du måske, ligeledes manuelt, tyve heste mere.

Så foreslår jeg, at du opretter tabellen niveau.  Den skal du også oprette manuelt i begyndelsen, såsom:

INSERT INTO niveau(id, navn, top) VALUES (0, 'begynder', 2);
INSERT INTO niveau(id, navn, top) VALUES (1, 'viderekommende', 3);
....
INSERT INTO niveau(id, navn, top) VALUES (9, 'superduper', 15);

Den tabel forbliver uforandret, med mindre du på et senere tidspunkt vil tilføje flere niveauer.

Og tabellen konkurrence opretter du manuelt i begyndelsen og lader den forblive uforandret, indtil du en dag beslutter dig for nye konkurrencer eller andre præmier:

INSERT INTO konkurrence(id, navn, præmie) VALUES (1, 'konkur1', 100);
INSERT INTO konkurrence(id, navn, præmie) VALUES (2, 'konkur2', 125);
INSERT INTO konkurrence(id, navn, præmie) VALUES (3, 'konkur3', 150);

Så er du klar til at begynde.  Når 'ejeren' af hest nummer 3 melder sig (og du får heste_id'en i variabelen $hest), finder du frem til hvilke konkurrencer hesten kan deltage i ved først at finde hesten's niveau:

SELECT niveau FROM hest WHERE id = $id

og så hvad top konkurrencen er for det niveau:

SELECT top FROM niveau WHERE id = (SELECT niveau FROM hest WHERE id = $id)

og finder konkurrencerne mellem 1 og denne top ved:

SELECT navn, præmie FROM konkurrencer WHERE id <= (SELECT top FROM niveau WHERE id = (SELECT niveau FROM hest WHERE id = $id))

Det kalder du fra din php kode:

$result = mysql_query("SELECT navn, præmie FROM konkurrencer WHERE id <= (SELECT top FROM niveau WHERE id = (SELECT niveau FROM hest WHERE id = $id))")

Efterhånden som din applikation bliver mere kompleks, så gælder det om at holde tungen lige i munden og tage det skridt for skridt.
Avatar billede Milla-Tigerdyr Praktikant
18. september 2011 - 20:13 #20
Jeg har så en form til at indsætte heste, så jeg ikke behøver at gå ind i phpmyadmin :)

Men når jeg så har lavet de to tabeller..hvordan vil jeg så få folk til at tilmelde sig konkurrencen?
18. september 2011 - 20:50 #21
Og du kan naturligvis vælge også at lave forms for at indsætte niveauer og konkurrencer.  Men det er vel spild af kræfter, eftersom du sandsynligvis skal have skrevet til de tabeller så sjældent.

Og så spørger du hvordan du skal få folk til at tilmelde sig konkurrencerne.  Men nu synes jeg du prøver at løse det hele i et enkelt mega-spørgsmål.  Nu har jeg prøvet at foreslå en database teknik, der vil kunne holde styr på det. 

Man kunne for eksempel forestille sig, at når en heste-ejer logger på med hestens id, så bliver heste-ejeren præsenteret for en form med en liste af de mulige konkurrencer med en checkbox for hver konkurrence.  Heste-ejeren checker en eller flere konkurrencer af og trykker på en submit knap - og deltager så i konkurrencerne.  Som man siger i Tyskland: Keine Hexerei, nur baxerei.

Men teknisk hjælp til denne, eller en anden måde, foreslår jeg bliver for et nyt spørgsmål.  Jeg bliver nødt til at slutte med dette spørgsmål, som jeg nu har brugt meget tid på.  Jeg håber det har været til nytte.

Og jeg håber du får videre hjælp med cronjobbene.
Avatar billede scootergrisen Nybegynder
18. september 2011 - 21:13 #22
Angående at finde noget tilfældigt i PHP :
http://scootergrisen.dk/phpgrisen/kode_tilfeldigheder.php
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester