Avatar billede Milla-Tigerdyr Praktikant
12. oktober 2011 - 14:15 Der er 59 kommentarer og
1 løsning

Konkurrence-system, ved ikke hvordan.

Jeg er igang med et konkurrence-system, til nogle heste.
Jeg har fået lavet en kode, der viser hvilke konkurrencer man kan deltage i.
Nu har jeg brug for noget, der kan tilmelde en konkurrencen, og afgøre den.

Det skal foregå sådan, at man tilmelder sig, også hver dag kl. 18:00, så bliver der automatisk valgt én vinder pr. konkurrence.

Jeg ved ikke hvordan jeg skal gøre dette, og hvor skal de tilmeldte ende henne? Har i nogle ideer?
Avatar billede JensPeterSvensson Nybegynder
12. oktober 2011 - 14:29 #1
Når du viser konkurrencer man kan tilmelde sig, vis en knap ved hver konkurrence. Brugeren trykker på knappen for at tilmelde sig.

Du har formentlig en konkurrence og bruger tabel. Ved tilmelding skal du bruge en tredje tabel med nøglerne fra de to andre tabeller. Hver tilmelding er en række i denne tabel, der identificere konkurencen med dennes nøgle og brugeren med dennes nøgle.

Angående afvikling kan du bruge et cron-job forudsat du har lov til det. Ellers kan du jo bare lave en php side som du besøger hver dag kl 18.00.
Avatar billede Milla-Tigerdyr Praktikant
12. oktober 2011 - 14:32 #2
Jeg forstår ikke helt det med tabellerne? Altså jeg har en tabel ved navn konkurrencer hvor der er..24 konkurrencer i eller sådan noget. SÅ har jeg min members tabel, men den er jo slet ikke med i det der. Men min heste-tabel er jo med i den, da det er hesten man tilmelder til konkurrencen.

- Hvad mener du med at besøge den hver dag kl. 18?
Avatar billede JensPeterSvensson Nybegynder
12. oktober 2011 - 14:41 #3
nå ok så det er heste man tilmelder.

Hvis en bruger har flere heste skal du så også vise en select boks ved hver hest (Eller vise alle hestene og en select boks ved hver hest med konkurrencerne).

På serveren er det principielt det samme du udskifter bare bruger tabel med heste tabel.

Angående det med at besøge hver dag kl 18.00.

Hvis du besøger en side hver dag kl 18.00 bliver koden for denne side jo afviklet hver dag kl 18.00. Så hvis siden har logikken til at afvikle konkurrencer bliver de dermed afviklet kl. 18.00. Denne teknik kræver selvfølgelig at kun du ved denne side eksisterer. Da andre ellers kan besøge den.
Avatar billede Milla-Tigerdyr Praktikant
12. oktober 2011 - 14:53 #4
Det har jeg allerede, altså jeg har et link fra hesten der hedder "Deltag i konkurrencer", hvor man så kommer ind på en side, og der står så hvilke man kan deltage i :)

- Så jeg ville f.eks skulle lave en tabel der hedder "tilmelding", også i den skulle der f.eks være en struktur med følgene punkter;
ID - Navn - Ejer - Niveau - Præmie - Konkurrence
eller hvad?

- Hmm..men hvad ville den side skulle indeholde? Det kan jeg ikke helt få til at hænge sammen?
Avatar billede JensPeterSvensson Nybegynder
12. oktober 2011 - 15:03 #5
Du har en tabel:

Konkurrencer
kId <-- nøgle
..
..
..

og en tabel:

Heste
hId <-- nøgle
..
..
..


Prikkerne er andre felter i de to tabeller. Din tilmeldings tabel er så:

Tilmeldinger:
hId
kId

På siden hvor du vælger konkurrencer har brugeren valgt en hest og vælger nu en konkurrence. Dette gemme du blot med hestens id og konkurrences id i Tilmeldinger tabellen.





Angående siden kan jeg jo ikke fortælle dig hvad logikken(koden) er til afvikling af dine konkurrencer. Kan kun sige, at hvis du laver en php side:

<?php
  // KONKURRENCE AFVIKLINGS LOGIK
?>

Så vil logikken til afvikling af konkurrencer blive afviklet hver gang du besøger den side.
Avatar billede Milla-Tigerdyr Praktikant
12. oktober 2011 - 15:07 #6
Okay, men så jeg tager bare konkurrencen's id, og hesten's id?:)

- Jamen jeg forstår bare slet ikke hvordan jeg skal gøre det :s
Avatar billede majbom Novice
13. oktober 2011 - 22:06 #7
hvis du skal have noget der skal afgøre konkurrencen skal du jo have et krav til vinderen og finde ud af om der er nogle af deltagerne der opfylder de krav ved konkurrencens slutning.

du kan køre koden på planlagte tidspunkter ved hjælp af et såkaldt cronjob / planlagt opgave som kan oprettes på f.eks. cronjob.de eller setcronjob.com (det er de færreste low-budget hoteller der tilbyder denne service)

