[PHP/MYSQL] in_array

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

  • drikus
  • Registratie: Juni 2000
  • Laatst online: 25-03 07:18
Heel actueel nl een F1 scrippie. Had er mee getest en leek goed maar toch gaat er iets mis met de functie in_array. Ben geen goeroe op PHPen Mysql dus de code zal voor velen wel heel bijzonder zijn. ;)

Het stukje relevante code
PHP:
1
<?$P1 = mysql_fetch_row(mysql_query("SELECT p1 FROM TSinvul WHERE race = '$race'"));$K1 = "$P1[0]";$P2 = mysql_fetch_row(mysql_query("SELECT p2 FROM TSinvul WHERE race = '$race'"));                                      $K2 = "$P2[0]";$P3 = mysql_fetch_row(mysql_query("SELECT p3 FROM TSinvul WHERE race = '$race'"));                                      $K3 = "$P3[0]";$P4 = mysql_fetch_row(mysql_query("SELECT p4 FROM TSinvul WHERE race = '$race'"));                                      $K4 = "$P4[0]";$P5 = mysql_fetch_row(mysql_query("SELECT p5 FROM TSinvul WHERE race = '$race'"));                                      $K5 = "$P5[0]";$P6 = mysql_fetch_row(mysql_query("SELECT p6 FROM TSinvul WHERE race = '$race'"));                                      $K6 = "$P6[0]";$P7 = mysql_fetch_row(mysql_query("SELECT pole FROM TSinvul WHERE race = '$race'"));                                    $K7 = "$P7[0]"$list = array($K1,$K2,$K3,$K4,$K5,$K6);for ($i = 2; $i <= 7; $i++) {$T1 = mysql_fetch_row(mysql_query("SELECT p1 FROM $race WHERE uid = $i"));$W1 = "$T1[0]"; if ($K1 == $W1) { $R1 = 3; } elseif (in_array ($W1, $list)) { $R1 = 1; } else { $R1 = 0;}echo $W1;echo $R1;?>

Met als echo het resultaat Michael Schumacher 3David Coulthard 0Michael Schumacher 3Juan Pablo Montoya 1Juan Pablo Montoya 0Michael Schumacher 0

Nu komt Juan Pablo Montoya voor in de array en het eerste resultaat geeft dit ook aan(1) maar op een of andere manier bij de volgende for is juan weer aan de beurt maar de in_array wil het niet meer zien.(0) :?

How come ?? Zit ik helemaal op het verkeerde pad of ??

Verwijderd

Maffe code

  • Grum
  • Registratie: Juni 2001
  • Niet online
sorry hoor .. hoe krijg je et voor elkaar om een dusdanige rotbende te maken van je code ??

combineer je query es man ...
je doet er nu !7! om 7 velden informatie uit de database de halen die je ook in 1x eruit kan halen ....
PHP:
1
<?$P1 = mysql_fetch_row(mysql_query("SELECT p1 FROM TSinvul WHERE race = '$race'"));$K1 = "$P1[0]";$P2 = mysql_fetch_row(mysql_query("SELECT p2 FROM TSinvul WHERE race = '$race'"));$K2 = "$P2[0]";$P3 = mysql_fetch_row(mysql_query("SELECT p3 FROM TSinvul WHERE race = '$race'"));$K3 = "$P3[0]";P4 = mysql_fetch_row(mysql_query("SELECT p4 FROM TSinvul WHERE race = '$race'"));$K4 = "$P4[0]";$P5 = mysql_fetch_row(mysql_query("SELECT p5 FROM TSinvul WHERE race = '$race'"));$K5 = "$P5[0]";$P6 = mysql_fetch_row(mysql_query("SELECT p6 FROM TSinvul WHERE race = '$race'"));$K6 = "$P6[0]";$P7 = mysql_fetch_row(mysql_query("SELECT pole FROM TSinvul WHERE race = '$race'"));$K7 = "$P7[0]";$list = array($K1,$K2,$K3,$K4,$K5,$K6);?>

kan je ook doen met:
PHP:
1
<?$theQuery  = "SELECT p1,p2,p3,p4,p5,p6,pole FROM TSinvul WHERE race = '$race'";$theResult = mysql_query($theQuery);$theList   = mysql_fetch_array($theResult);?>

nu staat er in $theList PRECIES etzelfde als in $list zou staan met ik zou toch zeggen een stuk efficientere/nettere code

  • drikus
  • Registratie: Juni 2000
  • Laatst online: 25-03 07:18
Op zondag 03 maart 2002 10:40 schreef drikus het volgende:
Ben geen goeroe op PHPen Mysql dus de code zal voor velen wel heel bijzonder zijn. ;)
Hmm toch goed geanticipeerd. ;) Maar waarom werkt die in_array niet ??

  • Grum
  • Registratie: Juni 2001
  • Niet online
