Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[PHP/SQL] Beginnersgebrek:

Pagina: 1
Acties:
  • 75 views sinds 30-01-2008

Verwijderd

Topicstarter
Hoi :)

Ik ben een überbeginner mbt PHP & SQL *schaam* en ik zit met wat gebrek aan kennis.

De situatie
Ik heb een wedstrijd verzonnen voor nachtbrakers op mijn forum. Tussen 00:00u en 05:00u dienen ze te posten op mijn forum. Degene die het laatste bericht post wint. Meestal is dat om 04:59. Tijdens de deelname wordt iedereen geregistreerd in de database. Om 05:00u is de wedstrijd afgelopen en blijft de winnaar als enige staan in de database.

Voor elke 10x dat iemand heeft gewonnen wil ik een onderscheiding uitdelen. Als iemand 20x gewonnen heeft krijgt hij/zij dus automatisch een 2e onderscheiding.

De fout
Het werkt niet goed omdat ik niet weet hoe ik die WHILE correct uitvoer. Die while moet als het ware zeggen: voor elke 10 keer dat die userID voorkomt WHERE contestFinished='Y' moet die gebruiker één plaatje als award krijgen.


<?php

function drawNacht($userID)
{


$sql = "SELECT COUNT(userID) AS tienkeer FROM contest WHERE contestFinished = 'Y'";
$result = $this->db->query($sql);

while ($row = $this->db->fetch_object($result) AND tienkeer > 10)
{

$this->output .= "<img src=\"img/smileys/20.gif\" border=\"0\" title=\"10 x Nachtbraker\" alt=\"10 x Nachtbraker\" />";
}
return $this->output;
}

?>

Die AND hoort daar helemaal niet thuis. Hoe moet dit wel? :S

Thanks :)

Verwijderd

And = &&

Verder heb ik er ook niet veel verstand van, maar dit wist ik nog wel :)


Edit:
AND is in PHP ook geldig hoor :)
:$ Ik houd me voortaan maar met gamen bezig :D

[ Voor 122% gewijzigd door Verwijderd op 08-01-2008 20:16 ]


  • Bitage
  • Registratie: April 2006
  • Laatst online: 19-05-2024
Verwijderd schreef op dinsdag 08 januari 2008 @ 20:09:
And = &&

Verder heb ik er ook niet veel verstand van, maar dit wist ik nog wel :)
AND is in PHP ook geldig hoor :)

Voor de rest is tienkeer geen var maar een (ongeldige) string. Je moet er natuurlijk wel een $ $row->tienkeer voor zetten.

Voor de rest zou ik ipv die while een if-statement maken en dan floor($row->tienkeer / 10); gebruiken. Dit laatste resulteerd bij bv. 37 posts in 37 / 10 = 3.7 = afgerond naar beneden 3.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
function drawNacht($userID)
{

  // Query's uitvoeren en resultaat fetchen
  $sql = "SELECT COUNT(userID) AS tienkeer FROM contest WHERE contestFinished = 'Y'";
  $result = $this->db->query($sql);

  // Resultaat verwerken
  while ($row = $this->db->fetch_object($result))
  {

    // Aan de hand van aantal posts, aantal sterren berekenen
    // Vervolgens zoveel sterren plaatsen
    $num = floor($row->tienkeer / 10);
    while($num > 0)
    {

      // Sterren bij de output schrijven
      $this->output .= "<img src=\"img/smileys/20.gif\" border=\"0\" title=\"10 x Nachtbraker\" alt=\"10 x Nachtbraker\" />";
      $num = $num - 1;

    }

  }

  return $this->output;

}

?> 

[ Voor 82% gewijzigd door Bitage op 08-01-2008 20:36 ]


  • zwippie
  • Registratie: Mei 2003
  • Niet online

zwippie

Electrons at work

^^ Wat Bitage zegt, gewoon delen door 10, maar dan met floor in plaats van ceil. :)
En dan een for of while loop om een x aantal sterren te plaatsen.