og som #5 er inde på kan vi jo ikke hjælpe dig med koden der afgør hvem der vinder, da du intet har fortalt om krav / afvikling eller noget som helst andet end en konkurrence...
Avatar billede Milla-Tigerdyr Praktikant
15. oktober 2011 - 11:53 #8
Splazz, jamen der ER jo ikke nogen krav til vinderen. Det skal bare være helt tilfældigt, også skal der selvfølgelig vælges en vinder indenfor alle kategorierne, så der bliver faktisk 24 vindere (hvis der er deltager til alle konkurrencerne).
Avatar billede danco Nybegynder
15. oktober 2011 - 16:18 #9
Okay jeg prøver lige at sammensætte en mere let-forståelig forklaring af hvad de øvrige i tråden prøver at sige.

I princippet kan den samme hest være tilmeldt i flere konkurrencer. I database sprog hedder det en "mange-til-mange relation" og den problematik løser man ved at lave en ny tabel med de to primær nøgler som sammensat nøgle.
I dette eksempel betyder det at du tager primærnøglen fra konkurrencen (typisk et ID) og primær nøglen fra Hesten (Også et ID) og indsætter i en helt ny tabel ("Tilmelding"). På den måde sikre du allerede i databasen at den samme hest ikke kan være tilmeldt den samme konkurrence flere gange. Når du så skal finde ud af hvilke heste der tilmeldt en konkurrence kan du lave en forespørgsel der hedder noget ala:
SELECT hid FROM Tilmeldinger WHERE kid=1

Så får du en lang liste ud over ID'er på de heste der er tilmeldt, udfra disse kan du så hente oplysninger omkring hesten og dens ejer.

Omkring at udvælge en tilfældig hest som vinder, der ville jeg nok vælge genererer et tilfældigt tal mellem 0 og antallet af heste i konkurrence og så sige at hesten der har den plads i listen har vundet. Illustreret ved nedenstående kode:

$konkurrenceID = 5;
$sql = "SELECT hid FROM Tilmeldinger WHERE kid=".$konkurrenceID;
$result = mysql_query($sql) or die(mysql_error());
$i = 0;
$list = array();
while($row = mysql_fetch_array($result)){
  $list[$i] = $row['hid'];
  $i++;
}
$winner = rand(0,count($list));
$winnerHorseID = $list[$winner];


Ovenstående er utestet men tankegangen burde være nogenlunde forståelig.
Avatar billede Milla-Tigerdyr Praktikant
15. oktober 2011 - 23:33 #10
Jeg er mere eller mindre med på det hele, og forstår godt det der med at jeg tager konkurrencens id, og hestens id, ind i en tabel.

Men det der kodestykke du har.. hvis vi nu siger at hesten her;
ID'en er 1, navnet er abc.
Abc er tilmeldt konkurrencen letøvet2, med ID'en 3.
Skal jeg så lave en kode (til tilmeldning), der indsætter hesten således at kid bliver 3, og hid bliver 1, (og evt. navn abc og ejer etellerandet), eller hvad?

Også efter..konkurrencen er afgjort(på en eller anden måde, forstår ikke hvordan :S), så skal jeg vel slette alt indhold på deltagere, således at næste dag, kan der komme nye deltagere ind?

Men..alt det der med kid og hid forvirre mig bare lidt :S Altså.. hvordan kan jeg skrive hvad konkurrence id'en er, når jeg ikke har lavet en sql og hentet den endnu? :S

Udover det, hvordan bestemmer jeg, hvornår den laver en vinder?
OG, hvor mange vindere laver den så? For der skal jo være en vinder, for alle 24 konkurrence...


Hvilket bringer mig til endnu et spørgsmål; Skal ALLE deltagere fra ALLE konkurrence, så være i "Tilmeldning"s-db'en, selvf. med forskelligt id på konkurrencen?
Avatar billede danco Nybegynder
16. oktober 2011 - 00:21 #11
Du har fuldstændig ret når det gælder tilmelding. Du kan vælge at tømme hele din telmelding tabel , eller du kan vælge at inkludere en dato så den ser således ud:

hestID - konkurrendeID - dato

Men der er ikke umiddelbart nogen grund til at have datoen med, medmindre du gerne vil have muligheden for at lave statistik.

Du har jo netop også konkurrence ID'et. Du laver et udtræk fra din tabel med konkurrencer som du skal afgøre en vinder fra.
Jeg tror allerbedst jeg kan forklare det med yderligere kode:

$sql = "SELECT id FROM konkurrencer";
$result = mysql_query($sql) or die(mysql_error());
while($row = mysql_fetch_array($result)) {
    $sql2 = "SELECT hid FROM tilmeldinger WHERE kid=".$row['id'];
    $result2 = mysql_fetch_array($sql2) or die(mysql_error());
    while($row2 = mysql_fetch_array($sql2)) {
        //Udvælg tilfældig vinder i blandt heste i konkurrencen
      //Gem hvem der vandt i konkurrencen
    }
}

