Wedstrijden controleren (Opgelost)
roelh - 09/05/2012 10:00 (laatste wijziging 09/05/2012 11:40)
PHP gevorderde
Hallo allemaal,
Het EK komt eraan en ik wil voor mn vrienden een kleine WK poule opzetten.
Ze kunnen wedstrijden voorspellen en daarvoor krijgen ze uiteraard punten.
Nu kunnen ze uitslagen toevoegen en die komen in de DB. Maar hoe controleer ik wanneer ik de uitslagen ingevuld heb, of die kloppen en punten toedelen aan één ieder?
Uitslag precies goed 10 punten ofzo, winnaar goed 7 en zo door gaan.
Wie kan me helpen met het opzetje?
Dank alvast!
Dit hier heb ik al. Alleen wanneer een gewonnen wedstrijd goed is, maar niet de precieze uitslag kom ik er niet uit.
En hoe ga ik uiteindelijk alle users hier doorheen halen? Foreach? En dit wil ik automatisch wanneer ik de uitslagen invoer...
$uitslag1 = 3;
$uitslag2 = 2;
$voorspelling1 = 1;
$voorspelling2 = 0;
// if($arr['uitslagthuis'] < $arr['uitslaguit'])
if($uitslag1 < $voorspelling1 AND $uitslag2 < $voorspelling2):
echo 'Ze hebben gewonnen, maar je hebt het niet goed voorspeld.';
$punten = 3;
elseif ($uitslag1 == $voorspelling1 AND $uitslag2 == $voorspelling2):
echo 'Je hebt het precies goed voorspelt!';
$punten = 7;
else:
echo 'Je hebt het niet goed voorspeld';
$punten = 0;
echo $punten;
endif;
?>
$uitslag1 = 3 ;
$uitslag2 = 2 ;
$voorspelling1 = 1 ;
$voorspelling2 = 0 ;
// if($arr['uitslagthuis'] < $arr['uitslaguit'])
if ( $uitslag1 < $voorspelling1 AND $uitslag2 < $voorspelling2 ) :
echo 'Ze hebben gewonnen, maar je hebt het niet goed voorspeld.' ; $punten = 3 ;
elseif ( $uitslag1 == $voorspelling1 AND $uitslag2 == $voorspelling2 ) :
echo 'Je hebt het precies goed voorspelt!' ; $punten = 7 ;
else :
echo 'Je hebt het niet goed voorspeld' ; $punten = 0 ;
endif ;
?>
Groet,
8 antwoorden
Gesponsorde links
Martijn - 09/05/2012 11:41 (laatste wijziging 09/05/2012 11:57)
Crew PHP
users
id, naam,hun_score
uitslagtabel
id,partij1, partij2, uid (user_id)
$query = mysql_query("SELECT * FROM uitslagtabel") or die(mysql_error());
$score1 = 3; // daadwerkelijke score van partij1
$score2 = 1; // daadwerkelijke score van partij2
while($fetch = mysql_fetch_assoc($query)){
if($fetch['partij1'] == $score1 && $fetch['partij2'] == $score2){//precies goed
$punten = 10;
}
elseif(in_array($fetch['partij1'], range($score1-2,$score1+2) && in_array($fetch['partij2'], range($score2-2,$score2+2)){
// nu mag je voor beide partijen er 2 hoger of lager naast zitten
$punten = 7;
}
elseif($fetch['partij1'] == $score1){ // nr1 goed
$punten = 5;
}
elseif($fetch['partij2'] == $score2){// nr2 goed
$punten = 5;
}
else{ $punten = 0;}
mysql_query("UPDATE users SET hun_score=hun_score+".$punten." WHERE id=".$fetch['uid']." LIMIT 1");
}
$score1 = 3 ; // daadwerkelijke score van partij1
$score2 = 1 ; // daadwerkelijke score van partij2
if ( $fetch [ 'partij1' ] == $score1 && $fetch [ 'partij2' ] == $score2 ) { //precies goed
$punten = 10 ;
}
// nu mag je voor beide partijen er 2 hoger of lager naast zitten
$punten = 7 ;
}
elseif ( $fetch [ 'partij1' ] == $score1 ) { // nr1 goed
$punten = 5 ;
}
elseif ( $fetch [ 'partij2' ] == $score2 ) { // nr2 goed
$punten = 5 ;
}
else { $punten = 0 ; }
mysql_query ( "UPDATE users SET hun_score=hun_score+" . $punten . " WHERE id=" . $fetch [ 'uid' ] . " LIMIT 1" ) ; }
Ik heb expres niet alle uitkomsten gedaan, nu moet je m zelf afmaken ;)
roelh - 09/05/2012 11:48
PHP gevorderde
Hmm dank je wel, eens kijken of ik hier wat mee kan. Ziet er ingewikkeld uit, maar ik ga het proberen
Martijn - 09/05/2012 11:54 (laatste wijziging 09/05/2012 11:58)
Crew PHP
t valt wel mee denk ik.
de elseif's doen eigenlijk hetzelfde als wat jij doet.
Het enige stuk waty uitleg kan gebruiken is de range+in_array
//in_array doet dit:
$array = array(1,2,3,4,5);
echo in_array(1 , $array); // zal 1 (true) geven
echo in_array(8 , $array); // zal 0 (false) geven
//range doet dit:
$array = array(1,2,3,4,5);
$array = range(1,5); // zal exact hetzelfde geven
//in_array doet dit:
$array = array ( 1 , 2 , 3 , 4 , 5 ) ;
//range doet dit:
$array = array ( 1 , 2 , 3 , 4 , 5 ) ; $array = range ( 1 , 5 ) ; // zal exact hetzelfde geven
edit: Ik heb mn code een beetje aangepast, mogelijk lees je m nu makkelijker
roelh - 09/05/2012 12:05 (laatste wijziging 09/05/2012 12:49)
PHP gevorderde
Ik heb ondertsaande nu, maar het werkt niet, ik krijg foutmeldingen
Notice: Undefined variable: 2 in F:\USBWebserver v8_nl\root\voetbal\users\controle.php on line 19
Notice: Undefined variable: 2 in F:\USBWebserver v8_nl\root\voetbal\users\controle.php on line 22
Notice: Undefined variable: 2 in F:\USBWebserver v8_nl\root\voetbal\users\controle.php on line
Notice: Undefined variable: 2 in F: \USBWebserver v8_nl\root\voetbal\users\controle. php on line 19
Notice: Undefined variable: 2 in F: \USBWebserver v8_nl\root\voetbal\users\controle. php on line 22
Notice: Undefined variable: 2 in F: \USBWebserver v8_nl\root\voetbal\users\controle. php on line
Ik haal informatie uit verschillende tabellen...
Wie kan me op gang helpen?
<?
mysql_connect($host,$user,$pass) or die(mysql_error());
mysql_select_db($db);
$query = mysql_query("SELECT * FROM speelschema where gespeeld = 1 AND gecontroleerd = 0") or die(mysql_error());
$useruitslag = mysql_query("SELECT * FROM voorspelling INNER JOIN users ON (voorspelling.userid = users.id)") or die(mysql_error());
while($fetch = mysql_fetch_assoc($query)){
while($fetch1 = mysql_fetch_assoc($useruitslag)){
if($fetch['thuisteam'] == $$fetch1['uitslagthuis'] && $fetch['uitteam'] == $$fetch1['uitslaguit']){//precies goed
$punten = 10;
}
elseif(in_array($fetch['thuisteam'], range($$fetch1['uitslagthuis']-2,$$fetch1['uitslagthuis']+2)) && in_array($fetch['uitteam'], range($$fetch1['uitslaguit']-2,$$fetch1['uitslaguit']+2))){
// nu mag je voor beide partijen er 2 hoger of lager naast zitten
$punten = 7;
}
elseif($fetch['thuisteam'] == $$fetch1['uitslagthuis']){ // nr1 goed
$punten = 5;
}
elseif($fetch['uitteam'] == $$fetch1['uitslaguit']){// nr2 goed
$punten = 5;
}
else{ $punten = 0;}
mysql_query("UPDATE users SET punten=punten+".$punten." WHERE id=".$fetch['id']." LIMIT 1");
}
}
echo 'Er is nik te controleren';
?>
<?
$useruitslag = mysql_query ( "SELECT * FROM voorspelling INNER JOIN users ON (voorspelling.userid = users.id)" ) or
die ( mysql_error ( ) ) ;
if ( $fetch [ 'thuisteam' ] == $$fetch1 [ 'uitslagthuis' ] && $fetch [ 'uitteam' ] == $$fetch1 [ 'uitslaguit' ] ) { //precies goed
$punten = 10 ;
}
elseif ( in_array ( $fetch [ 'thuisteam' ] , range ( $$fetch1 [ 'uitslagthuis' ] - 2 , $$fetch1 [ 'uitslagthuis' ] + 2 ) ) && in_array ( $fetch [ 'uitteam' ] , range ( $$fetch1 [ 'uitslaguit' ] - 2 , $$fetch1 [ 'uitslaguit' ] + 2 ) ) ) { // nu mag je voor beide partijen er 2 hoger of lager naast zitten
$punten = 7 ;
}
elseif ( $fetch [ 'thuisteam' ] == $$fetch1 [ 'uitslagthuis' ] ) { // nr1 goed
$punten = 5 ;
}
elseif ( $fetch [ 'uitteam' ] == $$fetch1 [ 'uitslaguit' ] ) { // nr2 goed
$punten = 5 ;
}
else { $punten = 0 ; }
mysql_query ( "UPDATE users SET punten=punten+" . $punten . " WHERE id=" . $fetch [ 'id' ] . " LIMIT 1" ) ; }
}
echo 'Er is nik te controleren' ;
?>
Martijn - 09/05/2012 12:52
Crew PHP
Ja, die twee waren een voorbeeld om te laten zien dat ze apart ook werken, je kunt dus combo's maken (1 in range, 1 precies goed en andersom, etc)
de while lus is ongeveer de foreach. die while doet eigenlijk dit:
Zolang(while) er regels uit de database zijn, voer de onderstaande code uit per regel.
dus dit zal 3 draaien:
pietje, 1, 3
klaasje, 2, 2
willem, 3, 2
Voor elke regel 1x dus.
roelh - 10/05/2012 19:36
PHP gevorderde
Geen idee wat ik fout doe. Maar hij geetf alleen punten aan 1 user, terwijl er meerdere in het systeem staan. Wat doe ik fout? Wie kan me helpen?
$query = mysql_query("SELECT * FROM speelschema") or die(mysql_error());
$useruitslag = mysql_query("SELECT * FROM voorspelling") or die(mysql_error());
while($fetch = mysql_fetch_assoc($query)){
$fetch1 = mysql_fetch_assoc($useruitslag);
if($fetch['thuisteam'] == $fetch1['uitslagthuis'] && $fetch['uitteam'] == $fetch1['uitslaguit']){//precies goed
$punten = 10;
}
elseif(in_array($fetch['thuisteam'], range($fetch1['uitslagthuis']-2, $fetch1['uitslagthuis']+2)) && in_array($fetch['uitteam'], range($fetch1['uitslaguit']-2, $fetch1['uitslaguit']+2))){
// nu mag je voor beide partijen er 2 hoger of lager naast zitten
$punten = 7;
}
else{ $punten = 0;}
echo $punten;
mysql_query("UPDATE users SET punten=punten+".$punten." WHERE id=".$fetch1['id']."");
}
?>
if ( $fetch [ 'thuisteam' ] == $fetch1 [ 'uitslagthuis' ] && $fetch [ 'uitteam' ] == $fetch1 [ 'uitslaguit' ] ) { //precies goed
$punten = 10 ;
}
elseif ( in_array ( $fetch [ 'thuisteam' ] , range ( $fetch1 [ 'uitslagthuis' ] - 2 , $fetch1 [ 'uitslagthuis' ] + 2 ) ) && in_array ( $fetch [ 'uitteam' ] , range ( $fetch1 [ 'uitslaguit' ] - 2 , $fetch1 [ 'uitslaguit' ] + 2 ) ) ) { // nu mag je voor beide partijen er 2 hoger of lager naast zitten
$punten = 7 ;
}
else { $punten = 0 ; }
mysql_query ( "UPDATE users SET punten=punten+" . $punten . " WHERE id=" . $fetch1 [ 'id' ] . "" ) ;
}
?>
Martijn - 11/05/2012 10:31
Crew PHP
Moest even zoeken, maar t is een hele simpele
Je doet het net verkeerd. Je selecteerd op regel 1 en regel2 uit elke tabel alles .
vervolgens doe je een while, die alles uit $query regel voor regel uitvoert.
In je while het je $fetch1, maar die staat niet in een while.
while($fetch = mysql_fetch_assoc($query) doet dit:
"zolang er regel zijn doe je dit"
- vul $fetch met de waardes van 1 regel
- ga naar de volgende regel
jou $fetch1 staat niet in een while, dus zal alleen maar de eerste regel nemen. Jij moet dus zoiets:
while($elke_wedstrijd_per_stuk){
while($voorspellingen_voor_deze_wedstrijd_per_stuk){
// kijk of $wedstrijd_per_stuk == $voorspelling_per_stuk
// Update users waar id= $voorspelling_per_stuk['user']
}
}
while ( $elke_wedstrijd_per_stuk ) {
while ( $voorspellingen_voor_deze_wedstrijd_per_stuk ) {
// kijk of $wedstrijd_per_stuk == $voorspelling_per_stuk
// Update users waar id= $voorspelling_per_stuk['user']
}
}
roelh - 11/05/2012 22:05 (laatste wijziging 12/05/2012 12:10)
PHP gevorderde
Dit werkt, het enige wat nu niet wil is wanneer de wedstrijd correct voorspeld is hij geen 10 maar er 7 geeft...
Als ik ze uit de DB is het niet correct, maar als ik zelf variablen aanmaak werkt het wel..
Wie o wie please?
$query = mysql_query("SELECT thuisteam, uitteam FROM speelschema where gespeeld = 1 AND gecontroleerd = 0") or die(mysql_error());
$useruitslag = mysql_query("SELECT * FROM voorspelling") or die(mysql_error());
while($fetch = mysql_fetch_assoc($query)){
while($fetch1 = mysql_fetch_assoc($useruitslag)){
if($fetch['thuisteam'] == $fetch1['uitslagthuis'] && $fetch['uitteam'] == $fetch1['uitslaguit']){//precies goed
$punten = 10;
}
elseif(in_array($fetch['thuisteam'], range($fetch1['uitslagthuis']-2, $fetch1['uitslagthuis']+2)) && in_array($fetch['uitteam'], range($fetch1['uitslaguit']-2, $fetch1['uitslaguit']+2))){
// nu mag je voor beide partijen er 2 hoger of lager naast zitten
$punten = 7;
}
else{ $punten = 0;}
echo $punten;
mysql_query("UPDATE users SET punten=punten+".$punten." WHERE id=".$fetch1['id']."");
}
}
?>
$query = mysql_query ( "SELECT thuisteam, uitteam FROM speelschema where gespeeld = 1 AND gecontroleerd = 0" ) or
die ( mysql_error ( ) ) ;
if ( $fetch [ 'thuisteam' ] == $fetch1 [ 'uitslagthuis' ] && $fetch [ 'uitteam' ] == $fetch1 [ 'uitslaguit' ] ) { //precies goed
$punten = 10 ;
}
elseif ( in_array ( $fetch [ 'thuisteam' ] , range ( $fetch1 [ 'uitslagthuis' ] - 2 , $fetch1 [ 'uitslagthuis' ] + 2 ) ) && in_array ( $fetch [ 'uitteam' ] , range ( $fetch1 [ 'uitslaguit' ] - 2 , $fetch1 [ 'uitslaguit' ] + 2 ) ) ) { // nu mag je voor beide partijen er 2 hoger of lager naast zitten
$punten = 7 ;
}
else { $punten = 0 ; }
mysql_query ( "UPDATE users SET punten=punten+" . $punten . " WHERE id=" . $fetch1 [ 'id' ] . "" ) ;
}
}
?>
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.