How much can you compute with the "ultimate laptop" with 1 kg of mass and 1 liter of volume? Answer: not more than 10^51 operations per second on not more than 10^32 bits.


  • Bitage
  • Registratie: April 2006
  • Laatst online: 19-05-2024
maar dan met floor in plaats van ceil.
Je hebt gelijk. Was even in de war :)

Verwijderd

Topicstarter
Oké, ik ga het even proberen (Y)

Verwijderd

Topicstarter
Bitage schreef op dinsdag 08 januari 2008 @ 20:12:
[...]

AND is in PHP ook geldig hoor :)

Voor de rest is tienkeer geen var maar een (ongeldige) string. Je moet er natuurlijk wel een $ $result->tienkeer voor zetten.

Voor de rest zou ik ipv die while een if-statement maken en dan floor($result->tienkeer / 10); gebruiken. Dit laatste resulteerd bij bv. 37 posts in 37 / 10 = 3.7 = afgerond naar beneden 3.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
function drawNacht($userID)
{

  // Query's uitvoeren en resultaat fetchen
  $sql = "SELECT COUNT(userID) AS tienkeer FROM contest WHERE contestFinished = 'Y'";
  $result = $this->db->query($sql);

  // Resultaat verwerken
  while ($row = $this->db->fetch_object($result))
  {

    // Aan de hand van aantal posts, aantal sterren berekenen
    // Vervolgens zoveel sterren plaatsen
    $num = floor($result->tienkeer / 10);
    while($num > 0)
    {

      // Sterren bij de output schrijven
      $this->output .= "<img src=\"img/smileys/20.gif\" border=\"0\" title=\"10 x Nachtbraker\" alt=\"10 x Nachtbraker\" />";
      $num = $num - 1;

    }

  }

  return $this->output;

}

?> 
Hmmmm, weird.... de PHP zit volgens mij goed in elkaar, maar hij geeft de sterren niet weer :/

  • Bitage
  • Registratie: April 2006
  • Laatst online: 19-05-2024
Hmmmm, weird.... de PHP zit volgens mij goed in elkaar, maar hij geeft de sterren niet weer :/
Heb hem net nog even verbeterd namelijk. Had $result-> gebruikt ipv $row-> 8)7
Nu moetie goed zijn.

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Leer debuggen. Gebruik echo() en var_dump() statements om te kijken wat er gebeurd en wat je variabelen inhouden.

Hint: Als je bijvoorbeeld een var_dump($result->tienkeer) doet binnen die loop, zie je meteen wat er fout is. ;)

{signature}


  • TheBorg
  • Registratie: November 2002
  • Laatst online: 13:01

TheBorg

Resistance is futile.

Let wel op dat && en AND niet hetzelfde zijn:
http://nl3.php.net/manual/en/language.operators.logical.php

Verwijderd

Topicstarter
Yep, hij geeft weer... Ik heb een testuser die 22 keer in de database staat. Hij zou dus 2 sterren moeten krijgen... Hij geef alleen iets van 100 sterren weer :P


PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php 
function drawNacht($userID)
    {
    
  // Query's uitvoeren en resultaat fetchen
  $sql = "SELECT COUNT(userID) AS tienkeer FROM contest WHERE contestFinished = 'Y'";
  $result = $this->db->query($sql);

  // Resultaat verwerken
  while ($row = $this->db->fetch_object($result))
  {

    // Aan de hand van aantal posts, aantal sterren berekenen
    // Vervolgens zoveel sterren plaatsen
    $num = ceil($row->tienkeer / 10);
    while($num > 0)
    {

      // Sterren bij de output schrijven
      $this->output .= "<img src=\"img/smileys/20.gif\" border=\"0\" title=\"10 x Nachtbraker\" alt=\"10 x Nachtbraker\" />";
      $num = $num - 1;

                }
        }
        return $this->output;
    }