Ovenstående kode er ikke så pænt, og der skal nok være folk der kan skrive det pænere, men det burde give en god idé om hvordan tankegangen er.

Hvornår den udvælger en vinder?
Ja det kan du jo kun ved at dokumentet bliver kaldt, og det kan du, som andre har sagt, gøre via et cronjob som dybest set bare en service der sørger for at bestemt PHP script bliver kaldt på et fast defineret tidspunkt. Det kunne fx. være kl. 18 hver dag.
Avatar billede majbom Novice
16. oktober 2011 - 06:54 #12
Men..alt det der med kid og hid forvirre mig bare lidt :S Altså.. hvordan kan jeg skrive hvad konkurrence id'en er, når jeg ikke har lavet en sql og hentet den endnu? :S


du opretter vel konkurrencerne inden brugerne får mulighed for at tilmelde sig? når konkurrencerne er oprettet kan brugerne se dem i en liste og tilmelde sig. når man vælger en konkurrence har du id'et dér og hestens id har du allerede i din session?

og du behøver ikke at smide andet end hestens id og konkurrencens id i tilmeldingstabellen (man skal have så lidt data-replikering som muligt og du skal derfor bruge JOINs når du skal hente noget ud fra tilmeldingstabellen.
Avatar billede Milla-Tigerdyr Praktikant
16. oktober 2011 - 09:12 #13
Danco: Alt det der med det der cronjob, var det ikke noget med at de fleste webhoteller ikke understøtter det eller sådan noget?:S
Jeg har aldrig brugt det, og aner ikke hvordan det skal bruges..

Jeg tror også jeg ville tilføje noget dato på, fordi der måtte gerne være en oversigt over hvem der havde vundet, indtil den nye konkurrence startede.


Splazz: Konkurrencerne ER oprettet. Jeg har ikke hestens id i en session nej, kun brugerens.
Jeg tror godt jeg forstår, hvordan jeg skal tilmelde dem konkurrencen, men det er mere alt det der med at efter kl. 18 skal man ikke kunne tilmelde sig (for der er den jo allerede afgjort), og det med afgørelsen jeg er sådan ret forvirret i..
Avatar billede majbom Novice
16. oktober 2011 - 12:10 #14
hvis du ikke vil rode med cronjobs, kan du jo kalde en funktion hver gang en side bliver kaldt, som tjekker om der er konkurrencer der skal afgøres - på den måde vil en konkurrence blive afgjort når den er slut og den første vil ind og se vindere osv.
Avatar billede Milla-Tigerdyr Praktikant
16. oktober 2011 - 13:46 #15
Splazz, jamen det ved jeg altså heller ikke hvordan jeg skal gøre? :S
Avatar billede majbom Novice
16. oktober 2011 - 16:52 #16
synes det er svært at forklare ret meget mere omkring det end der allerede er blevet her i tråden.

nu må du ikke misforstå mig, men måske du gaber for stort lige nu?
Avatar billede Milla-Tigerdyr Praktikant
17. oktober 2011 - 10:20 #17
Tja..mit problem er bare, at jeg ikke aner hvad det er for noget kode jeg skal skrive, og jeg ved heller ikke hvor jeg skal skrive det..
Har aldrig hørt om, at man ville kunne gøre således som i siger..Altså at jeg går ind på siden også bliver den afgjort?:S
Avatar billede JensPeterSvensson Nybegynder
17. oktober 2011 - 11:18 #18
I det efterfølgende indlæg kan der være fejl i PHP koden, da denne er skrevet direkte i dette forum og ikke testet.

Hvis du laver en fil kaldet hello.php på din hjemmeside med koden:

<?php
print 'hello';
?>

Vil du få udskrevet 'hello', hver gang du besøger siden på internettet:
http://www.waterhorses.yup.dk/hello.php

Med andre ord bliver PHP koden af siden afviklet hver gang du besøger siden.

Så hvis du udskifter den kode jeg skrev med logikken til at afvikle dine konkurrencer. Så vil dine konkurrencer blive afviklet hver gang du besøger den side.

Følgende kode antager at du har tabellerne, prikkerne er andre felter i tabellerne.
heste:
hest_id
..

konkurrencer
konkurrence_id
..

tilmeldinger:
hest_id
konkurrence_id

resultater:
hest_id
konkurrence_id
dato

afvikle.php:
<?php
// Det her taget fra din anden post:
$host="localhost"; // Host name
$username="users_camilla"; // Mysql username
$password=""; // Mysql password
$db_name="users_camilla"; // Database name
// Connect to server and select database.

mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");


//DET HER ER LOGIKKEN
$res = mysql_query('SELECT * FROM `tilmeldinger` ORDER konkurrence_id');

if(mysql_num_rows($res)>0){
  $now = time();
  $resultater = array();
  $konkurrence = array();
  $konkurrence[] = mysql_fetch_row($res);
  while($row = mysql_fetch_row($res)){
    if($konkurrence[0]['konkurrence_id']!=$row['konkurrence_id']){
      $vinder = array_rand($konkurrence);
      $resultater[] = '('.$vinder['konkurrence_id'].','.$vinder['hest_id'].','.$now.')';
      $konkurrence = array();
    }
    $konkurrence[] = $row;
  }
  $vinder = array_rand($konkurrence);
  $resultater[] = '('.$vinder['konkurrence_id'].','.$vinder['hest_id'].','.$now.');

  mysql_query('INSERT INTO `resultater`(`konkurrence_id`,`heste_id`,`tid`) VALUES'.implode(',',$resultater));
  mysql_query('DELETE FROM `tilmeldinger`');
}
?>


Tilmeldinger
I det link du har fra hesten til valg af konkurrencer. Kan du indkode hestens id i linket.
<a href="deltag_i_konkurrencer.php?hId=HEST_ID">Vælg konkurrencer</a>

Du må selv lige skrive deltag_i_konkurrencer.php og HEST_ID rigtigt.

I deltag_i_konkurrencer.php, Du skal selv lige skrive logikken til at teste om hesten er brugerens. Det burde være en simpel select hvor du teste om du får en række når du søger med hestens id og brugerens.
<?php
session_start();
// Det her taget fra din anden post:
$host="localhost"; // Host name
$username="users_camilla"; // Mysql username
$password=""; // Mysql password
$db_name="users_camilla"; // Database name
// Connect to server and select database.

mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

if(isset($_POST['sumibt'])){
  $tilmeld = true;
  if(!is_numeric($_GET['hId'])){
    $tilmeld = false;
  }

  if(!is_numeric($_POST['konkurrence'])){
    $tilmeld = false;
  }

  // INDSÆT HER LOGIK TIL AT TESTE OM HESTEN ER BRUGERENS
  if($tilmeld){
    $res = mysql_query('SELECT 1 FROM `konkurrencer` WHERE `konkurrence_id`='.$_POST['konkurrence'].' LIMIT 1);
    if(mysql_num_rows($res)==0){
      $tilmeld = false;
    }
  }
  if($tilmeld){
    mysql_query('INSERT INTO `tilmeldinger`(`konkurrence_id`,`hest_id`) VALUES('.$_POST['konkurrence'].','.$_GET['hId'].')');
  }
}


$konkurrencer = mysql_query('SELECT * FROM `konkurrencer`');
?>
<form action="deltag_i_konkurrencer.php?hId=<?php echo $_GET['hId'];?>" method="post">
<select name="konkurrence">
<?php
while($row = mysql_fetch_row($konkurrence)){
  echo '<option value="'.$row['konkurrence_id'].'">'.$row['name'];
}
?>
</select>
  <input type="submit" name="submit" value="Deltag"/>
</form>
Avatar billede Milla-Tigerdyr Praktikant
17. oktober 2011 - 11:25 #19
JensPeterSvensson, tak nu har jeg i hvert fald noget at gå ud fra.
Jeg tror at jeg lige vil få oprettet de databaser der skal bruges, også skal de koder der selvfølgelig rettes til, evt. ændres lidt på..
Men jeg vil forsøge :)

Lige et spørgsmål..i afvikle.php er det en kode kun JEG skal have adgang til?
Avatar billede JensPeterSvensson Nybegynder
17. oktober 2011 - 11:36 #20
Ja, hvis alle har adgang til det kan alle jo afvikle konkurrencer når som helst.

Ideen er at du besøger siden med den pågældende kode hverdag kl 18.00.

Alternativt kan du gøre som nummer #14 foreslår. Men det er en del mere besværligt. Det er reelt set den kode jeg skrev omkranset af en test på om der er nogen konkurrencer der skal afvikles.
Avatar billede Milla-Tigerdyr Praktikant
17. oktober 2011 - 11:41 #21
Når jeg så besøger denne side, afvikler den så alle konkurrencerne?
Og hvad så hvis folk prøvede at deltage i en konkurrence, efter kl. 18?:)
Avatar billede JensPeterSvensson Nybegynder
17. oktober 2011 - 11:49 #22
Den afvikler dem alle og sletter tilmeldinger. Så hvis folk tilmelder sig efter du har besøgt siden tilmelder de sig til konkurrencen næste dag (næste gang du besøger siden.).
Avatar billede Milla-Tigerdyr Praktikant
17. oktober 2011 - 12:02 #23
Okay, men hvordan kan DE så se vinderne fra den forrige konkurrence?
Avatar billede JensPeterSvensson Nybegynder
17. oktober 2011 - 13:26 #24
Vinderen af en konkurrence lndsættes i resultater tabellen.