wat wil je in godsnaam doen met die code ? :)

edit: omdat je zo brak (lees NIET) indent zie je ok niet dat je een } mist in je code ..

edit2: ook nog een parseerror omdat je $K7 = "$P7[0]" niet afsluit met een ;

nu ik naar je 2e query kijk krijg ik tranen in me ogen als ik nadenk over watvoor db structuur je hebt :'(

  • drikus
  • Registratie: Juni 2000
  • Laatst online: 25-03 07:18
Idd het kan veel netter maar ik heb elke waarde apart nodig om een vergelijkinkje te gaan maken.
PHP:
1
<?if ($K1 == $W1) { $R1 = 3; } elseif (in_array ($W1, $list)) { $R1 = 1; } else { $R1 = 0;}?>

Juiste plaats is 3 punten. Komt een coureur bij de eerste 6 voor 1 punt enz.

maar waarom werkt die in_array niet ?? Dat was eigenlijk de vraag ook al kijken jullie met pijn in de ogen naar de code ;)

Overigens heb nooit een boek gelezen over PHP en mysql en vandaar een nogal merkwaardig DB ontwerp en code. Sorry hoor we zijn niet allemaal goeroes en vraag hier alleen waarom die in_array niet werkt. En ik heb alleen maar de relevantestukjes hier geplaatst vandaar die missing } en ;.
Als ik meer neerzet worden jullie helemaal gek denk ik dan maar ;)

  • Grum
  • Registratie: Juni 2001
  • Niet online
zet voor de grap es error_reporting(E_ALL); boven je code :P

tis niet echt slim btw om code te plaatsen die niet werkt ... (door die missende ; en } )

maar ok .. nogmaals .. leg even uit wat de bedoeling was

1/ ophalen van de resultaten (plek1-6, pole) van een bepaalde race
2/ ????
3/ goede plek = 3, foute plek maar wel goede (???) is 1 rest is nix (?)

leg stap 2 even uit en vul 3 even aan :P .. dan komen we ergens ;)

  • drikus
  • Registratie: Juni 2000
  • Laatst online: 25-03 07:18
Believe me ut werkt behalve de in_array..!!!!!!!

  • drikus
  • Registratie: Juni 2000
  • Laatst online: 25-03 07:18
Error reporting = zero errors *D

  • Grum
  • Registratie: Juni 2001
  • Niet online
tja .. als je et niet wil uitleggen kan ik ook niet meer zeggen dan:

controleer of wat der in je variabelen zit of dat ook klopt met wat jij verwacht dat erin zit.

  • drikus
  • Registratie: Juni 2000
  • Laatst online: 25-03 07:18
Tabel Melbourne met kolom uid.p1.p2.p3.p4.p5.p6.pole
Tabel TSinvul met kolom p1.p2.p3.p4.p5.p6.pole.race

In invul staan de uitslagen van de race

1. Schumacher
2. Montoya
3. Raikonen
4. Irvine
5. Webber
6. Salo

In melbourne staan de voorspellingen van deelnemers gekoppeld aan een uid en voor de rest zelfde formaat.

Nu halen en kennen we eerst een waarde toe aan p1.p2.p3.p4.p5.p6.pole
PHP:
1
<?$P1 = mysql_fetch_row(mysql_query("SELECT p1 FROM TSinvul WHERE race = '$race'"));$K1 = "$P1[0]";$P2 = mysql_fetch_row(mysql_query("SELECT p2 FROM TSinvul WHERE race = '$race'"));                                      $K2 = "$P2[0]";$P3 = mysql_fetch_row(mysql_query("SELECT p3 FROM TSinvul WHERE race = '$race'"));                                      $K3 = "$P3[0]";$P4 = mysql_fetch_row(mysql_query("SELECT p4 FROM TSinvul WHERE race = '$race'"));                                      $K4 = "$P4[0]";$P5 = mysql_fetch_row(mysql_query("SELECT p5 FROM TSinvul WHERE race = '$race'"));                                      $K5 = "$P5[0]";$P6 = mysql_fetch_row(mysql_query("SELECT p6 FROM TSinvul WHERE race = '$race'"));                                      $K6 = "$P6[0]";$P7 = mysql_fetch_row(mysql_query("SELECT pole FROM TSinvul WHERE race = '$race'"));                                    $K7 = "$P7[0]";?>