?>

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Verwijderd schreef op dinsdag 08 januari 2008 @ 20:42:
Yep, hij geeft weer... Ik heb een testuser die 22 keer in de database staat. Hij zou dus 2 sterren moeten krijgen... Hij geef alleen iets van 100 sterren weer :P
Dat is ook logisch met deze query, je vraagt namelijk het totaal aantal winnaars op en niet het aantal keren dat user 22 gewonnen heeft.

Verwijderd

Topicstarter
GlowMouse schreef op dinsdag 08 januari 2008 @ 20:45:
[...]

Dat is ook logisch met deze query, je vraagt namelijk het totaal aantal winnaars op en niet het aantal keren dat user 22 gewonnen heeft.
Ja, dat moet ik hebben!

( :$ :$ )

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Je wil dus tellen per user, maar ik stel voor dat je eerst een sql tutorial doorneemt alvorens de vraag hier te stellen. :) Uiteindelijk schiet je daar meer mee op dan wanneer je elke 5 minuten een basic vraag moet stellen hier. :>

edit:
@Bitage hieronder, dat verschil boeit echt totaal niet. De huidige vraag is eenvoudig, zolang je maar de sql select syntax kent (wil leren). Het antwoord geven is minder werk dan het tikken van dit verhaal, maar daar leert niemand iets van.

[ Voor 35% gewijzigd door Voutloos op 08-01-2008 20:51 ]

{signature}


  • Bitage
  • Registratie: April 2006
  • Laatst online: 19-05-2024
Nja, dan maar op mijn eigen manier. Ik haat OO programming (denk alleen wel dat ik hier eens aan zal moeten geloven, maargoed :9)
Quick'n'dirty
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function drawNacht()
{

  // Query's uitvoeren + fetchen
  $query = mysql_query("SELECT COUNT(userID) AS tienkeer FROM contest WHERE contestFinished = 'Y' AND userid = '".$_SESSION['uid']."' LiMIT 1");
  $data  = mysql_fetch_assoc($query);

  // Aantal sterren 'x' bepalen en 'x' van deze weergeven
  $num = floor($data['tienkeer'] / 10);
  while($num > 0)
  {
    
    echo "<img src=\"img/smileys/20.gif\" border=\"0\" title=\"10 x Nachtbraker\" alt=\"10 x Nachtbraker\" />";
    $num = $num - 1;
    
  }

}


Naar aanleiding van de 2 posts boven mij ook een extra WHERE-parameter meegegeven.

edit:
@Bitage hieronder, dat verschil boeit echt totaal niet. De huidige vraag is eenvoudig, zolang je maar de sql select syntax kent (wil leren). Het antwoord geven is minder werk dan het tikken van dit verhaal, maar daar leert niemand iets van.

True, had dan ook de foute parameter over het hoofd gezien. Over het door mij vet gedrukte stukje: ik ken de syntax juist heel goed. As a matter of fact ben ik continu bezig met databases. Kwestie van over het hoofd gezien.

[ Voor 35% gewijzigd door Bitage op 08-01-2008 20:57 ]


Verwijderd

Topicstarter
Thanks, het werkt!

Ik ga me leren debuggen en SQL doornemen. _/-\o_

  • Kwastie
  • Registratie: April 2005
  • Laatst online: 17-11 14:28

Kwastie

Awesomeness

ik wil er even op wijzen dat mysql_fetch_assoc sneller is dan mysql_fetch_object. Ipv $result->data moet je $result['data'] ; doen om je data te 'openen'
succes er verder mee.

[ Voor 6% gewijzigd door Kwastie op 08-01-2008 21:14 ]

When I get sad i stop being sad and be awesome instead


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Hallo IcarusIcarus,

Een topic als deze hoort eigenlijk in Programming. Echter dit topic doorlezen kom ik tot de conclusie dat het totaal niet voldoet aan onder andere Welkom in Programming - FAQ en Beleid. Daarom ga ik dit topic sluiten en je vragen even naar tutorials betreffende je talen en omgevingen te kijken.

Succes verder!

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.

Pagina: 1

Dit topic is gesloten.