Så kan du jo lave forskellige selects på den.

Sidste vindere af alle konkurrencer:

SELECT * FROM `resultater` GROUP_BY `konkurrence_id` ORDER BY `dato` LIMIT 1

Mest vindende heste:
SELECT `hest_id`, COUNT(1) AS c FROM `resultater` GROUP_BY `hest_id` ORDER BY c DESC

Konkurrence historie:
SELECT `hest_id`, `dato` FROM `resultater` WHERE `konkurrence_id`=$id ORDER BY `dato` DESC


Du kan sikker selv finde på flere.
Avatar billede Milla-Tigerdyr Praktikant
03. november 2011 - 09:15 #25
Hej, jeg tænkte på noget her i koden deltag.php;

$_POST['konkurrence']

Hvor kommer den fra? Fordi jeg har da ikke postet noget?
- Udover det, så når man er inde og skal deltage i en konkurrence har jeg bare linket til deltag.php, og du tjekker jo om der er blevet trykket på knappen? :)
Avatar billede JensPeterSvensson Nybegynder
04. november 2011 - 16:19 #26
$_POST['konkurrence'] kommer fra formen sidst i post #18
Avatar billede Milla-Tigerdyr Praktikant
04. november 2011 - 16:38 #27
Jaja, det ved jeg godt, men jeg mener bare at hvor får du nogen konkurrence værdi fra? Er det noget der ER i koden, eller noget der skal være inden eller hvad??