Dan trekken we de voorspellingen leeg op basis van het UID
PHP:
1
<?for ($i = 2; $i <= 28; $i++) {$T1 = mysql_fetch_row(mysql_query("SELECT p1 FROM $race WHERE uid = '$i'"));$W1 = "$T1[0]"; $T2 = mysql_fetch_row(mysql_query("SELECT p2 FROM $race WHERE uid = '$i'")); $W2 = "$T2[0]"; $T3 = mysql_fetch_row(mysql_query("SELECT p3 FROM $race WHERE uid = '$i'")); $W3 = "$T3[0]"; $T4 = mysql_fetch_row(mysql_query("SELECT p4 FROM $race WHERE uid = '$i'")); $W4 = "$T4[0]"; $T5 = mysql_fetch_row(mysql_query("SELECT p5 FROM $race WHERE uid = '$i'")); $W5 = "$T5[0]"; $T6 = mysql_fetch_row(mysql_query("SELECT p6 FROM $race WHERE uid = '$i'")); $W6 = "$T6[0]"; $T7 = mysql_fetch_row(mysql_query("SELECT pole FROM $race WHERE uid = '$i'")); $W7 = "$T7[0]"; $list = array($K1,$K2,$K3,$K4,$K5,$K6);if ($K1 == $W1) { $R1 = 3; } elseif (in_array ($W1, $list)) { $R1 = 1; } else { $R1 = 0;}if ($K2 == $W2) { $R2 = 3; } elseif (in_array ($W2, $list)) { $R2 = 1; } else { $R2 = 0;} if ($K3 == $W3) { $R3 = 3; } elseif (in_array ($W3, $list)) { $R3 = 1; } else { $R3 = 0;} if ($K4 == $W4) { $R4 = 3; } elseif (in_array ($W4, $list)) { $R4 = 1; } else { $R4 = 0;} if ($K5 == $W5) { $R5 = 3; } elseif (in_array ($W5, $list)) { $R5 = 1; } else { $R5 = 0;} if ($K6 == $W6) { $R6 = 3; } elseif (in_array ($W6, $list)) { $R6 = 1; } else { $R6 = 0;} if ($K7 == $W7) { $R7 = 2; } else { $R7 = 0 ;} $sum2  = ($R1+$R2+$R3);if ($sum2 == 9) { $R9 = 5; } else { $R9 = 0 ;} $sum3 = ($R1+$R2+$R3+$R4+$R5+$R6);if ($sum3 == 18) { $R10 = 10;} else { $R10 = 0 ;}$sum = ($R1+$R2+$R3+$R4+$R5+$R6+$R7+$R9+$R10);?>

Dus hierboven wordt gegoogeld met de punten.

Voor iedere coureur die bij de eerste 6 eindigt krijgt men 1 punt
Is de coureur op de juiste positie voorspelt; dan krijgt men 2 Bonuspunten
Bij juiste voorspelling van de eerste 3 coureurs krijgt men 5 bonuspunten.
Bij juiste voorspelling van alle coureurs op de juiste positie krijgt men nog eens 10 bonuspunten
Juiste voorspelling van de Poleposition 2 bonuspunten.

Dan wordt $sum weer ingevoerd in een andere tabel voor de resultaten... En dit gaat allemaal goed behalve als in_array tweemaal achter elkaar dezelfde waarde tegenkomt op dezelfde plek(p1) voor een verschillend UID. ?

  • Grum
  • Registratie: Juni 2001
  • Niet online
zijn maar een paar echte basis regels om te coden:

1/ gebruik indenting
2/ gebruik error reporting (das voor php en perl :P)
3/ gebruik DUIDELIJKE variabele namen (jaja zelfs als je meer moet tikken!)

  • Grum
  • Registratie: Juni 2001
  • Niet online
Dus 1 iemand kan in totaal: 6x1 (alle mensen goed) + 6x2 (alle plekken goed) + 10 (voor alle plekken goed) + 5 (voor de eerste 3 plekken goed) + 2 (voor pole goed) == 6+12+10+5+2=35 punten krijgen ?

  • drikus
  • Registratie: Juni 2000
  • Laatst online: 25-03 07:18
Ja klopt moet wel alles meezitten hoor! 8-)

  • Grum
  • Registratie: Juni 2001
  • Niet online
PHP:
1
<?$theRaceList = array('p1','p2','p3','p4','p5','p6','pole');$theUserList = array('p1','p2','p3','p4','p5','p6','pole'); $theScore = 0;$theAll   = 1;$theTop3  = 1; for($i = 0; $i < count($theRaceList); $i++){   if($i == 6) // item 7 (pole)   {      if($theRaceList[$i] == $theUserList[$i])         $theScore += 2;   }   else   {      if($i < 3 &amp;&amp; $theTop3)  // for the top3         if($theRaceList[$i] != $theUserList[$i])            $theTop3 = 0;      if($theRaceList[$i] != $theUserList[$i])      {         if(in_array($theUserList[$i], $theRaceList))            $theBonus++;         $theAll = 0;      }      else         $theBonus += 2;   }} if($theAll)  $theBonus += 10;if($theTop3) $theBonus += 5;?>

ongetest en uit me kop :)