Fordi jeg har ikke skrevet noget med nogen konkurrence, som den kan hente?? :S

- Koden vil nemlig ikke virke..
Avatar billede JensPeterSvensson Nybegynder
05. november 2011 - 08:05 #28
Se kommentarene:

$konkurrencer = mysql_query('SELECT * FROM `konkurrencer`');//<-- Henter alle konkurrencer i konkurrencer tabellen
?>
<form action="deltag_i_konkurrencer.php?hId=<?php echo $_GET['hId'];?>" method="post">
  <select name="konkurrence">
  <?php
  //Udskriver en option for hver hentede konkurence
  while($row = mysql_fetch_row($konkurrence)){
    echo '<option value="'.$row['konkurrence_id'].'">'.$row['name'];
  }
  ?>
  </select>
  <input type="submit" name="submit" value="Deltag"/>
</form>
Avatar billede Milla-Tigerdyr Praktikant
05. november 2011 - 08:14 #29
Okay, men kan virkelig ikke få den til at virke? (arbejder lige nu med deltag.php)
Avatar billede Milla-Tigerdyr Praktikant
05. november 2011 - 08:32 #30
Hej, jeg har nu fundet ud af ved at side og "skujle" dele af koden, at det er dette stykke der er noget galt med, hvad ved jeg ikke??

  // INDSÆT HER LOGIK TIL AT TESTE OM HESTEN ER BRUGERENS
  if($tilmeld){
    $res = mysql_query('SELECT 1 FROM `konkurrencer` WHERE `konkurrence_id`='.$_POST['konkurrence'].' LIMIT 1);
    if(mysql_num_rows($res)==0){
      $tilmeld = false;
    }
Avatar billede Milla-Tigerdyr Praktikant
05. november 2011 - 08:34 #31
Glem det der  var fordi der manglede et "'" tegn til sidst i queryen.

Men nu, når man går ind, er der bare en blank/hvid dropdown også en deltag knab??
Avatar billede Milla-Tigerdyr Praktikant
05. november 2011 - 08:37 #32
Ehm.. altså jeg har jo allerede en oversigt over hvilke konkurrencer man kan deltage i (alt efter niveau), så den skal jo bare tilmelde en, til den konkurrence der er klikket på??
Avatar billede JensPeterSvensson Nybegynder
05. november 2011 - 08:57 #33
Det ville måske være en ide, hvis du oprettede en test bruger man kunne bruge.

Men som jeg husker denne tråd (Den er ret gammel). Så havde du følgende use case:

1. Bruger vises side en side med sine heste.
2. Bruger vælger en af hestene.
3. Bruger vises en side med de konkurrencer den valgte hest kan deltage i.
4. Bruger vælger konkurrence hesten skal deltage i.
5. Systemet sætter hest til at deltage i den valgte konkurrence.

Du havde allerede selv skrevet skridt 1.

- Min selectboks ville så være skridt 3.
- Og koden i toppen if(isset($_POST['submit'])){....} ville være skridt 5.
Avatar billede Milla-Tigerdyr Praktikant
05. november 2011 - 08:58 #34
Hey har fået deltag.php til at virke med en meget simpel sql i stedet.

Jeg kigger lige på afvikle.php, den er jo mere avanceret..:)
Avatar billede Milla-Tigerdyr Praktikant
05. november 2011 - 09:01 #35
Ehm..kan man gøre sådan at hesten kun kan deltage i konkurrencen én gang?
Avatar billede JensPeterSvensson Nybegynder
05. november 2011 - 09:07 #36
Hvis du i din tilmeldinger tabel sætter kombinationen af hest_id og konkurrence_id til at være unik. Bliver det umuligt for en hest at deltage i den samme konkurrence.

hvis du har phpmyadmin, vælger du under struktur/structure de to felter og klikker på unik/unique knappen under felt listen.
Avatar billede Milla-Tigerdyr Praktikant
05. november 2011 - 09:12 #37
Jamen hesten må jo gerne deltage i FLERE konkurrencer, bare ikke i samme? :s
Avatar billede JensPeterSvensson Nybegynder
05. november 2011 - 09:27 #38
Du skal notere dig ordet kombination i foregående post.
Avatar billede Milla-Tigerdyr Praktikant
05. november 2011 - 09:32 #39
Er det her så rigtigt?

http://i41.tinypic.com/9a1jfb.png
Avatar billede JensPeterSvensson Nybegynder
05. november 2011 - 09:43 #40
Ja
Avatar billede Milla-Tigerdyr Praktikant
05. november 2011 - 09:47 #41
Okay super.
Men jeg kan ikke få afvikle.php til at virke?? Sådan ser den ud nu(med lidt til-retninger)
  <?
session_start();
include("functions.php");
error_reporting(E_ALL);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<link href="style.css" rel="stylesheet" type="text/css">
<?php

$userid = $_SESSION['userid'];
if(!is_numeric($userid)) { die('Af sikkerhedsmæssige årsager er siden stoppet i at loade. Kontakt webmaster hvis fejlen fortsætte'); exit(); }

$host="localhost"; // Host name
$username="users_camilla"; // Mysql username
$password=""; // Mysql password
$db_name="users_camilla"; // Database name
// Connect to server and select database.

mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");


//DET HER ER LOGIKKEN
$res = mysql_query('SELECT * FROM `tilmeldinger` ORDER kid');

if(mysql_num_rows($res)>0){
  $now = time();
  $resultater = array();
  $konkurrence = array();
  $konkurrence[] = mysql_fetch_row($res);
  while($row = mysql_fetch_row($res)){
    if($konkurrence[0]['kid']!=$row['kid']){
      $vinder = array_rand($konkurrence);
      $resultater[] = '('.$vinder['kid'].','.$vinder['hid'].','.$now.')';
      $konkurrence = array();
    }
    $konkurrence[] = $row;
  }
  $vinder = array_rand($konkurrence);
  $resultater[] = '('.$vinder['kid'].','.$vinder['hid'].','.$now.');

  mysql_query('INSERT INTO `resultater`(`kid`,`hid`,`dato`) VALUES'.implode(',',$resultater));
  mysql_query('DELETE FROM `tilmeldinger`');
}
?>
Avatar billede JensPeterSvensson Nybegynder
05. november 2011 - 09:57 #42
prøv at skrive ORDER BY i stedet for bare ORDER
Avatar billede Milla-Tigerdyr Praktikant
05. november 2011 - 10:01 #43
Der sker stadig ikke noget. :S
Avatar billede JensPeterSvensson Nybegynder
05. november 2011 - 10:08 #44
hvad får du, hvis du skriver:
ini_set('display_errors','1');

i toppen af filen?
Avatar billede Milla-Tigerdyr Praktikant
05. november 2011 - 11:09 #45
Hej, undskyld mit net gik lige.

Jeg får stadig bare en blank side, og der sker intet i  databasen.
Avatar billede JensPeterSvensson Nybegynder
05. november 2011 - 11:23 #46

  <?
session_start();
include("functions.php");
error_reporting(E_ALL);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ (...)
<link href="style.css" rel="stylesheet" type="text/css">
<?php

$userid = $_SESSION['userid'];
if(!is_numeric($userid)) { die('Af sikkerhedsmæssige årsager er siden stoppet i at loade. Kontakt webmaster hvis fejlen fortsætte'); exit(); }

$host="localhost"; // Host name
$username="users_camilla"; // Mysql username
$password=""; // Mysql password
$db_name="users_camilla"; // Database name
// Connect to server and select database.

mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");


//DET HER ER LOGIKKEN
$res = mysql_query('SELECT * FROM `tilmeldinger` ORDER kid');

if(mysql_num_rows($res)>0){
  $now = time();
  $resultater = array();
  $konkurrence = array();
  $konkurrence[] = mysql_fetch_assoc($res);
  while($row = mysql_fetch_assoc($res)){
    if($konkurrence[0]['kid']!=$row['kid']){
      $vinder = array_rand($konkurrence);
      echo 'Vinder hest:'.$vinder['hid'].' af konkurrence '.$vinder['kid'];
      $resultater[] = '('.$vinder['kid'].','.$vinder['hid'].','.$now.')';
      $konkurrence = array();
    }
    $konkurrence[] = $row;
  }
  $vinder = array_rand($konkurrence);
  echo 'Vinder hest:'.$vinder['hid'].' af konkurrence '.$vinder['kid'];
  $resultater[] = '('.$vinder['kid'].','.$vinder['hid'].','.$now.');

  mysql_query('INSERT INTO `resultater`(`kid`,`hid`,`dato`) VALUES'.implode(',',$resultater));
  mysql_query('DELETE FROM `tilmeldinger`');
}else{
  echo 'Der var ingen tilmeldinger';
}
?>
Avatar billede Milla-Tigerdyr Praktikant
05. november 2011 - 11:27 #47
Blank side, også sker der intet i databasen.
Avatar billede JensPeterSvensson Nybegynder
05. november 2011 - 12:03 #48
Hvis det her giver en blank side kan jeg ikke se fejlen :).

<?
ini_set('display_errors','1');
session_start();
include("functions.php");
error_reporting(E_ALL);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ (...)
<link href="style.css" rel="stylesheet" type="text/css">
<?php

$userid = $_SESSION['userid'];
if(!is_numeric($userid)) { die('Af sikkerhedsmæssige årsager er siden stoppet i at loade. Kontakt webmaster hvis fejlen fortsætte'); exit(); }

$host="localhost"; // Host name
$username="users_camilla"; // Mysql username
$password=""; // Mysql password
$db_name="users_camilla"; // Database name
// Connect to server and select database.

mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");


//DET HER ER LOGIKKEN
$res = mysql_query('SELECT * FROM `tilmeldinger` ORDER BY kid') or die('Fejl sted 1');

if(mysql_num_rows($res)>0){
  $now = time();
  $resultater = array();
  $konkurrence = array();
  $konkurrence[] = mysql_fetch_assoc($res);
  while($row = mysql_fetch_assoc($res)){
    if($konkurrence[0]['kid']!=$row['kid']){
      $vinder = array_rand($konkurrence);
      echo 'Vinder hest:'.$vinder['hid'].' af konkurrence '.$vinder['kid'];
      $resultater[] = '('.$vinder['kid'].','.$vinder['hid'].','.$now.')';
      $konkurrence = array();
    }
    $konkurrence[] = $row;
  }
  $vinder = array_rand($konkurrence);
  echo 'Vinder hest:'.$vinder['hid'].' af konkurrence '.$vinder['kid'];
  $resultater[] = '('.$vinder['kid'].','.$vinder['hid'].','.$now.');

  mysql_query('INSERT INTO `resultater`(`kid`,`hid`,`dato`) VALUES'.implode(',',$resultater)) or die('Fejl sted 2');
  mysql_query('DELETE FROM `tilmeldinger`') or die('Fejl sted 3');
}else{
  echo 'Der var ingen tilmeldinger';
}
?>
Avatar billede Milla-Tigerdyr Praktikant
05. november 2011 - 12:25 #49
Stadig blank. ):
Avatar billede Milla-Tigerdyr Praktikant
05. november 2011 - 12:31 #50
Ved at bruge de der /* og */ tegn til at indramme kode, ser det ud som om der er noget galt med dette;


  echo 'Vinder hest:'.$vinder['hid'].' af konkurrence '.$vinder['kid'];
  $resultater[] = '('.$vinder['kid'].','.$vinder['hid'].','.$now.');