edit:
Foutje eruit (tnx Soultaker) - still untested

  • drikus
  • Registratie: Juni 2000
  • Laatst online: 25-03 07:18
Ik heb gezocht totdat ik scheel zag en heb nu een beetje hoofdpijn maar ben wel opgelucht omdat ik het probje heb gevonden *D *D.

Vorig jaar november had ik het script al gemaakt en getest op F2S en op mijn eigen doos. En alles ging toen goed met 3 test usertjes en ik was vanochtend al zo verbaasd waarom het wel werkte voor een aantal uid maar andere weer niet. Iets overschreven wellicht dacht ik eerst. ?

Urenlang naar die 'kromme' code zitten staren en kon maar niets vinden wat er verkeerd aan moest zijn. Toen zelfde uitslag van een ander uid ergens anders ingezet en dat ging wel goed :?

He zal het iets met de tabel te maken hebben want is auto-increment met primary key op de UID. Beetje mee gestoeid en nee hoor was het niet.

Deed op een bepaald moment een echo van alle deelnemers met de resultaten voor p1,p2,p3.etc en zag opeens een extra spatie tussen de waarde van de echo.

Ikke dumpje maken van de tabel en jawel hoor een aantal (13, 'Juan Pablo Montoya\r\n', en een aantal (13, 'Juan Pablo Montoya\r', Alles hersteld naar \r\n en alles werkt weer zoals voorheen !!!.

*D *D *D *D

Omdat ik de strings vergeleek kwam er natuurlijk een andere waarde uit en werd het resultaat natuurlijk 0.

Maar hoe komt het nou ?? Waarschijnlijk doordat ik meerdere malen van hoster ben verhuisd en deze anders omgaan met het afsluiten van de velden. |:(

Maar goed alles weer ok. En Grum hartelijk dank voor de lap code maar is voor mij iets te advanced. Overigens heb ik er wel anderhalf uur naar gekeken om het een beetje te begrijpen. Ik heb geprobeerd om de code toe te passen maar kreeg het niet voor elkaar om er wat waarde uit te halen.

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 13-09 15:13
Even uit m'n hoofd debuggen:

[quote]Op zondag 03 maart 2002 13:41 schreef Grum het volgende:
PHP:
1
<?   ...   if($i == 6) // item 7 (pole)      if($theRaceList[$i] == $theUserList[$i])         $theScore += 2;   else   ...?>

Ik heb net even het bericht overgeslagen waarin uitgelegd wat de bedoeling van 't algoritme was dus je moet zelf maar even een conclusie trekken, maar de plaatsing van deze else klopt niet met de manier van inspringen. Ik ga er zelf van uit dat Grum wel ordentelijk in kan springen, dus zullende accolades om de het binnenste if-statement en bijbehorende code wel vergeten zijn.

Dit is een mooi voorbeeld van het belang van correct inspringen in je code, aangezien een dergelijke fout in niet ingesprongen code bijna onmogelijk terug te vinden zou zijn geweest.

Ook een mooi uitgangspunt om een betoog te houden over de voordelen van Perl ten op zichte van PHP, trouwens, aangezien deze fout in Perl niet voor zou hebben kunnen komen. (Huiswerkopgave: zoek uit waarom en hoe je dit in PHP ook kan voorkomen.)

offtopic:
Waarom sloopt dit forum alle formattering uit de PHP code, wanneer ik deze probeer te quoten?!

  • drikus
  • Registratie: Juni 2000
  • Laatst online: 25-03 07:18
(Huiswerkopgave: zoek uit waarom en hoe je dit in PHP ook kan voorkomen.)
Sorry heb nu hoofdpijn maar ctrl-D en nog twee weken tot de volgende race :Z
offtopic:
Waarom sloopt dit forum alle formattering uit de PHP code, wanneer ik deze probeer te quoten?!
Dat zou ik ook wel eens willen weten

  • Grum
  • Registratie: Juni 2001
  • Niet online
Soultaker: netjes gezien .. der moet indeed een paar accolades om die if heen ... foutje :P

edit:

dat slopen van de codelayout is pas sinds kort :(
en ERRUG kut als je zoals ik dus net ff een lap code wil changen :(

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Maak eerst een goed ontwerp, ga uitzoeken hoe je effectief een database kan gebruiken, programmeer er dan ook zo op, en kom DAN nog een keertje terug met je vragen.

Als je 3 kranten wilt hebben loop je ook niet 3 keer van je huis naar de boekenwinkel om een krant per keer te halen.

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR

Pagina: 1

Dit topic is gesloten.