hvad, ved jeg ikke. :S
Avatar billede Milla-Tigerdyr Praktikant
05. november 2011 - 12:32 #51
rettere sagt, denne linje:

  $resultater[] = '('.$vinder['kid'].','.$vinder['hid'].','.$now.');
Avatar billede JensPeterSvensson Nybegynder
05. november 2011 - 12:53 #52
Det her virker. I øvrigt bruger du ikke en syntaksfarvende editor?


<?
ini_set('display_errors','1');
session_start();
include("functions.php");
error_reporting(E_ALL);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ (...)
<link href="style.css" rel="stylesheet" type="text/css">
<?php

$userid = $_SESSION['userid'];
if(!is_numeric($userid)) { die('Af sikkerhedsmæssige årsager er siden stoppet i at loade. Kontakt webmaster hvis fejlen fortsætte'); exit(); }

$host="localhost"; // Host name
$username="users_camilla"; // Mysql username
$password=""; // Mysql password
$db_name="users_camilla"; // Database name
// Connect to server and select database.

mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");


//DET HER ER LOGIKKEN
$res = mysql_query('SELECT * FROM `tilmeldinger` ORDER BY kid') or die('Fejl sted 1');

if(mysql_num_rows($res)>0){
  $now = time();
  $resultater = array();
  $konkurrence = array();
  $konkurrence[] = mysql_fetch_assoc($res);
  while($row = mysql_fetch_assoc($res)){
    if($konkurrence[0]['kid']!=$row['kid']){
      $vinder = $konkurrence[array_rand($konkurrence)];
      var_dump($vinder);
      echo 'Vinder hest:'.$vinder['hid'].' af konkurrence '.$vinder['kid'].'<br>';
      $resultater[] = '('.$vinder['kid'].','.$vinder['hid'].','.$now.')';
      $konkurrence = array();
    }
    $konkurrence[] = $row;
  }
  $vinder = $konkurrence[array_rand($konkurrence)];
  echo 'Vinder hest:'.$vinder['hid'].' af konkurrence '.$vinder['kid'];
  $resultater[] = '('.$vinder['kid'].','.$vinder['hid'].','.$now.')';

  mysql_query('INSERT INTO `resultater`(`kid`,`hid`,`dato`) VALUES'.implode(',',$resultater)) or die('Fejl sted 2');
  mysql_query('DELETE FROM `tilmeldinger`') or die('Fejl sted 3');
}else{
  echo 'Der var ingen tilmeldinger';
}
?>
Avatar billede Milla-Tigerdyr Praktikant
05. november 2011 - 15:49 #53
Ehm..altså nej jeg bruger bare notesblokken? Kan nemlig ikke få filezilla (min ftp) til at åbne i notepad++, så er det nemmere at bruge notesblokken..'


- Jeg tester
Avatar billede Milla-Tigerdyr Praktikant
05. november 2011 - 15:51 #54
Det virker næsten, men den udskriver;
array(2) { ["kid"]=> string(1) "0" ["hid"]=> string(2) "19" } Vinder hest:19 af konkurrence 0
array(2) { ["kid"]=> string(1) "3" ["hid"]=> string(3) "107" } Vinder hest:107 af konkurrence 3
Vinder hest:19 af konkurrence 9
Avatar billede Milla-Tigerdyr Praktikant
05. november 2011 - 15:55 #55
Udover det, så i deltag.php kan man kun deltage i én konkurrence så får jeg fejl.

Deltag.php:
<?
session_start();
include("functions.php");
error_reporting(E_ALL);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<link href="style.css" rel="stylesheet" type="text/css">
<?php
$userid = $_SESSION['userid'];
if(!is_numeric($userid)) { die('Af sikkerhedsmæssige årsager er siden stoppet i at loade. Kontakt webmaster hvis fejlen fortsætte'); exit(); }

$host="localhost"; // Host name
$username="users_camilla"; // Mysql username
$password="9wdDEedFZ8WYDF7n"; // Mysql password
$db_name="users_camilla"; // Database name
// Connect to server and select database.

mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

$kid=$_GET['kid'];
$hid=$_GET['hid'];

$query = "INSERT INTO tilmeldinger (kid, hid) VALUES ('$kid', '$hid')";
mysql_query($query) or die('Der er sket en fejl. Tech-spec:<br>'.$query.'<br>'.mysql_error());

//Hvis MySQL retunere succesfuld indsættelse gem session og viderestil til anden siden

?>
Din hest er nu tilmeldt konkurrencen!



Og fejlen jeg får er:
Der er sket en fejl. Tech-spec:
INSERT INTO tilmeldinger (kid, hid) VALUES ('', ' 44')
Duplicate entry '0-44' for key 1
Avatar billede JensPeterSvensson Nybegynder
05. november 2011 - 17:42 #56
Den første fejl #55 er fordi jeg glemte at fjerne var_dump linjen. Den linje kan du bare slette.

Det andet er ikke en fejl, men du skal nok rette koden til:

$query = "INSERT INTO tilmeldinger (kid, hid) VALUES ('$kid', '$hid')";
mysql_query($query);
if(mysql_errno() == 1062){
  echo 'Du kan kun deltage engang i samme konkurrence';
}else if(mysql_errno() != 0){
  die('Der er sket en fejl. Tech-spec:<br>'.$query.'<br>'.mysql_error());
}
Avatar billede Milla-Tigerdyr Praktikant
05. november 2011 - 17:57 #57
Ehm nu siger den:

Du kan kun deltage engang i samme konkurrenceDin hest er nu tilmeldt konkurrencen!
Avatar billede JensPeterSvensson Nybegynder
05. november 2011 - 18:01 #58
Det vel også næsten rigtigt hvis du lige dele 'engang' til 'en gang'

Hvis du ikke vil se den sidste linje kan du skrive den ind i en else blok:

$query = "INSERT INTO tilmeldinger (kid, hid) VALUES ('$kid', '$hid')";
mysql_query($query);
if(mysql_errno() == 1062){
  echo 'Du kan kun deltage engang i samme konkurrence';
}else if(mysql_errno() != 0){
  die('Der er sket en fejl. Tech-spec:<br>'.$query.'<br>'.mysql_error());
}else{
  echo 'Din hest er nu tilmeldt konkurrencen!';
}
Avatar billede Milla-Tigerdyr Praktikant
05. november 2011 - 18:20 #59
Jaaa det virker!:D

Nu kan jeg så komme i gang med at udvikle det mere til min side, tusind tak! :D

Smider du lige et svar?:)
Avatar billede JensPeterSvensson Nybegynder
05. november 2011 - 19:27 #60
Svar
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